pax_global_header00006660000000000000000000000064125714154720014522gustar00rootroot0000000000000052 comment=2cd9414c8924f13eed04db6b0f1fa0afde76647b xnec2c-3.4/000077500000000000000000000000001257141547200125525ustar00rootroot00000000000000xnec2c-3.4/AUTHORS000066400000000000000000000000711257141547200136200ustar00rootroot00000000000000Neoklis Kyriazis Ham Radio Call: 5B4AZ nkcyham@yahoo.com xnec2c-3.4/COPYING000066400000000000000000001045131257141547200136110ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state 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 3 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, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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 Lesser General Public License instead of this License. But first, please read . xnec2c-3.4/ChangeLog000066400000000000000000000000621257141547200143220ustar00rootroot00000000000000Please read the user manual in the doc/ directory xnec2c-3.4/INSTALL000066400000000000000000000366101257141547200136110ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command `./configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. xnec2c-3.4/Makefile.am000066400000000000000000000016211257141547200146060ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = src po INTLTOOL_FILES = intltool-extract.in \ intltool-merge.in \ intltool-update.in EXTRA_DIST = \ autogen.sh \ xnec2c.glade \ xnec2c.gladep \ examples \ doc \ $(INTLTOOL_FILES) DISTCLEANFILES = \ intltool-extract* \ intltool-merge* \ intltool-update* \ po/.intltool-merge-cache* install-data-local: @$(NORMAL_INSTALL) if test -d $(srcdir)/pixmaps; then \ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/pixmaps; \ for pixmap in $(srcdir)/pixmaps/*; do \ if test -f $$pixmap; then \ $(INSTALL_DATA) $$pixmap $(DESTDIR)$(pkgdatadir)/pixmaps; \ fi \ done \ fi dist-hook: if test -d pixmaps; then \ mkdir $(distdir)/pixmaps; \ for pixmap in pixmaps/*; do \ if test -f $$pixmap; then \ cp -p $$pixmap $(distdir)/pixmaps; \ fi \ done \ fi xnec2c-3.4/Makefile.in000066400000000000000000000637251257141547200146340ustar00rootroot00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in AUTHORS \ COPYING ChangeLog INSTALL NEWS README compile install-sh \ missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PROGRAMNAME_LOCALEDIR = @PROGRAMNAME_LOCALEDIR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src po INTLTOOL_FILES = intltool-extract.in \ intltool-merge.in \ intltool-update.in EXTRA_DIST = \ autogen.sh \ xnec2c.glade \ xnec2c.gladep \ examples \ doc \ $(INTLTOOL_FILES) DISTCLEANFILES = \ intltool-extract* \ intltool-merge* \ intltool-update* \ po/.intltool-merge-cache* all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-am uninstall uninstall-am .PRECIOUS: Makefile install-data-local: @$(NORMAL_INSTALL) if test -d $(srcdir)/pixmaps; then \ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)/pixmaps; \ for pixmap in $(srcdir)/pixmaps/*; do \ if test -f $$pixmap; then \ $(INSTALL_DATA) $$pixmap $(DESTDIR)$(pkgdatadir)/pixmaps; \ fi \ done \ fi dist-hook: if test -d pixmaps; then \ mkdir $(distdir)/pixmaps; \ for pixmap in pixmaps/*; do \ if test -f $$pixmap; then \ cp -p $$pixmap $(distdir)/pixmaps; \ fi \ done \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xnec2c-3.4/NEWS000066400000000000000000000000621257141547200132470ustar00rootroot00000000000000Please read the user manual in the doc/ directory xnec2c-3.4/README000066400000000000000000000000621257141547200134300ustar00rootroot00000000000000Please read the user manual in the doc/ directory xnec2c-3.4/aclocal.m4000066400000000000000000002260371257141547200144240ustar00rootroot00000000000000# generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl glib_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 42 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " [$]@;' AC_SUBST(INTLTOOL_V_MERGE) AC_SUBST(INTLTOOL__v_MERGE_) AC_SUBST(INTLTOOL__v_MERGE_0) INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' AC_SUBST(INTLTOOL_V_MERGE_OPTIONS) AC_SUBST(intltool__v_merge_options_) AC_SUBST(intltool__v_merge_options_0) INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< [$]@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.[$][$]RANDOM && mkdir [$][$]_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u [$][$]_it_tmp_dir $< [$]@ && rmdir [$][$]_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi AC_PATH_PROG(INTLTOOL_PERL, perl) if test -z "$INTLTOOL_PERL"; then AC_MSG_ERROR([perl not found]) fi AC_MSG_CHECKING([for perl >= 5.8.1]) $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then AC_MSG_ERROR([perl 5.8.1 is required for intltool]) else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` AC_MSG_RESULT([$IT_PERL_VERSION]) fi if test "x$2" != "xno-xml"; then AC_MSG_CHECKING([for XML::Parser]) if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then AC_MSG_RESULT([ok]) else AC_MSG_ERROR([XML::Parser perl module is required for intltool]) fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be executed at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) # nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # PKG_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable pkgconfigdir as the location where a module # should install pkg-config .pc files. By default the directory is # $libdir/pkgconfig, but the default can be changed by passing # DIRECTORY. The user can override through the --with-pkgconfigdir # parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_INSTALLDIR # PKG_NOARCH_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable noarch_pkgconfigdir as the location where a # module should install arch-independent pkg-config .pc files. By # default the directory is $datadir/pkgconfig, but the default can be # changed by passing DIRECTORY. The user can override through the # --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_NOARCH_INSTALLDIR # PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # ------------------------------------------- # Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])# PKG_CHECK_VAR # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR xnec2c-3.4/autogen.sh000077500000000000000000000425431257141547200145630ustar00rootroot00000000000000#!/bin/sh # Run this to generate all the initial makefiles, etc. #name of package test "$PKG_NAME" || PKG_NAME=Package test "$srcdir" || srcdir=. # default version requirements ... test "$REQUIRED_AUTOCONF_VERSION" || REQUIRED_AUTOCONF_VERSION=2.53 test "$REQUIRED_AUTOMAKE_VERSION" || REQUIRED_AUTOMAKE_VERSION=1.9 test "$REQUIRED_LIBTOOL_VERSION" || REQUIRED_LIBTOOL_VERSION=1.4.3 test "$REQUIRED_GETTEXT_VERSION" || REQUIRED_GETTEXT_VERSION=0.10.40 test "$REQUIRED_GLIB_GETTEXT_VERSION" || REQUIRED_GLIB_GETTEXT_VERSION=2.2.0 test "$REQUIRED_INTLTOOL_VERSION" || REQUIRED_INTLTOOL_VERSION=0.25 test "$REQUIRED_PKG_CONFIG_VERSION" || REQUIRED_PKG_CONFIG_VERSION=0.14.0 test "$REQUIRED_GTK_DOC_VERSION" || REQUIRED_GTK_DOC_VERSION=1.0 test "$REQUIRED_DOC_COMMON_VERSION" || REQUIRED_DOC_COMMON_VERSION=2.3.0 test "$REQUIRED_GNOME_DOC_UTILS_VERSION" || REQUIRED_GNOME_DOC_UTILS_VERSION=0.4.2 # a list of required m4 macros. Package can set an initial value test "$REQUIRED_M4MACROS" || REQUIRED_M4MACROS= test "$FORBIDDEN_M4MACROS" || FORBIDDEN_M4MACROS= # Not all echo versions allow -n, so we check what is possible. This test is # based on the one in autoconf. ECHO_C= ECHO_N= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ;; *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac # some terminal codes ... if tty < /dev/null 1>/dev/null 2>&1; then boldface="`tput bold 2>/dev/null`" normal="`tput sgr0 2>/dev/null`" else boldface= normal= fi printbold() { echo $ECHO_N "$boldface" $ECHO_C echo "$@" echo $ECHO_N "$normal" $ECHO_C } printerr() { echo "$@" >&2 } # Usage: # compare_versions MIN_VERSION ACTUAL_VERSION # returns true if ACTUAL_VERSION >= MIN_VERSION compare_versions() { ch_min_version=$1 ch_actual_version=$2 ch_status=0 IFS="${IFS= }"; ch_save_IFS="$IFS"; IFS="." set $ch_actual_version for ch_min in $ch_min_version; do ch_cur=`echo $1 | sed 's/[^0-9].*$//'`; shift # remove letter suffixes if [ -z "$ch_min" ]; then break; fi if [ -z "$ch_cur" ]; then ch_status=1; break; fi if [ $ch_cur -gt $ch_min ]; then break; fi if [ $ch_cur -lt $ch_min ]; then ch_status=1; break; fi done IFS="$ch_save_IFS" return $ch_status } # Usage: # version_check PACKAGE VARIABLE CHECKPROGS MIN_VERSION SOURCE # checks to see if the package is available version_check() { vc_package=$1 vc_variable=$2 vc_checkprogs=$3 vc_min_version=$4 vc_source=$5 vc_status=1 vc_checkprog=`eval echo "\\$$vc_variable"` if [ -n "$vc_checkprog" ]; then printbold "using $vc_checkprog for $vc_package" return 0 fi if test "x$vc_package" = "xautomake" -a "x$vc_min_version" = "x1.4"; then vc_comparator="=" else vc_comparator=">=" fi printbold "checking for $vc_package $vc_comparator $vc_min_version..." for vc_checkprog in $vc_checkprogs; do echo $ECHO_N " testing $vc_checkprog... " $ECHO_C if $vc_checkprog --version < /dev/null > /dev/null 2>&1; then vc_actual_version=`$vc_checkprog --version | head -n 1 | \ sed 's/^.*[ ]\([0-9.]*[a-z]*\).*$/\1/'` if compare_versions $vc_min_version $vc_actual_version; then echo "found $vc_actual_version" # set variables eval "$vc_variable=$vc_checkprog; \ ${vc_variable}_VERSION=$vc_actual_version" vc_status=0 break else echo "too old (found version $vc_actual_version)" fi else echo "not found." fi done if [ "$vc_status" != 0 ]; then printerr "***Error***: You must have $vc_package $vc_comparator $vc_min_version installed" printerr " to build $PKG_NAME. Download the appropriate package for" printerr " from your distribution or get the source tarball at" printerr " $vc_source" printerr exit $vc_status fi return $vc_status } # Usage: # require_m4macro filename.m4 # adds filename.m4 to the list of required macros require_m4macro() { case "$REQUIRED_M4MACROS" in $1\ * | *\ $1\ * | *\ $1) ;; *) REQUIRED_M4MACROS="$REQUIRED_M4MACROS $1" ;; esac } forbid_m4macro() { case "$FORBIDDEN_M4MACROS" in $1\ * | *\ $1\ * | *\ $1) ;; *) FORBIDDEN_M4MACROS="$FORBIDDEN_M4MACROS $1" ;; esac } # Usage: # add_to_cm_macrodirs dirname # Adds the dir to $cm_macrodirs, if it's not there yet. add_to_cm_macrodirs() { case $cm_macrodirs in "$1 "* | *" $1 "* | *" $1") ;; *) cm_macrodirs="$cm_macrodirs $1";; esac } # Usage: # print_m4macros_error # Prints an error message saying that autoconf macros were misused print_m4macros_error() { printerr "***Error***: some autoconf macros required to build $PKG_NAME" printerr " were not found in your aclocal path, or some forbidden" printerr " macros were found. Perhaps you need to adjust your" printerr " ACLOCAL_FLAGS?" printerr } # Usage: # check_m4macros # Checks that all the requested macro files are in the aclocal macro path # Uses REQUIRED_M4MACROS and ACLOCAL variables. check_m4macros() { # construct list of macro directories cm_macrodirs=`$ACLOCAL --print-ac-dir` # aclocal also searches a version specific dir, eg. /usr/share/aclocal-1.9 # but it contains only Automake's own macros, so we can ignore it. # Read the dirlist file, supported by Automake >= 1.7. # If AUTOMAKE was defined, no version was detected. if [ -z "$AUTOMAKE_VERSION" ] || compare_versions 1.7 $AUTOMAKE_VERSION && [ -s $cm_macrodirs/dirlist ]; then cm_dirlist=`sed 's/[ ]*#.*//;/^$/d' $cm_macrodirs/dirlist` if [ -n "$cm_dirlist" ] ; then for cm_dir in $cm_dirlist; do if [ -d $cm_dir ]; then add_to_cm_macrodirs $cm_dir fi done fi fi # Parse $ACLOCAL_FLAGS set - $ACLOCAL_FLAGS while [ $# -gt 0 ]; do if [ "$1" = "-I" ]; then add_to_cm_macrodirs "$2" shift fi shift done cm_status=0 if [ -n "$REQUIRED_M4MACROS" ]; then printbold "Checking for required M4 macros..." # check that each macro file is in one of the macro dirs for cm_macro in $REQUIRED_M4MACROS; do cm_macrofound=false for cm_dir in $cm_macrodirs; do if [ -f "$cm_dir/$cm_macro" ]; then cm_macrofound=true break fi # The macro dir in Cygwin environments may contain a file # called dirlist containing other directories to look in. if [ -f "$cm_dir/dirlist" ]; then for cm_otherdir in `cat $cm_dir/dirlist`; do if [ -f "$cm_otherdir/$cm_macro" ]; then cm_macrofound=true break fi done fi done if $cm_macrofound; then : else printerr " $cm_macro not found" cm_status=1 fi done fi if [ "$cm_status" != 0 ]; then print_m4macros_error exit $cm_status fi if [ -n "$FORBIDDEN_M4MACROS" ]; then printbold "Checking for forbidden M4 macros..." # check that each macro file is in one of the macro dirs for cm_macro in $FORBIDDEN_M4MACROS; do cm_macrofound=false for cm_dir in $cm_macrodirs; do if [ -f "$cm_dir/$cm_macro" ]; then cm_macrofound=true break fi done if $cm_macrofound; then printerr " $cm_macro found (should be cleared from macros dir)" cm_status=1 fi done fi if [ "$cm_status" != 0 ]; then print_m4macros_error exit $cm_status fi } # try to catch the case where the macros2/ directory hasn't been cleared out. forbid_m4macro gnome-cxx-check.m4 want_libtool=false want_gettext=false want_glib_gettext=false want_intltool=false want_pkg_config=false want_gtk_doc=false want_gnome_doc_utils=false want_maintainer_mode=false #tell Mandrake autoconf wrapper we want autoconf 2.5x, not 2.13 WANT_AUTOCONF_2_5=1 export WANT_AUTOCONF_2_5 version_check autoconf AUTOCONF 'autoconf2.50 autoconf autoconf-2.53' $REQUIRED_AUTOCONF_VERSION \ "http://ftp.gnu.org/pub/gnu/autoconf/autoconf-$REQUIRED_AUTOCONF_VERSION.tar.gz" AUTOHEADER=`echo $AUTOCONF | sed s/autoconf/autoheader/` find_configure_files() { configure_ac= if test -f "$1/configure.ac"; then configure_ac="$1/configure.ac" elif test -f "$1/configure.in"; then configure_ac="$1/configure.in" fi if test "x$configure_ac" != x; then echo "$configure_ac" $AUTOCONF -t 'AC_CONFIG_SUBDIRS:$1' "$configure_ac" | while read dir; do find_configure_files "$1/$dir" done fi } configure_files="`find_configure_files $srcdir`" for configure_ac in $configure_files; do dirname=`dirname $configure_ac` if [ -f $dirname/NO-AUTO-GEN ]; then echo skipping $dirname -- flagged as no auto-gen continue fi if grep "^A[CM]_PROG_LIBTOOL" $configure_ac >/dev/null || grep "^LT_INIT" $configure_ac >/dev/null; then want_libtool=true fi if grep "^AM_GNU_GETTEXT" $configure_ac >/dev/null; then want_gettext=true fi if grep "^AM_GLIB_GNU_GETTEXT" $configure_ac >/dev/null; then want_glib_gettext=true fi if grep "^AC_PROG_INTLTOOL" $configure_ac >/dev/null || grep "^IT_PROG_INTLTOOL" $configure_ac >/dev/null; then want_intltool=true fi if grep "^PKG_CHECK_MODULES" $configure_ac >/dev/null; then want_pkg_config=true fi if grep "^GTK_DOC_CHECK" $configure_ac >/dev/null; then want_gtk_doc=true fi if grep "^GNOME_DOC_INIT" $configure_ac >/dev/null; then want_gnome_doc_utils=true fi # check that AM_MAINTAINER_MODE is used if grep "^AM_MAINTAINER_MODE" $configure_ac >/dev/null; then want_maintainer_mode=true fi if grep "^YELP_HELP_INIT" $configure_ac >/dev/null; then require_m4macro yelp.m4 fi # check to make sure gnome-common macros can be found ... if grep "^GNOME_COMMON_INIT" $configure_ac >/dev/null || grep "^GNOME_DEBUG_CHECK" $configure_ac >/dev/null || grep "^GNOME_MAINTAINER_MODE_DEFINES" $configure_ac >/dev/null; then require_m4macro gnome-common.m4 fi if grep "^GNOME_COMPILE_WARNINGS" $configure_ac >/dev/null || grep "^GNOME_CXX_WARNINGS" $configure_ac >/dev/null; then require_m4macro gnome-compiler-flags.m4 fi if grep "^GNOME_CODE_COVERAGE" $configure_ac >/dev/null; then require_m4macro gnome-code-coverage.m4 fi done case $REQUIRED_AUTOMAKE_VERSION in 1.4*) automake_progs="automake-1.4" ;; 1.5*) automake_progs="automake-1.13 automake-1.12 automake-1.11 automake-1.10 automake-1.9 automake-1.8 automake-1.7 automake-1.6 automake-1.5" ;; 1.6*) automake_progs="automake-1.13 automake-1.12 automake-1.11 automake-1.10 automake-1.9 automake-1.8 automake-1.7 automake-1.6" ;; 1.7*) automake_progs="automake-1.13 automake-1.12 automake-1.11 automake-1.10 automake-1.9 automake-1.8 automake-1.7" ;; 1.8*) automake_progs="automake-1.13 automake-1.12 automake-1.11 automake-1.10 automake-1.9 automake-1.8" ;; 1.9*) automake_progs="automake-1.15 automake-1.14 automake-1.13 automake-1.12 automake-1.11 automake-1.10 automake-1.9" ;; 1.10*) automake_progs="automake-1.15 automake-1.14 automake-1.13 automake-1.12 automake-1.11 automake-1.10" ;; 1.11*) automake_progs="automake-1.15 automake-1.14 automake-1.13 automake-1.12 automake-1.11" ;; 1.12*) automake_progs="automake-1.15 automake-1.14 automake-1.13 automake-1.12" ;; 1.13*) automake_progs="automake-1.15 automake-1.14 automake-1.13" ;; 1.14*) automake_progs="automake-1.15 automake-1.14 " ;; 1.15*) automake_progs="automake-1.15 " ;; esac version_check automake AUTOMAKE "$automake_progs" $REQUIRED_AUTOMAKE_VERSION \ "http://ftp.gnu.org/pub/gnu/automake/automake-$REQUIRED_AUTOMAKE_VERSION.tar.gz" ACLOCAL=`echo $AUTOMAKE | sed s/automake/aclocal/` if $want_libtool; then version_check libtool LIBTOOLIZE "libtoolize glibtoolize" $REQUIRED_LIBTOOL_VERSION \ "http://ftp.gnu.org/pub/gnu/libtool/libtool-$REQUIRED_LIBTOOL_VERSION.tar.gz" require_m4macro libtool.m4 fi if $want_gettext; then version_check gettext GETTEXTIZE gettextize $REQUIRED_GETTEXT_VERSION \ "http://ftp.gnu.org/pub/gnu/gettext/gettext-$REQUIRED_GETTEXT_VERSION.tar.gz" require_m4macro gettext.m4 fi if $want_glib_gettext; then version_check glib-gettext GLIB_GETTEXTIZE glib-gettextize $REQUIRED_GLIB_GETTEXT_VERSION \ "ftp://ftp.gtk.org/pub/gtk/v2.2/glib-$REQUIRED_GLIB_GETTEXT_VERSION.tar.gz" require_m4macro glib-gettext.m4 fi if $want_intltool; then version_check intltool INTLTOOLIZE intltoolize $REQUIRED_INTLTOOL_VERSION \ "http://ftp.gnome.org/pub/GNOME/sources/intltool/" require_m4macro intltool.m4 fi if $want_pkg_config; then version_check pkg-config PKG_CONFIG pkg-config $REQUIRED_PKG_CONFIG_VERSION \ "'http://www.freedesktop.org/software/pkgconfig/releases/pkgconfig-$REQUIRED_PKG_CONFIG_VERSION.tar.gz" require_m4macro pkg.m4 fi if $want_gtk_doc; then version_check gtk-doc GTKDOCIZE gtkdocize $REQUIRED_GTK_DOC_VERSION \ "http://ftp.gnome.org/pub/GNOME/sources/gtk-doc/" require_m4macro gtk-doc.m4 fi if $want_gnome_doc_utils; then version_check gnome-doc-utils GNOME_DOC_PREPARE gnome-doc-prepare $REQUIRED_GNOME_DOC_UTILS_VERSION \ "http://ftp.gnome.org/pub/GNOME/sources/gnome-doc-utils/" fi if [ "x$USE_COMMON_DOC_BUILD" = "xyes" ]; then version_check gnome-common DOC_COMMON gnome-doc-common \ $REQUIRED_DOC_COMMON_VERSION " " fi check_m4macros if [ "$#" = 0 -a "x$NOCONFIGURE" = "x" ]; then printerr "**Warning**: I am going to run \`configure' with no arguments." printerr "If you wish to pass any to it, please specify them on the" printerr \`$0\'" command line." printerr fi topdir=`pwd` for configure_ac in $configure_files; do dirname=`dirname $configure_ac` basename=`basename $configure_ac` if [ -f $dirname/NO-AUTO-GEN ]; then echo skipping $dirname -- flagged as no auto-gen elif [ ! -w $dirname ]; then echo skipping $dirname -- directory is read only else printbold "Processing $configure_ac" cd $dirname # Note that the order these tools are called should match what # autoconf's "autoupdate" package does. See bug 138584 for # details. # programs that might install new macros get run before aclocal if grep "^A[CM]_PROG_LIBTOOL" $basename >/dev/null || grep "^LT_INIT" $basename >/dev/null; then printbold "Running $LIBTOOLIZE..." $LIBTOOLIZE --force --copy || exit 1 fi if grep "^AM_GLIB_GNU_GETTEXT" $basename >/dev/null; then printbold "Running $GLIB_GETTEXTIZE... Ignore non-fatal messages." echo "no" | $GLIB_GETTEXTIZE --force --copy || exit 1 elif grep "^AM_GNU_GETTEXT" $basename >/dev/null; then if grep "^AM_GNU_GETTEXT_VERSION" $basename > /dev/null; then printbold "Running autopoint..." autopoint --force || exit 1 else printbold "Running $GETTEXTIZE... Ignore non-fatal messages." echo "no" | $GETTEXTIZE --force --copy || exit 1 fi fi if grep "^AC_PROG_INTLTOOL" $basename >/dev/null || grep "^IT_PROG_INTLTOOL" $basename >/dev/null; then printbold "Running $INTLTOOLIZE..." $INTLTOOLIZE --force --copy --automake || exit 1 fi if grep "^GTK_DOC_CHECK" $basename >/dev/null; then printbold "Running $GTKDOCIZE..." $GTKDOCIZE --copy || exit 1 fi if [ "x$USE_COMMON_DOC_BUILD" = "xyes" ]; then printbold "Running gnome-doc-common..." gnome-doc-common --copy || exit 1 fi if grep "^GNOME_DOC_INIT" $basename >/dev/null; then printbold "Running $GNOME_DOC_PREPARE..." $GNOME_DOC_PREPARE --force --copy || exit 1 fi # Now run aclocal to pull in any additional macros needed # if the AC_CONFIG_MACRO_DIR() macro is used, pass that # directory to aclocal. m4dir=`cat "$basename" | grep '^AC_CONFIG_MACRO_DIR' | sed -n -e 's/AC_CONFIG_MACRO_DIR(\([^()]*\))/\1/p' | sed -e 's/^\[\(.*\)\]$/\1/' | sed -e 1q` if [ -n "$m4dir" ]; then m4dir="-I $m4dir" fi printbold "Running $ACLOCAL..." $ACLOCAL $m4dir $ACLOCAL_FLAGS || exit 1 if grep "GNOME_AUTOGEN_OBSOLETE" aclocal.m4 >/dev/null; then printerr "*** obsolete gnome macros were used in $configure_ac" fi # Now that all the macros are sorted, run autoconf and autoheader ... printbold "Running $AUTOCONF..." $AUTOCONF || exit 1 if grep "^A[CM]_CONFIG_HEADER" $basename >/dev/null; then printbold "Running $AUTOHEADER..." $AUTOHEADER || exit 1 # this prevents automake from thinking config.h.in is out of # date, since autoheader doesn't touch the file if it doesn't # change. test -f config.h.in && touch config.h.in fi # Finally, run automake to create the makefiles ... printbold "Running $AUTOMAKE..." if [ -f COPYING ]; then cp -pf COPYING COPYING.autogen_bak fi if [ -f INSTALL ]; then cp -pf INSTALL INSTALL.autogen_bak fi if [ $REQUIRED_AUTOMAKE_VERSION != 1.4 ]; then $AUTOMAKE --gnu --add-missing --copy -Wno-portability || exit 1 else $AUTOMAKE --gnu --add-missing --copy || exit 1 fi if [ -f COPYING.autogen_bak ]; then cmp COPYING COPYING.autogen_bak > /dev/null || cp -pf COPYING.autogen_bak COPYING rm -f COPYING.autogen_bak fi if [ -f INSTALL.autogen_bak ]; then cmp INSTALL INSTALL.autogen_bak > /dev/null || cp -pf INSTALL.autogen_bak INSTALL rm -f INSTALL.autogen_bak fi cd "$topdir" fi done conf_flags="" if $want_maintainer_mode; then conf_flags="--enable-maintainer-mode" fi if test x$NOCONFIGURE = x; then printbold Running $srcdir/configure $conf_flags "$@" ... $srcdir/configure $conf_flags "$@" \ && echo Now type \`make\' to compile $PKG_NAME || exit 1 else echo Skipping configure process. fi xnec2c-3.4/compile000077500000000000000000000162451257141547200141400ustar00rootroot00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: xnec2c-3.4/config.h.in000066400000000000000000000072021257141547200145760ustar00rootroot00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* Gettext package. */ #undef GETTEXT_PACKAGE /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the `floor' function. */ #undef HAVE_FLOOR /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the header file. */ #undef HAVE_LIBINTL_H /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `pow' function. */ #undef HAVE_POW /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to `int' if does not define. */ #undef pid_t /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if does not define. */ #undef ssize_t /* Define as `fork' if `vfork' does not work. */ #undef vfork xnec2c-3.4/configure000077500000000000000000007755741257141547200145120ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for xnec2c 3.4. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and nkcyham@yahoo.com $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='xnec2c' PACKAGE_TARNAME='xnec2c' PACKAGE_VERSION='3.4' PACKAGE_STRING='xnec2c 3.4' PACKAGE_BUGREPORT='nkcyham@yahoo.com' PACKAGE_URL='' ac_unique_file="src/common.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS PROGRAMNAME_LOCALEDIR MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES DATADIRNAME CATOBJEXT CATALOGS MSGFMT_OPTS EGREP GREP CPP GETTEXT_PACKAGE ALL_LINGUAS INTLTOOL_PERL GMSGFMT MSGFMT MSGMERGE XGETTEXT INTLTOOL_POLICY_RULE INTLTOOL_SERVICE_RULE INTLTOOL_THEME_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_CAVES_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_XML_RULE INTLTOOL_KBD_RULE INTLTOOL_XAM_RULE INTLTOOL_UI_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_SHEET_RULE INTLTOOL_SERVER_RULE INTLTOOL_PONG_RULE INTLTOOL_OAF_RULE INTLTOOL_PROP_RULE INTLTOOL_KEYS_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_DESKTOP_RULE intltool__v_merge_options_0 intltool__v_merge_options_ INTLTOOL_V_MERGE_OPTIONS INTLTOOL__v_MERGE_0 INTLTOOL__v_MERGE_ INTLTOOL_V_MERGE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE USE_NLS PACKAGE_LIBS PACKAGE_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking enable_nls ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR PACKAGE_CFLAGS PACKAGE_LIBS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures xnec2c 3.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/xnec2c] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of xnec2c 3.4:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-nls do not use Native Language Support Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path PACKAGE_CFLAGS C compiler flags for PACKAGE, overriding pkg-config PACKAGE_LIBS linker flags for PACKAGE, overriding pkg-config CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF xnec2c configure 3.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------- ## ## Report this to nkcyham@yahoo.com ## ## -------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by xnec2c $as_me 3.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.15' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='xnec2c' VERSION='3.4' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_config_headers="$ac_config_headers config.h" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # Set CFLAGS if not set in environment { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether configure should try to set CFLAGS" >&5 $as_echo_n "checking whether configure should try to set CFLAGS... " >&6; } if test "x${CFLAGS+set}" = xset; then enable_cflags_setting=no else enable_cflags_setting=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_cflags_setting" >&5 $as_echo "$enable_cflags_setting" >&6; } test "x$enable_cflags_setting" = xyes && CFLAGS="-Wall -O2" # Checks for programs. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi # Checks for libraries. pkg_modules="gtk+-2.0 >= 2.0.0" if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PACKAGE" >&5 $as_echo_n "checking for PACKAGE... " >&6; } if test -n "$PACKAGE_CFLAGS"; then pkg_cv_PACKAGE_CFLAGS="$PACKAGE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$pkg_modules\""; } >&5 ($PKG_CONFIG --exists --print-errors "$pkg_modules") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PACKAGE_CFLAGS=`$PKG_CONFIG --cflags "$pkg_modules" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PACKAGE_LIBS"; then pkg_cv_PACKAGE_LIBS="$PACKAGE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$pkg_modules\""; } >&5 ($PKG_CONFIG --exists --print-errors "$pkg_modules") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PACKAGE_LIBS=`$PKG_CONFIG --libs "$pkg_modules" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PACKAGE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$pkg_modules" 2>&1` else PACKAGE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$pkg_modules" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PACKAGE_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($pkg_modules) were not met: $PACKAGE_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PACKAGE_CFLAGS and PACKAGE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PACKAGE_CFLAGS and PACKAGE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else PACKAGE_CFLAGS=$pkg_cv_PACKAGE_CFLAGS PACKAGE_LIBS=$pkg_cv_PACKAGE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for atan2l in -lm" >&5 $as_echo_n "checking for atan2l in -lm... " >&6; } if ${ac_cv_lib_m_atan2l+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char atan2l (); int main () { return atan2l (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_atan2l=yes else ac_cv_lib_m_atan2l=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_atan2l" >&5 $as_echo "$ac_cv_lib_m_atan2l" >&6; } if test "x$ac_cv_lib_m_atan2l" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi # Internationalization tools { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } case "$am__api_version" in 1.01234) as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.50.0 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "0.50.0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.50.0" >&5 $as_echo_n "checking for intltool >= 0.50.0... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error $? "Your intltool is too old. You need intltool 0.50.0 or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 $as_echo "$INTLTOOL_UPDATE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_MERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 $as_echo "$INTLTOOL_MERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 $as_echo "$INTLTOOL_EXTRACT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5 fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;' INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Check the gettext tools to make sure they are GNU # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case $XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$XGETTEXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$MSGMERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL if test -n "$INTLTOOL_PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5 $as_echo "$INTLTOOL_PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_PERL"; then as_fn_error $? "perl not found" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5 $as_echo_n "checking for perl >= 5.8.1... " >&6; } $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5 else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5 $as_echo "$IT_PERL_VERSION" >&6; } fi if test "x" != "xno-xml"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5 $as_echo_n "checking for XML::Parser... " >&6; } if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5 fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile GETTEXT_PACKAGE=xnec2c cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES PROGRAMNAME_LOCALEDIR=${datadir}/locale # Gettext setup GETTEXT_PACKAGE=xnec2c cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF # Add the languages which your application supports here. ALL_LINGUAS="" for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-2" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES # Checks for header files. for ac_header in fcntl.h libintl.h locale.h stdlib.h string.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi # Checks for library functions. for ac_header in vfork.h do : ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" if test "x$ac_cv_header_vfork_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VFORK_H 1 _ACEOF fi done for ac_func in fork vfork do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if ${ac_cv_func_fork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_fork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_fork_works=yes else ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if ${ac_cv_func_vfork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_vfork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_vfork_works=yes else ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then $as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h else $as_echo "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h fi for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_malloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { return ! malloc (0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : $as_echo "#define HAVE_MALLOC 1" >>confdefs.h else $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac $as_echo "#define malloc rpl_malloc" >>confdefs.h fi for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 $as_echo_n "checking for GNU libc compatible realloc... " >&6; } if ${ac_cv_func_realloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_realloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *realloc (); #endif int main () { return ! realloc (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_realloc_0_nonnull=yes else ac_cv_func_realloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 $as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } if test $ac_cv_func_realloc_0_nonnull = yes; then : $as_echo "#define HAVE_REALLOC 1" >>confdefs.h else $as_echo "#define HAVE_REALLOC 0" >>confdefs.h case " $LIBOBJS " in *" realloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;; esac $as_echo "#define realloc rpl_realloc" >>confdefs.h fi for ac_func in floor pow select setlocale sqrt strstr do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_config_files="$ac_config_files Makefile src/Makefile po/Makefile.in" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi ac_config_commands="$ac_config_commands po/stamp-it" : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by xnec2c $as_me 3.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ xnec2c config.status 3.4 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "default-2") CONFIG_COMMANDS="$CONFIG_COMMANDS default-2" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "default-2":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 fi rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.in" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi xnec2c-3.4/configure.ac000066400000000000000000000033741257141547200150470ustar00rootroot00000000000000# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([xnec2c], [3.4], [nkcyham@yahoo.com]) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([src/common.h]) AC_CONFIG_HEADERS([config.h]) AM_MAINTAINER_MODE # Set CFLAGS if not set in environment AC_MSG_CHECKING([whether configure should try to set CFLAGS]) if test "x${CFLAGS+set}" = xset; then enable_cflags_setting=no else enable_cflags_setting=yes fi AC_MSG_RESULT($enable_cflags_setting) test "x$enable_cflags_setting" = xyes && CFLAGS="-Wall -O2" # Checks for programs. AC_PROG_CXX AC_PROG_CC AC_PROG_MAKE_SET # Checks for libraries. pkg_modules="gtk+-2.0 >= 2.0.0" PKG_CHECK_MODULES(PACKAGE, [$pkg_modules]) AC_SUBST(PACKAGE_CFLAGS) AC_SUBST(PACKAGE_LIBS) AC_CHECK_LIB([m], [atan2l]) # Internationalization tools IT_PROG_INTLTOOL([0.50.0]) GETTEXT_PACKAGE=xnec2c AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"], [Gettext package.]) AM_GLIB_GNU_GETTEXT PROGRAMNAME_LOCALEDIR=[${datadir}/locale] AC_SUBST(PROGRAMNAME_LOCALEDIR) # Gettext setup GETTEXT_PACKAGE=xnec2c AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext package.]) # Add the languages which your application supports here. ALL_LINGUAS="" AM_GLIB_GNU_GETTEXT # Checks for header files. AC_CHECK_HEADERS([fcntl.h libintl.h locale.h stdlib.h string.h unistd.h]) # Checks for typedefs, structures, and compiler characteristics. AC_TYPE_PID_T AC_TYPE_SIZE_T AC_TYPE_SSIZE_T # Checks for library functions. AC_FUNC_FORK AC_FUNC_MALLOC AC_FUNC_REALLOC AC_CHECK_FUNCS([floor pow select setlocale sqrt strstr]) AC_CONFIG_FILES([Makefile src/Makefile po/Makefile.in]) AC_OUTPUT xnec2c-3.4/depcomp000077500000000000000000000560161257141547200141370ustar00rootroot00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: xnec2c-3.4/doc/000077500000000000000000000000001257141547200133175ustar00rootroot00000000000000xnec2c-3.4/doc/NEC2-bug.txt000066400000000000000000000065601257141547200153310ustar00rootroot00000000000000You are right, there is a bug in NEC-2 when the extended thin-wire kernel is used with wires connected to patches. This has escaped detection for over 20 years. I did not catch it yesterday, because I had MAXSEG=10000, and ICON1 and ICON2 are dimensioned to 2*MAXSEG, so 10000 did not exceed the bound. The problem can be fixed as shown below. In addition to subroutine CMWW, where you encountered the problem, the same changes need to be made in subroutines NEFLD and QDSRC. With this change the extended kernel is not used at a wire end connected to a patch surface, but would be used on the rest of the wire if it is straight . The extended thin-wire kernel is only used on thick, straight wires, so is not very useful. The code turns it off at junctions, bends and changes in radius. Also, the connection of a wire to a patch surface is not good in NEC-2 or 4. It works fairly well for something like a monopole on a surface, but not for a half loop connected to the surface. A wire grid surface provides a better connection for a wire antenna. NEC-4 does not have the extended kernel, but instead puts the current on the wire surface with match points on the axis, and has an approximation for wire end caps that reduces the instability when the segment length to radius ratio is small. So NEC-4 would not have this problem. Thanks for finding this bug. Jerry Burke LLNL To fix the extended thin-wire kernel with patches in NEC-2: SUBROUTINE CMWW (J,I1,I2,CM,NR,CW,NW,ITRP) . . C DECIDE WETHER EXT. T.W. APPROX. CAN BE USED IPR=ICON1(J) IF(IPR.GT.10000)GO TO 5 !<---NEW IF (IPR) 1,6,2 1 IPR=-IPR IF (-ICON1(IPR).NE.J) GO TO 7 GO TO 4 2 IF (IPR.NE.J) GO TO 3 IF (CABJ*CABJ+SABJ*SABJ.GT.1.D-8) GO TO 7 GO TO 5 3 IF (ICON2(IPR).NE.J) GO TO 7 4 XI=ABS(CABJ*CAB(IPR)+SABJ*SAB(IPR)+SALPJ*SALP(IPR)) IF (XI.LT.0.999999D+0) GO TO 7 IF (ABS(BI(IPR)/B-1.).GT.1.D-6) GO TO 7 5 IND1=0 GO TO 8 6 IND1=1 GO TO 8 7 IND1=2 8 IPR=ICON2(J) IF(IPR.GT.10000)GO TO 15 !<---NEW IF (IPR) 9,14,10 SUBROUTINE NEFLD (XOB,YOB,ZOB,EX,EY,EZ) . . IPR=ICON1(I) IF(IPR.GT.10000)GO TO 9 !<---NEW IF (IPR) 3,8,4 3 IPR=-IPR IF (-ICON1(IPR).NE.I) GO TO 9 GO TO 6 4 IF (IPR.NE.I) GO TO 5 IF (CABJ*CABJ+SABJ*SABJ.GT.1.D-8) GO TO 9 GO TO 7 5 IF (ICON2(IPR).NE.I) GO TO 9 6 XI=ABS(CABJ*CAB(IPR)+SABJ*SAB(IPR)+SALPJ*SALP(IPR)) IF (XI.LT.0.999999D+0) GO TO 9 IF (ABS(BI(IPR)/B-1.).GT.1.D-6) GO TO 9 7 IND1=0 GO TO 10 8 IND1=1 GO TO 10 9 IND1=2 10 IPR=ICON2(I) IF(IPR.GT.10000)GO TO 17 !<---NEW IF (IPR) 11,16,12 SUBROUTINE QDSRC (IS,V,E) . . IPR=ICON1(J) IF(IPR.GT.10000)GO TO 7 !<---NEW IF (IPR) 1,6,2 1 IPR=-IPR IF (-ICON1(IPR).NE.J) GO TO 7 GO TO 4 2 IF (IPR.NE.J) GO TO 3 IF (CABJ*CABJ+SABJ*SABJ.GT.1.D-8) GO TO 7 GO TO 5 3 IF (ICON2(IPR).NE.J) GO TO 7 4 XI=ABS(CABJ*CAB(IPR)+SABJ*SAB(IPR)+SALPJ*SALP(IPR)) IF (XI.LT.0.999999D+0) GO TO 7 IF (ABS(BI(IPR)/B-1.).GT.1.D-6) GO TO 7 5 IND1=0 GO TO 8 6 IND1=1 GO TO 8 7 IND1=2 8 IPR=ICON2(J) IF(IPR.GT.10000)GO TO 15 !<---NEW IF (IPR) 9,14,10 xnec2c-3.4/doc/NearFieldCalcs.txt000066400000000000000000000066701257141547200166700ustar00rootroot00000000000000In this document I try to work out the formula for calculating the peak value of the total Near Electric or Magnetic field vector. ------------------------------------------------------------------- Total Field Strength^2 = Sum of Real parts of each Component^2 e.g. 1. Etot^2 = Ex^2 * cos(W*t + Fx)^2 + Ey^2 * cos(W*t + Fy)^2 + Ez^2 * cos(W*t + Fz)^2 where Etot = Total Field Strength (vector sum) of components, Ex, Ey, Ez = Magnitude of Field components in X, Y, Z directions, eg EX, EY, EZ of NEC2 Fx, Fy, Fz = Phase (in time) of above components, as calculated by NEC2 W = 2 * pi * Freq (omega, angular freq) and t = time (Formula 1. is used by xnecview to animate the near field pattern) To calculate the maximum value of the total field vector, then the right side of eq. 1. must be maximized, e.g. its differential/time must be zero. To make calculations easier, cos(a)^2 is replaced by the equivalent (cos(2a)+1)/2 Etot^2 = 0.5*[Ex^2*(cos(2W*t+2Fx)+1) + Ey^2*(cos(2W*t+2Fy)+1) + Ez^2*(cos(2W*t+2Fz)+1)] Etot^2 = 0.5*(Ex^2 + Ey^2 + Ez^2) + 0.5*[Ex^2*(cos(2W*t+2Fx) + Ey^2*(cos(2W*t+2Fy) + Ez^2*(cos(2W*t+2Fz)+1)] Now we use the equivalence cos(a+b) = cos(a)*cos(b)-sin(a)*sin(b) on cos(2W*t+2Fx) etc Etot^2 = 0.5*(Ex^2 + Ey^2 + Ez^2) + 0.5*[Ex^2*cos(2W*t)*cos(2Fx) + Ey^2*cos(2W*t)*cos(2Fy) + Ez^2*cos(2W*t)*cos(2Fz)] - 0.5*[Ex^2*sin(2W*t)*sin(2Fx) + Ey^2*sin(2W*t)*sin(2Fy) + Ez^2*sin(2W*t)*sin(2Fz)] 2. Etot^2 = 0.5*(Ex^2 + Ey^2 + Ez^2) + 0.5*cos(2W*t)*[Ex^2*cos(2Fx) + Ey^2*cos(2Fy) + Ez^2*cos(2Fz)] - 0.5*sin(2W*t)*[Ex^2*sin(2Fx) + Ey^2*sin(2Fy) + Ez^2*sin(2Fz)] To make things easier, we give abbreviations to constant terms: A = Ex^2*cos(2Fx) + Ey^2*cos(2Fy) + Ez^2*cos(2Fz) B = Ex^2*sin(2Fx) + Ey^2*sin(2Fy) + Ez^2*sin(2Fz) 3. Etot^2 = 0.5*[(Ex^2 + Ey^2 + Ez^2) + cos(2W*t)*A - sin(2W*t)*B] The time differential of the right side is: -W*[A*sin(2W*t) + B*cos(2W*t)] To maximize 3. then: 4. A*sin(2W*t) + B*cos(2W*t) = 0 From this we have: sin(2W*t) = -B/A*cos(2W*t) = -B/A*[1-sin(2W*t)^2]^0.5 Hence sin(2W*t)^2 = (B/A)^2 - (B/A)^2 * sin(2W*t)^2 sin(2W*t)^2 * [1+(B/A)^2] = (B/A)^2 sin(2W*t)^2 = [(B/A)^2]/[1+(B/A)^2] = B^2/(A^2 + B^2) 5. sin(2W*t) = +/- B/(A^2 + B^2)^0.5 cos(2W*t) = +/- A/(A^2 + B^2)^0.5 To satisfy eq. 4., we must choose +/- pairs from the above four solutions to 4., to be substituted in 3., hence: Etot^2 = 0.5*[(Ex^2 + Ey^2 + Ez^2) +/- (A^2 + B^2)/(A^2 + B^2)^0.5] and Etot^2 = 0.5*[(Ex^2 + Ey^2 + Ez^2) +/- (A^2 + B^2)^0.5] From the above, the maximum (absolute) value of the total field strength vector is: 6. Etot = sqrt( 0.5*[(Ex^2 + Ey^2 + Ez^2) +/- sqrt(C)] ) where A = Ex^2 * cos(2Fx) + Ey^2 * cos(2Fy) + Ez^2 * cos(2Fz) B = Ex^2 * sin(2Fx) + Ey^2 * sin(2Fy) + Ez^2 * sin(2Fz) C = A^2 + B^2 While incorporating these formulae in my "xnec2c" GUI for nec2c (my C translation of NEC2) I found that the best results are obtained when I use sin(2W*t) = - B/(A^2 + B^2)^0.5 and cos(2W*t) = + A/(A^2 + B^2)^0.5 and Etot = sqrt( 0.5*[(Ex^2 + Ey^2 + Ez^2) + sqrt(C)] ). In order to find the direction of the total vector I need to calculate the component parts in x,y,z and for this I need to calculate Wt. I found that only the C function atan2 with arguments -B and +A as from 6. gives correct results for Wt. P.S. A, B and C are same as CP, SP and TP in: "An Orientation to NEC Near Fields Part 2. Some Refinements and NEC-4 Additions" by L. B. Cebik, W4RNL xnec2c-3.4/doc/aspell.sh000077500000000000000000000000711257141547200151340ustar00rootroot00000000000000#!/bin/sh for file in *.html do aspell -c "$file" done xnec2c-3.4/doc/images/000077500000000000000000000000001257141547200145645ustar00rootroot00000000000000xnec2c-3.4/doc/images/charges.png000066400000000000000000002131231257141547200167100ustar00rootroot00000000000000‰PNG  IHDRÉMecã—bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEÜ )Qe7iTXtCommentCreated with GIMPd.e IDATxÚìw\SWÇ¿Iȳ.PQqÖUκ¥Ž¶n[[·vèëÞuUí°Ãm]µ¶Î:pÖ·¢¢ â@Ü à@H˜yÿˆDb KÑçû1É=û¹çœûËsÏ=WAÒèAA„w…Éî¥V(:€ÄÇAAá­VÈ ½FÖét±¬xòì yt‰Å±ÿU±˜ ‚ ‚ðVSÞµ¼‘X~òì‰@qëÎ-Š-nÈ·9{î¬XLAAx'ø¤Í'hcµØ©í¸uç–ÂJ©P"ÞÄßϵXKAAx'ؾs;-= ß• %VE‹5x‘¯\¹‚ÊJeˆÐªY+‹ øoÏbeAx…¦ÿÀÁý)_¡>žáC†sÉÿ7bÔØQ¯½Î7®ß`×Î]œ9u†àà`rçɳ³3;w¤jµªYVŸ3>¬]½–[A·ˆˆˆ Ož<*\ˆÒ®¥ðÕé\HÂ|¯P(°²²Â.‡NNN”,Y’FQ½fuÚ½WÓdæÜŸe‚@†i¿ìžàÈÑ#-RTg•ø µÚÚðw“FMÐétÜ»Ïð Ÿú/Ö.'úûÑÃGT¯V½öJ„D :¿ ~øûù³aݺÞÝ(üŸ¿ÿá’ÿ%òçÏÏaCŒÆáëâë_}ö˜Ça9ës–ÑcGÓ¬y³L¯ƒ×/fL›at,44”ÐÐPü.ú1hð £°&š¼QsЛX§ÔÐétÄÄÄó4†gOŸx#½^{©R¥ 㾇“““Iš¬è³o¸„·ôj¿7!}È®]8=J¼NG\||˜Uÿ¬¢UëV™^‡5«Ö0ðëx|ä­­-ÁÁÁøœñá¿íÿ%;×¼‰sPvšzD§Ó¡Ñh¸wï§NœbÝÚuœ?žQÃG±pñBlmm qņ‚ðv‘^í—Qé}Nû¤XÏN:%™ÞáèQ¶^½ÂRŸs ®ýVJ%V %VJ%Ó{0£É‡l¼|)ÅùÅpT­T›DÒét†Æõ>šl%§“‰LL©U»;udÝÚuL›2e-`Ú”iÄÆÆÒ¹KgjÕªeˆï^Û€_~û…õÿ®Çï¢Z­–÷Þ{v·£CÇFË6BCCùséŸ;zŒG‘3WNªU«FŸ~}pvv6ª‹V«eÝšuØ€[·n‹››Ý?ïN½úõXúçR£4ÅŠc̸1ny˜{÷ssòLhÓ‘ãG̲Ù;wðøÈGGGœqvvæ“O?1Š›7@Ãz '”•¸ìÛw°aýnÞ¼‰V£åÈñ#)Ö-©0KÚkNR+3µú[ÚÌ£jµš>úÛ£‹—-æýªïÍ­ [œ:yŠÛw˜¤«P¡ã¾‡³‹37oÞdÚäiøùù±xñb&M™”l½þZù—áïèèhüýüéýeo¶mÝF¿ýhÞª9¿ÿþ;~~~\»~2eõË›BBB8qâ9ræ ¥GK¹^ B$Ö~¯ ä„¿{ô葬öKœ>%œZzKDrâôq/<ɇô£þÂE&â pø0#‘œÜ\`(ÁÆÊÆtë7†F%¾]˜˜ë×**ÛÇ Bòß&>>ž9rÖ}†Ü¡rÅÊIÆÿ~Ú÷Ô©[ÇðýÿûkW¯åÎí;†±vÄ[«{Åò¬X¾Â$s>ç q÷ïÛÀ?ü@š5 qêÖ©KÝ:u“¬Ãƒ8` W®R¬X1† b4ÎÍÍó¢ÿE‹lU¹be¶nÛÊÖ-[Yþçrîß¿Oà@~ûå7/ZÌœ9s¨ù©g9¥9húŒéI¦Ip¤”6=6L6_3ËL­þ–ôÔH.^¬Ul²q¾»¸¸påÊ3˜R¥JQ @*U®D«V­èÕ«—Iž“§N¦\¹r†ó=iÊ$:~Ú‘ãG'[F”6Š9sæàååŃûˆ}Y¯÷`£Ö_Ë:wîÌüyóñÜèÉ„ï&°kÇ.âããùÈã#íeB„¤U²Aû%µŠ`ÚÔiôêÕ+yí—(}ŠåTÒƒ~)WRé˺–M6}‚'ÙJ¡äÔ×_QsÞü$rb‘œÜ¼gõr®V$íI~eÝHRJÞJ%ždAHÇ3uêT†ŽN§cêä©L™2…šµkÖÝ&¦F­Fc*·}n@‹9áxXXXŠåFDDâ†>  b•ŠfU?öÈÇ)Yª$K–-!ÁüFq,ÍÓò:ðù—ŸÓ©k'6¬ßÀ©“§ð>äÍóðçLŸ>ÍÛ6›¤I©UkTM>\gš6**Ê$ß´´7½e¦VKú@ZëzÆGï /á\"YOò÷3¾gü˜ñ\¹r… .°wï^æÌžÃŒŸfðQãõÁ%K—4Ê«TéR†ö$WÆÏ36<Ôù*qqq†x]»weñ¢Ålß¶‘cFbggÇ–Í[èÜ­³\«!Yœ>í—8}J9µô†r’ñ@'—>Noôžç+u²{ Z·²Ì“ŒlÕ¶Iÿš°²â̹3T¿ºQpÐí Cšä!Ó§L',4Œ:uëðE/ðÚíűcǘ1u³ç˜Þ·ÏeŸl~ c-_¾|³wß^\\\R¬CþüùyðàW/_5zP0)öîÝËàAƒ‰ŒŒ¤N:,X¸€jc'á{õªÕùoçdXÞ°òŸ•Ì5—Ÿt0Jwïö=ÃÃ|×ô뼜œ’-cïž½±Ü¢E råÊųgÏx¿ÊûFñŠ.ÂG}ĦM›Øóß\˸rãÆ *UªDÕ*UeB„äU²Aû]¹z…k7®akk‹­-¶¶¶äsÊ—²ö{‘~Çö)3èÛA)¦O,Æ“ò@'W~‚'9ñCz‰IX£ügÛ6©^7¬«è”Ö$[©¬ð»äG· &YÖ$ BÊìØ¾ƒíÛ·“3gN~þågTjýK{~þõgZ4mÁ¶mÛðhãa²µš9ëU›4mª•«:t(S¦N¡œ[9bcc¹x“ãÇŽã¹É“­;¶Тe þZþÆ c⤉|PëräÈÁÅ Y¼h1 -àÏe2uòTâããù´Ã§üøóÉzÌÍÓ¹˜37oß4Ëf-›µ¤eë–Ô©SWWWòØç!<<œ]»wú[û‰í“3WN"žGàwÉŠ+š¼ø"%{–p.Áõk×™5k¿ˆZ­æÄñL?Á$­¹íM­N–”™Zý-é©¡´R¢Ó鈌Œ$èfdñâÅ„…†Q¦Lzõí•l½>iÿ :v V­ZT­^…BA®Ü¹XùÏJ‚ƒƒMÒ;Žé?L§TéRܸ~ƒñãôò5hØ Ù2–W8æuÄ.§·îÜbú÷Ó“´QÏ>=Ù´i«W¯¦B%ýµ«ûçÝå:%)jdѲ†¤ NuMqj»S 24Åô7lL6}jk’ ä„%Å~úÙ ”ÿ›êÜj(ÁZeüî‰ÄpÂää_ËÓ‚`ê…›0N?'|7’.% a%]J2~ÂxÆŒÄq¨_¿>yóæ5k<%„= ïÃÞœ?wžvmÚ¥÷Äñ\¾|™þ}û'oòÄɆcÖo`Ãú ÆÀ÷ ››§¥sÄåË—¹|ù2¿ó{’áƒÿ7Ø(/×Ò®œ;wŽ6­Û$YÏ”Êþì³Ï˜ ?f^¥nݺÌ[0û<öÉæísÆŸ3IïmÚ A“:œ?VFÇìíí1rD²moÕº«V®¢O¯>©¶³FõT¯Q3§ÏpùòerçÎ-»Z‚$vŽšóà]FîN‘8,%¡mîî‰× ?;†üÓõ/©²lw %IÌ:’ÄßÕVj‹ #ïãÆŽ#44”ú êÓ³WOg¯Þ½Ø±c‡f옱,YºÄ¬ñ”V¸paöìÝÜÙsصsAAA/^wwwºtíbˆ›/_>víÙÅ ٶuׯ_'66–*ïWáÛo¿5{ü&Žgižæ–1wÞ\:Äùsç áÙ³gäÉ“‡ÊU*Ó·__š7onâä‰ ýßPnÞ¼ixS“¹e8•JÅ?ÿí[·È›7/åÜÊѧoºuéf”Ö’ö¦T'KÊL­þ–ôÔP(¨ÕjråÎE¡B…¨X±"ü16ù0Iï|âzý·ó?V­\Åáǹ{÷. …‚âŋӼEs† fR‡%K—°hÑ"®^½ŠV£¥®{]&Mž”ä’ÃEsú4Ôj5Û·mçÙ³g”)S†¯¿ýšý&i£~ýûÑÿt¢¢¢èÒµK’K†AÈ8í—>5Yéãtz‘|uèƒ8Nü ÿnVJ%j¥*Õ¹U¡¯m¬M„Æ×!/g|ÎÞfbÓ¦N#ìI˜ô0A!Yò:èï–dÅõâÆÔ¬^NÇ‘cGpss“ )ŒÍôh¿7"ý€†7陕þÀACzG{G´±Z|Nùà^×Ýx¹Eœ:ÎèyÄsråÌe‘qŸG<—&‚ ˜Ef.{ü°Q’qöí;@¿_S¶L¶oÛ”åųs‘\}ÓÓžìb‹gÏÂYµz ^{÷sãÆ 4- äǵtiZ·nÉ'·“À’òŒ>þœMž[ð>rŒ  [DEiqrrÂÅÙ™?lD«–Íã»ä]MO[ÍK…×;fw¢¢¢xòüj+59lí°V«±¶¶F¡P¼Áeôâ…B¡®I…©Õêì?W9Ê‚…‹¸ví:ááÏqpp x±¢T¨Pž ãÇdûö;wŽeË–±sçN‚‚‚È›7/+VdÔ¨Q4mjºM›¿¿?ÿþû/ëÖ­Ãß_¿CÅëz!Ì;¹\Û6Ìüåw¶lÝž¬HÞ¼emÚxÈ•"âççOÿßðàA°Ññ»wïq÷î=<ôÖ‰ä̾ ¿º­Y@ÀUF™@ÈÇFñ<æÁƒ`Ž?aÉï"² œð¦GtL ¥J•åêµ+Ø©­±V«±µµ5ˆÓ¬"R£áqø3âãã Ç”J޹rðøù3#o·R©Â1wì3Q$ÇÇÇE||<ÖÖÖ&‚ãc"’³ã·ªU«¾rxÀƒðòòbÅŠ|þùçFá*Txcêž)"9µ“÷ºOn›<øå×YìÝ·Fƒñ`Œdßþý( Ú|ÔZ<7ÙŒ°°0z÷À£G¡Ô©]‹o¿H¥JQ©TÜ¿ÿ€'O²~Ã&1”¥ÞŽD‚ïÉ“' 1†°Ç©^­*=¿üœråÊ¢R© áìÙóìØ±Sì•És© ¤‡˜˜X ,L~§üܺÄÝ{·ÑFEa­¶&gÎX[[gI]bcb‰£Qý&èt:âãã9|ô±±qAZ§V= J¥ï£‰}QÿÌ@£Ñ ÑhÑDiˆÓéÈekGÞ¼y áZ­–ÈH!<.66M"yá¢%Œ5œŽ>%G;î޽DZã'ÞšëTÍš5éÙ³'M›6¥D‰ܽ{—¡C‡âééÉ´iÓLDrùòå騱#;v¤bÅŠoŸHN s~ =|øˆ¹ópàà!‚ƒCÈ;7µjÕdÈào)UªdºÊ/Rä=ªU}Ÿ3>gÙ½g/íÚ~d¾gÏ^4-5ªW£H‘÷’­³¹ulôa îܹÃÖ-q+W€­Ûv0dè~ûõgƒ¿tù mÚ~BÑ¢E9°oW–Ÿ—´Ú<Á6sgÿÆŸËWàé  Ö53f$¥Jºdi;–ýù…â^·.[„Rùré}‰Å)Q¢8:v0«?¦´4hÃFOþùg×®ß@£Ñp-À/ÕpKìœ×Ò% ùûïUœ;wVKÑ¢EèÚ¥=>ïnh[âÛó‰ÿN(óéÓgÌ™;Ÿƒsïþ}âãã)Z¤uÝëðÉÇí¨R¹RªvMì]³v=aS£F5~ùJåËÛ³E‹¡h‘"†~˜ãÇO²a£'~þþhµQ¼W¸íÚµáÓO>6ÊÃkï~&MþµZM‘"ïѪEsºvídhsâ%;þÛÅÆM›¹y3­Vk¨ç­[·™;!>>ç®®®têø)¾›l"dÃÂÂøsùß;~‚GBÉ™3'ÕªV¡wïž8—(nˆβ?WpüÄI‚ƒCÐéâ)T¨5jT§UËæ”w+gb¯ÌžGÓÛ×®_¿ÁŒ~æÄÉS€Žònnôü²ß ’ì0gnÏŒþ®1Z–ÿµ‚»öx“ØØX*U¬@¿¾½iÒ¤1ŸvèÂyß Ì˜6…Ž?5ªç¶í;øßT¬XÏë2ä|Ü»wŸY³çrØû(aaaäut¤^½º ôá:biÜÌž[ãuzOh\\<ÏŸ’?_ zËWüx†&JK[;råʉ•UæÊ…¸ø8bbb‰×éx‚ƒ½#11±Ä½ð,ÇÄÄ¢P(xþG‡¼FaItt Ï#ž£Ñj‰ŒÒâ\Â…k×°U[›n)AA·ø¸};ìíóàì\gçtíÒ)Éñ•Ü<Ÿ–ñ–×í“'O}wqqañâÅxzzrãÆ “ø~~oŽsà\nÂÇŸv!8øå­òdzsçnòfÝÚ•”+[&]e´mãÁŸ³lݺÝD$oÙº]ïqNa©…%u¬[§6ëþ]¯ïƒH>pà û÷0ˆ _ß ¸×­-mžp1MàÀÁCœ;ïËæMÿš\$2¯½ûøöÛ¯Œ.ª)aé¼iÓäÏå+,O‹{÷`"f¾Ÿö_~ñ¹YõeÿC?qŠ…óg.0'}ÏÉS§Òß¾}‡Û·ï°iÓf“‹d6Ñ×îܹC§.Ýyúô¥­ÎøœåŒÏÙt—ÌêïOž>¥[÷/¸j÷ŒÏYúü†k~ôèñÆbÍÚMDò†ž&"$­Ü½{O:t&44ìeÛ>dã¦Íž˜˜h¢c¢‰ŠÖúøáO©Y£6ïW©ÁðG? áñ“§úø™ð•J©¾úuÒÑ/<Ë1¨”JC˜B¡@m¥Fñâ»J™~ £ÓéÐh´n߾Ë–òy^´hÕ†¥Ë–›<ï‘Ú<Ÿ–ñö:®ÛÏž=£gÏžúqêñf?÷õFz’8Àâ%ËX¼d™Iø©ÓgÒ]†££#õë¹sàà!vìØI÷î] Ḹ87jˆ££c†Ô±NíÚ( |}}8wΗ'Ož0fôfüð3gϧFõjøúú¢P(Òü+òuÛ|Ú÷“q{q«ÙÍ­ßODÛö8|øo?ý0ZµjZž;ÿ0ã{ê¹×5|ò¿AüýÏ*nݺmv}K•táÒå+ôî;×Ò¥(P UªTæ#–ôìÙì<2Â3:fÌjÖ¨nøÞ·OO6lôäî½{†cQQQ,Yºœƒ‡ãµ> IDATòØØØD'Ä$ÏqcFQµj“ãÇOœ`ôÈa”}á=)[¶ £G£wßFq×ß\µz-«V¯5Éëü‹»< _²síÚuFŒ‹‹s œò9Q¡¼M>lLçN2Ô^éé‹–ôµÃÞGLÆpùòn†1œ•óŠ9ý}÷½mgþ4ƒ>xÙöZµjlaeeE×.™=gkÖ¬cò¤ lòÜJ||rä°ËÐ~lmmcÉ1±Ñï±µµáo¥R‰Zmò…HNK–G ¥V-wœœœˆŽŽ"66JZ–[woQëƒdµÚ4×ÅÍ­;wlÅsó–.[ν{÷ KŸæÎ[ÈÂùsR¼Ö¤w¼eõuûöíÛxxxpáÂJ•*Å´iÓÞ=Orâ_8IýÚIа°Ã#""2¤ž Ë)–Wèÿ6oW Kêèä”—2®®\½vF˃‡p°·§ÇçÝq°·çÀƒh4Z®^»NÙ2®Fdչț»¸8¿òÝŬ¼3š¢E‹pÑÏß"o«DEE%?)QfNxZìœXTäÊ•ÓpÑ0—Ó§R®l"##9ï{=^{™ùËo4iÖÚ¨ÿ›ëI.\¸W®\µèܼºö9GŽ„¶¼Âsç-dõšuÜ»wßH †».‰©X1iOøÓ§Oýú¾Ä”(QÂ$î“'OR¬wddäK¡?j8¥J•D£Ñàé2‡aáKèÒ­{¼öf¨'Ùœñ›}-,ìqŠc8­ã%³ú{­ڊS¾CÙ­kgÔj5›·lC£ÑèEò¦Œ]jaŽýÛÁ’¸™=·ÚØÚ Õè÷HN,Õj5j+ýn ÄÇÇãâRŠöm;t“ˆÈÈ ÷&ÛØ&ˆäXT*+ 111ØØÚ”JVVjTJ•!,½^äˆÈHîÜ»G»¶È“'7‘𬬬°±±ÅÖÆÖ ÌÛµI>\«Ñ¦«.ööyø¢ÇgìÙµIÇÓªU ræÌIxx8“§š/"Ó2Þ²òºíããC­Zµ¸pánnnìß¿Ÿ‚ Š'ÙRœœœ aÏîí¸8;gZ9Í›5ÁÎΟ³ç¸{÷:tœ={;;;š5ý0CëX·nm®pÑÏýR×½jµšzõÜÙ·ÿ 5$..Ž:¯a=rFÙ<0ð¦á©þ{ >ï ýæÐäÃF\»v9sæ›<¸—ä °²"66–ÈÈH#ÏÒé3>)x=¬SñŠXg˜_}bZ™†Ûz+V`ÛÖM„„„t‹‡9yò4+W­á·ßgÓÖŒ­{FÝÝëpófË–ÿeòàž%vI*ÝÁCÞzñØQ4¨_œ9sðüùsZ¶Nz˾äöIupp 44”Û·ïPºt)Ãñ   “¸ŽŽ@9×2.T˜ØÞÞŒÂÎ.‡þ‡Ð‹%Ê"ÙÎ.ÇKO²B‰ÊJ…N§3„ÅÆD¥¹L…BAáB…‰ŠŽbåê¿hÔ¨ … F©Rb­¶1¬¿~ø0$Åp­V›îº$ôýϺwå³î]¹}û›´àæÍ L½ŽgÕu{ëÖ­tíÚ•ˆˆ7nÌÆqppàMç|ãÞ‡0|øhÎû^ **ŠÈÈHüý/ñçŸ+hÿI§ ”v4mÒNÇÖm;ضm:ŽfM?4Ù.½u¬SG/~÷ìÙË¥K—iØ > Ö# à*;wîÖ‹é:µ³­ÍÇŸˆ¿ÿ%´Z-—.]fü„IԯméÕóKœœòräè1¾ø²'OžB£ÑÁիר°Ñ“N]º¿ô,/À¬Ùóxüø1áááìÛw€ÑcÆg«¾3§Þãvñ¢Ÿ‰—§cçî¬Yû/áÏ#¨\¹Íš6¡Q£„„<´Ø“Ü¥SG8}Ú‡!CGpîÜù["Ex“ÿíbàWƒÒÔŽ¸Þã<¹scmmÍ»w™6ã'‹ó©õA ~šù×®]'**Š+Wøá§_’ø[€©ßÏÀÿÒe¢££Ñh4\½ÆÚuë–g ø-[¶l#"2‚ònåhPß:uj½ðp†f¨'9«úZýzî†1|éÒe“1l䉷`¼dVoÞLoÛá#ǰ{Ož²ìa¡ägÖ¯T¯VììliØ >kWÿCÑ"E²¼=•*Và¿í›6t0U*W"W®\¨ÕjÞ{¯06àǦyšÆE©R%±µµ¥P¡‚4hP%‹d«¾=jäpJ”(žä³~Ý*:wê@ñâŰ²²2”Ù§wO~ýÅO*Uªh¨—J¥2ÄÍëèÈÒÅ éÞ­3%Š× µšâŋѮíGü±àåìshÛÆƒ"EÞÃÊÊʯk—NLœ0îñ$[Ò׊-ʺ5+iÔ°vvv888P½ZUæÌúÕ$_KÆKfõw{{6ü»†¡CQ¾¼vvvX[[S­Úû,œ?'‰:ëïEEEѶGªw -¥h‘"lÚ¸–Û·#þ|¨T*òçÏGûömÙ´q­ÑhIÜÌž[ ½T©T¢¶²&WÎܨÕ6ü·skÖ®¤Fµ4¨W.­&2SʼnBñòá¼<¹íQ)T/„ð˰Ä$„eñññh"#°µ±¡G[ Èϯ¿ÿ„÷‘C/D0h4ØÚX'ž~þi:·oGéÒ¥p°·G¥Rá`oO=÷º,úc¾É,)ÍóiooÒuûMD¡å:)Y²¤ÉC!¥\Ësýª¿XJHÕË’Þ·ƒ:àE¯~ƒMò9tÀ‹ž}™ôCé›™G¹˜ùã†ú.Û¾^yè°Qtìø •+UÂÚZMpH«V¯cË–m”*éÂ_Ë—dI=jÕ©OPàU³úõÛ:¾_'AA·hÚ¼5:ŽÛ<¶ê{›mŸÚ™ÇÞ‘ÉßOæ÷_ç Ñj9sæGŽzӤч¸¸8£ÕhˆI÷<¢ÓéRíç¹ó8ðï†õáõÙoË Nž:mòâÐ{‘û÷ï#özË™ðÝd£ý•[¶h–mrVðŠçËW.±És#µjÖ¢OÏÞDGkyþ,Kë¥ÕЩCG“ÛêQZý®$>5 Ój"3­>ÑQúµÚuëÔ¡ž»»IY©… o&’³“ÐzÛE¡ˆ^!3ÈŽ‚oæO3X½ö_üüü‰ÅÉ)/•*U¤K§”{ñöK±×ÛOîܹiØ >S§|'ÆH„N§ÃÙٙ˗üéýe/tºx"ž?{-ÞÁèè(¢£“ß"*Jûì£_‚‘ÖpAD² ˆ(GÈŽžÑÚµ? víÄ^ïèøž:e"S§LÛ'ƒFA÷.݉ׯ9Ž—‰N®Û‚ˆdA,E<£b/áí"&:š˜èh1„ $ƒRL ‚9¼îÝÄ^‚ BV"ždAÌB<£b/A„ļí;L‰'Y³HðŒÊÿ–ý/‚ð6¢Óé(åZþüd²O²ðÆ û$¿yç"»ï“ü¦÷I²/¯{ŽLÏ>ÅoSùò\ö!Mû$:à%–ÞX1'‚ ¼Ùsä뮇\+„´ªHVdä{! ôì;Húæk$&Fž~ÏÊ~-Å›2G¾îzȵBÈ4‘,· „×Mr·É¤of ¯.2·_ BF!s¤ ¤ypOAAD$ ‚ ‚ ‚ˆdAAA°ˆT×$Ë¡‚ ‚ ÂÛ„9[pZ™›‘ ‚ ‚ ¼+¤*’4j*Oa ‚ ‚ ï²&YAAD$ ‚ ‚ ‚ˆdAAA°«ìXé¢eÊ£…×öÁ°}¢^cëµïvóë¾ò+AA0—R®å³¼L…B‘î·NZÉ©AHÙÓ<4j*çJÈö}HÈ\²rˆŒšD$ ‚ ¤@¯~ƒÅ) ÓéÞ˜ä\I„ŒDD² ‚qÁ”7QØÈ¹z=(Š4Ù^¡PˆñÉ‚ ‚ È&A‘,‚ ‚ ĵг,;3‚Öyh[v0• 7ÌÔòd 8AA2…°°0zõéOXX˜CH1qQ,ñN‡æ}hÓ¸+»ï,dòþ6Ü¿."YA„ìƒF£¥oÿ¯9tÈ›¾ý¿F£ÑŠQ„4³#à*–ªN±|¥‰± ¥_ëï¨P¾2»¯/Ëž"Y£Ñ2ó—ßiظnÞ§aãfÌüåw´Z(ÂÛ˵k×™=g>-[·¥t™ ”.S!ÓÆNtt4 ÿXLûO:Q¥ê”)W‰*U? ÝÇY°pÑÑÑFñoÞdðÿ†óAíú¸UxŸ¦Í[3gî“x õNî“¶xç &OžL… P(?ÄtîÜ9 D™2e°±±¡páÂ4kÖ /¯¤·?ŠŒŒdìØ±8;;cccƒ³³3cÇŽE£ÑdI{_íIõ-· ïS×½½úôgûŽÿÒ]fF´9 €.]ºP @lll(S¦ S¦L!**Ê(^TT3fÌ FäÉ“•JEž$äáCòæÞ½ûôíÓ+Íc)½m¾|ù2µk׿éÓ§†cW¯^eâĉœÌ=¿QQQlݺ ;;;¶mÛÎØÑ#°±±yg®«ÿœ›HÛÝx›§1w(ž£:7B| {Œ{ÅO3­ÜLó$oÛþÞGŽR´HÖ¬þßs§X»æŠ)‚÷‘£â!„7‘Ò¥K1èÛ¯øoûæL;^{÷0yÒN?Ì•K¾œ:ám¸%„üòË‡Ó¬i¼vïÀÿâY¼vï YÓ&ì?pÿí4©Ëµ¿$?m‹wu¾(_¾<'NäâÅ‹iJ_³fMæÏŸO@@QQQܸqƒöíÛ0mÚ4£¸kÖ¬aÏž=8;;søðaÂÃÃñööÆÙÙ™={ö˜ˆ»¬$qߺäw¯Ý;èÜ©+þ^™æ|3¢ÍcÇŽåéÓ§´oßž€€´Z-´oßžíÛ·³nÝ:CÜÍ›õý|þüù„„„ÃÇ™?¾Qø›~>2‚É“&$9w˜+˜;w¾‰ðÔétÌ;ÿ¹¦ìÚíųgá4oÖ„fM?äéÓgìÞ³÷iÿ™;»ˆSkx¿Ä‡Fœ F‹]m6XÁ—ïÏÈÔ“™&’·nÝÀ˜1#©Q½9rä zµªŒ=€-[·‹šÞJvîØÂ o¿ÆÕµt¦¢E‹è²R‰R©4x'T*Å‹3Ä=~â„ÞÃ3ù;œK`mm³s ¦LþOÏ­¯Íïê|áççǤI“ÒìQ>yò$ÄÕÕkkk\\\X¼x17nÜ0Š»jÕª?–~¡^½zäÊ• wwwfΜižÜ ¤o¿¯¨T¥•ªT§s—ÏØ¹s·YiÕj5ÎÎ%9b…¦¹ÑæýûõÞÐ àêêŠ ®®®,X°€¿ÿþÛ×ÅÅÅh<&,¡I¥J•z-ç#»R¨PA.]¾bôc`×^._  P¡‚ãØÈ %æ0eÊ8`Qšõë7ЮmÚµkÀ¿ÿnH¶;wî¦s—ϨT¥:•ªÔ Oß\¿˜æ¸‰ù´CJ—©dùÛ¶ï t™ ´ÿ¤S†ÙKÁš Óø´q_njNð0ú:Õ:ràÂzÜœÜ)j_6Sû`¦‰ä‹~—¨Võ}£ãÕ«éoúû_5%é;?LŸJ±bE™ðÝdj|àNY·ÊÔøÀñ&Q¬XQ~˜>õåd£JE°ùg‹6 )óèÑ#œœœŒŽûøøP·n]£ãîîîœ={6CÊ¿{÷:ÆþÑh4h4ZÎøœå›ACÌJË­[·ùå×ß(ùBx¦…ŒhsjëƒÊXºt)%K–dÀ€äË—+++òåËGÿþý)Y²$K—.Íòó‘п/³ç¼ô&ët:æÌÕÿ@ø"<3Q«Õ–×O?ýÄåË—-úQ|çî]Ž?A¾|N¸»×¡ž{]œœòrìø îÞ½—dšo áŒÏY4-†ѹËgIÆ·$.@Ÿ°fí¿&a6zеKƉdÏK³©Y©!¹s:r+ò4lJ£Œ±áˆ¯Ÿ”–éç?ÓDòãÇÈ›×ÑèxÂ÷°°Çr5„tŽ<ööÄÆÆ&+6råÎmø^¹RE¾›8…  [DGGt‹ï&NÑçûø±Ù™/ÞLž={FÏž=ðððHR<çÏŸßèx¾|ùxøða†Ôaöœy²’C¼,þ¤D§ŽŸê½É—.Ö7{íÝÇ¥K—)T¨ ^,É1§_¥4½º$dÆô©( ¬­­™7wV†Øfþüù²jÕ*“sž6lÒ?¤Øº*• •J…GëVèt:6lÜ”dš„±wÑ÷ [7o r¥Š>ÞàMXf‘ð÷Š¿W²a£'ß|=аÔ.ÄcÏÍ­œaì>|Ĥ KâXYYѵKgfϙǚ5ë kÌ7yn%>>ž¶m<È‘#‡yã;æ9¿í‡{œ »±öÀ\ÎÛK¯j?‘Ç&ŸÏÇ¿ ,6»Ú TÈÝ’Ë÷N©ãƒ¢­³¤Ogš'ÙÑQï }eñ„ Å_õ ‚`ùØ9㣿%;mÚdJ•tÁÆÆ†’..L›6€Óg^Þ ®Ví}þ]»’fM›`oŸJ•*É€þ}(\¨pªKÜ“ù"kðññ¡V­Z\¸p777öïßOÁ‚Æë5“óP&|·Ä»• ^g£ã.),›HÜ·®\òåÐ/¾xq[wɲåi®KF´¹nݺ=z”öíÛãè舭­-nnnŒ=€bÅ^®û?rD/,/^L¹rå°µµ¥lÙ²†uâÞÞÞY~>²’ëWý-þ¤F§ŽŸR°`Aüüü?aþþ—(T¨ ;¦¾£¥ó×Öm;5z<ÖÖÖü±`nš2À²e˨X±"C‡eÆŒŒ5 kkk‹ò8zô8÷îÝà“O;<áŸvèè—6=vÜ$]rc/4‰ºX7n];£V«Ù¼e›a9Ò¦M–/µXrvÕ+Ö¡¬óû<æ½[L Jåê|¿ÿSVž›B.ûT(R‡‘DZRÚPܦ&[þÃçïOͲ>i"¹b7ýä}Æx]Õ™ßË—w“+› ¤s줶‡ð«û²V¨PžógsæÔ1ü.ø°ë¿­)¢ø¯fÍê×5£´ÌigëÖ­4hЀû÷ïÓ¸qcŽ=j$Ü^þHªf$ä^v¯n'—V~ÐÞ4:hVz•JÅ{ïfð o¸uëvšë’Qm®V­›6m",, Fƒ¿¿?ÎÎzqÑ AC¼ÔÖ/'¯Yu>²;zo²þ‡üÚuëýZeKgjü÷ß.†5‹þ˜G½zuÓ•ß¾}ûðõõÅßߟ}ûöÑ¡C‹óø÷Å{)±~½é’‹äÆžSÞ¼éŠûòž­xþü9Û¶íàܹó\¿H¥Š,š«cc£°²S¢ÔY¡‰{ÂåˆÝTrù€A§iL‡†¹¡9FhÌ >°ïÆî³«¨ùž…r¹dYÿË4‘ܦÍGLÿá'NŸñ!22’Óg|˜ñãÏ´mã!£_x§In}œ%c§LWÆ›ÈÀ@¢££ ¼y“qã&…'лώ?‰V«åÑ£PÖý»ž~œ‰J¥â³Ïº½6[È|‘2ɽhdöìÙ´oßžˆˆzôèÁ®]»pppHÚûÓM~‡ †··7ÏŸ?ÇÛÛ›áÇ…§—úõôž?‘K—.£Õj¹té2ã'L2+}\\÷îÝç÷Ys°·Ï“æºXÒæ”^æÒºuköïßF£!88˜%K–0bÄT*_ýõË{õë®ûöíË•+WˆŠŠ" €¾}û…gåùxèÜ©ƒáÎHÁ‚éÔ1c÷ÅݽNjÿ µµ5K-¤nÚ’o‰%ؾ};ãÆ³xOã'OŸ²Çk/ …‚ý{w™8#öïÕ{OŸ>3J;nüDüý/™Œ½úõÝMʱ$nbîô¬^³îå{]-{`ï³*S8uú(;ϬÄÕîCr(ór]ëM„ú>Ÿ4ü’pÅ=njNòžm%´šÎøÁ£ìWY;÷:NG`` %K–̰[©:Ž/{öåÈÑc&aõÜë¦ëåEË”G ¯íƒ `û?D½ÆÖkßíæ×}ýR”¤<ã IDAT¿©y_Ç{uÌY2v¼¼ö1ðëAI®cT(,œ?‡&M§Z·1£Gлח·Áœæä“™óEz8tÀ‹^ýgÚ:ÑÔÚ”PnB¼Wëanú„¿›7ožäÛøš5k–¦—W\¿êO)×òF·ÍïܹC»;š\¸S)Ñ¿_oF š¦seI›“³qJvž9s&ƽ|Â~óæÍ|üñÇÉæáééIÛ¶m3í|¼îr‰ç…‰“¦²rÕ“xÝ»u1Ú+¹t™ èt:£>”ÜܘÒ“8njé_ /W¾J²@[:ßYú2‘äò^ñ÷J¦LN½zuY¾lq’q¾ìÙï#G™øÝ8>ÿ¬[ŠãÉÞ>›=×SôÅôÄ}µ®;wçìÙsØØØ V«9vä€á…'¯òê>ž¸¸8âãuÄÇÇáá2ˆ‹«²bËOÍU–Zå:‰R©@¡T¢T(Q©”(•*”J…á%+™±DID² ‚ B6ÇOvz¼ÞS§LdꔉVoN÷âoøÛ-oÊÔØ@¼.âuÄ)âÐ锨R‘(¾2S×ï‹HAA²¥R‰R©ÄÊÊÊ ¼Ëññz! -³HXj!Ë-AAÈ:à%FÒDâ}ÊU*ÕS/É‚ ©ð6r ÿgï¼Ã£*º8ünɦ÷„¡÷’Ð{¯Ÿ"])*¢‚"R¥WAPÁŽbE•^¤„"ˆ z'”„$l’Íî~L ‘餜÷yæÉfwöνçÎýÝsÏœ™ÿþl<<<²¼È¨Û”(á‹Ñ‹«‹+á·ÃE$ç‚é3™Åb1E\‚“)1Cß±±Ñcg°ÇÓÍ­V—­ã(êí‹H!Kl ù‚о~¼Þa!G¯íæ“Ý/óZ­/ðq(—åmÞºU£¡I£– ≋3’˜hJü ¸ººR·NÙõgŽŽN$$ÄU¤ìo4Æ1èµ· fÐkoñã÷K±··ËÒ¶œ8}ö$înœ:}géà¹`gAúLfbhØMªT®F1otºŒ >³9‘°›aœ>s’’ż³,‹zû9E¾Xqï©.=¨T¥&;X' `'•ªÔ¤s—žTªR“JUjæ» ,:úŸñÏöîG½M¨^³­ÛväÕAoðûª5)õòëþ4Þ1šJUjÒ»OÌfs:œ™^Ïõ§R•šŒ9:ÃÛ}åÕשT¥&ß›rßg&N¦R•š¼òêëYÚçäsÿ¨’› ßEÝ íˆ×ܦf©¦ oÿ_¿ÆØ‹YÚÞí¨(œiÜ `%2ò6 ñh4 [lmí’~€ŒDGGbµZhÖ¤eÊ÷“…tFéÝ»7&¥Ü˽ï§W7f³™·GŽ"((€  `Þ9*Ýþ›|¼¼¹|9„»¶aŒ½K©%rl_ÅÎùçšÍM¢¢¢ýîx6nAÃÆ-ýîx¢¢¢Ó^ã·oÓ¸iK*U©ÉOË–g¹­ãÇ3uêTjÖ¬ùȾËøñã)W®¶¶¶”+WŽñãÇc4³U7/úLDT4Õ«Õ¤¸O 4 f³9CE£ÑRܧÕªÖ â?ç ³íרîWdÛ/T"¹[×ά]·áuÖ¬]@פºù‘cÇŽóT—îÌÿàC":ú&“‰«WCÙ¹k7ïŽ/ª6‡™:å=|||8tè0_|¹ä¾Ï?ÿâ+S¼¸S§LÊðvǃ^¯gÅÊß8qòTÊû'Nœd寿£×ë™0aLµ[%·ü²ŽÈÄk\?B)¯J¼Þn!_δPމ%6.¿šµ0c‰‹‹ÃÖÖ–;wïtä0{÷íf[ÀŽ?BTtƒŠGNHˆKùñIÌà£8€uëÖ±råJœœœ ¤í§MŸÅöí;Ò¼·}û¦MŸ•¥íÙl©P¦, êÔ£Rù ØÙ挧Tì\t˜1s«V¯aò¤ñLœ0–U«×0cæœ4u&M™NxxÍ›5¥_ßç²ÜVÍš5™2e Ç?|œÕj¥GÌž=› aöìÙtïÞ=MVŠÌÔÍ«>cŒ7âåé­æd$&fX$&×÷ö*†1Þ˜e;ãxzxÙösŠ|nѵKg>XðÛ0ØÛÛßw‡°c†®]žÈ“å3u×Á+ƒ^çÖ­pš6iÌÐ!oàïï‡N§ãÚµëì?p€_[%£qãêêÂûsgòÒÀA|¼èSZ·jIÍš*ÁûÑ£ÇX´ø34 ïÏ…‹‹s†·[±By^x¾K¿ýž3góÓß0}æ, /ÁðaC²l“#·¾¹‹ÑÁ„¯<°Þ¡°MXõ&ª•nÀ…¸«”ô¬ÁËmfðÅÎÁ¼VëË …^X­VB®^á‰O‘€É”€^¯çŸ÷AÉâ%(áSŒ˜#ç.œåȱ#”+[F a±˜‰ŽŽÀ”˜1‘|çÎÞ|óMfΜÉðáúoùõÆnê”÷rl{qññ\ºr™›·nâáîI¹2e°·ËžP;çí5û¸Ù±sÚ·#ùtîܵ;åóM›þ`Ó¦?prrbö¬éÙzRP£F zõêE¯^½ðóó{`½åË—³uëVÊ•+Ç?ü@:u âùçŸgëÖ­üòË/ôéÓ'ÓuóªÏ˜L&´Z-ñññ÷}6`à iþÿné÷Õ±±±Ád2åJû!7Û×h4|ýíŽO½®>xaš±$»í*‘ìë[’zuëðï¡@¶lÝN÷n]Ò|¾uëvŒÆ8Ô¯‡¯oIå Kz´uïàuóæ-ò;wíæÆ0œiܸ!#†¥bÅ )õÚ´{‚+W®°níïT¯¦& ­[¿‘#G³pÁ¼!~âä)ºv{šR¥J±3à‡Ã7K¿ãÖ­pš7kÊÒo¾D«MuÒ—-[†²eËл׳÷}o×î?ùá‡e>„1.ŽR¥|éÛ§7/¾Ð?Í6ÖoØÈÛ#T¸€Á` L™ÒôìÑW_y)%Öç^›üöûj~üqgÏÇh4¦Øéü… Ì™3}¬Ô¨^/½Èa#²lϨ¨h-þ”]»þ$ôÚ5, ¥|}iÖ¼)O÷ìNíZþ¹Úš7kÊ€ŸçÛï~`ä¨1¬Yµ€wF!11‘/½H³¦M2½Ý¡CÞdõšuìßÿ›ÿØ V+üƒ»»;Cßz3GáÆ¼4pôy®C‡¼‘émX¬‰¬:3Ÿ³±ûy¶ÑPzºÆÕÎæÑŒn™Îr2v+å¼Ñ¿Õ8>ÛñoÕý o‡2÷"cñö,†^¯'::ƒÁ–ÃÁ‡ˆ3âW-u5ª“§ÎÐ鉮¸¹ºê±f²@¶X,$fP$7Ž+W®Ð¨Q#† òPñVT¸xù2Õ«Õà‰ÿUàüÅs=ŒõêÙÚ¦Ø9û×lhè5>úx1îù‹ˆˆ<ÜÝiÑ¢Ç IùËlÝä1þ£ç³dÉRN>ƒ-Íš5eì˜Qœ8q’O?ý‚ÓgÎâååI×.O1|Ølll2tLJ£XïsMž:€ ãÞ¥dÉì…ó;–1ײeË”xúàZ´h¡ÆúæÍ™?>Ï>û,Ë–-K¾™©›×üwlÓh4899òÍ’ïxùÕ˜Íæ\»ÙÌèØšǯÕj1›Í&:*Š,B¯×óîØw°X,Y9+ô"TÈÅ¿‡Y·nÃ}"99 ãa¡aaaô|¦7nÜHyïöíÛlÞ¼…Ý»÷°â—Ÿ¨Vµ Íš6aÅÊ_ >’"’w&ÝIïØ±3E$IaXÛ’Ñ úfqû(þ×zîÜù”Ç\/ H½Û\úmêfBBgÏžcÞü˜L&†¼•v3gÍeé·ßß×ÖÕ«¡ô~îy"##SÞû÷P ÿ Ì–=‡x‡={þºÏÃráâE~úéç<ñú5‚={ÿâìÙs¼?oZAëü*W®Ä¨wÞÎÒ6]\œñöP&MžÆœ¹ó“A9bX¦¼Ò"**š—^ÌÕ«¡´oß6ËžŒ_NÌÄêÃÛ­>"Âr‘ĽÄF‡c&ãƒdÔ+TôhEÙÒøáèDF6úþ¡õoߎ¤z ÌæD´Z·ÂoqýÚ5jÕLŸ™OÌÝ»X-êÇÀjµb±Z°Z¬X­3à1Ø·oŸ}öz½ž%K–<ò:óõõ%,, ;;;*UªD—.]1bDÌp@ÈåËܸy/Ê–.òÄ-,ì:žè‚Ñ‹·§7×®‡¦ˆä»wïtä¡×oPÊ·$µýýqøÏ“:±sÎ_³W¯†òô³Ï‘:¦Þ¼Éï«Ö°k÷Ÿüþë/)â73u“þö¨4}cóæ-üý÷4cûÕ«¡|þÅlmíyÓݶMkV­^Ãö€ÌfKÒ{­˜4y´nÕ’^½žÉ3:tHý^7k–Ö)Ò¼9Yª›×âÐb1£ÓéHLL€ŽŽŽi^ß+$õz]jZ6îÃÚ¨(Ì…ö“Ñét,úäCJù–¢_Ÿþ)™’ÒÞ[7?ü|%’ŸzêI¦Í˜ÍŸ{örûömÜÝÝSîb÷ìý NÇSžxà÷~´˜7n0èÕ—éß¿Å}|¸{÷.ë7lbÊÔÌŸ¿%_}–t!5fÅÊ_ :Âs½ŸÅb±°k÷œÙ½{f³êTAAG’ê?Z$_¹r¿š™[˽xq&Oš@ãF0™L,þä3~øq?/_‘F$ÿ¶òç4ƒbð‘£ôéû¿ý¾ê>‘¼eë6>ÿt ÖÇÍÕ5åý}Bdd$Õ«WcöÌiT¬X‘sçÎ1nÂ$Nœ8™e{8p€ŸúŽzõê’`âbHïÛÏêµëò¤ÿØÚÚ²`þ\z>ó?ü¸,å‚\0.¶¶¶YÞîs½ŸeÙ²åœÅ©Û1ªí"ŽÆ®Çh‰Ä^ë†Ncÿˆ‹\ƒ¡ 7L§ O¸€³Þ‡€S?pþÜ9†5ZòÈvÃoGàáîABB:ŽËW.QÌÛû¾Ç±ÕªTaó– ܹ{W‰d‹5­X~„%!!Aƒa±X3f þþ~:š">ÌáÇYºt)»wï¦B… y:¾íÞ¹-[ß¿p)„jÕüèØ±·oG°zÝï4¬['GG<<< :r˜âÅ|<|oOo%ä¢ï°}g/r”>^Ìûsgeºn2~~5™=k:åÊ–eÅÊ_™>c6‘‘‘iÞ_¾|3gÏeÍÚuÉ'Œ`ÊÔ™ôìÑ ãDz~ÃF6ÿ±gfÏš–§çòÖ­[x{{§yßËË €›7of©n^õ™¸¸8@ekÐé´ÌyfŠ(t½çwÙÕÕ•ù 榈‰ãßÃlNL³œnÿaÂ67ÚOÆÆÆƒ ^|9M]GÀš¦nvÛ/t"ÙÝÝ–-š³s×n6nÜLÿþ}ظéÌf3mÛ´NÎé±k§ŠŸújÉ7|µä›û>ÿçà¿)¯›6i‚F£!8XÍ`=|8˜ÈÈHÆÍì9ó<DƒúõF£ÑдIã\;î9³gТyêÝ‡ñÃ˸téršŽòáG‹ùcËV®]»žæî*4ôÚ}Û|Î,7nxÿ`ðçfÏœ†Ÿ_ÍÔÁvæ4z<Ý;Ëö¬X¡<'Nžâ•AoP¹REŠ+FíÚµèÒùI|1ÏúÐ¥ËW0›Í888`µZ1\º|…êÕ«ey›:މÆñü‹“~LÆeêIÁ£¤·†'0ð0+”çË/>Å.‹±¤ÛÏÿÀÿôæJ|0wM¸Y˲ñ¯Ÿ¹öÀ»qFÃKOÁäe"$æ.zÎ\<ÅÑÀ“ k¼oÇ2l÷nL z½ ±±1 ¶\º|)ÝGý®.®´iÑ2ë×Éœ9;vŒJ•*1iÒÃ'`6hЀ_|‘öíÛS±bEŒF#ÿüó£G&((ˆ‘#G²zõê<ß–éï¼<85ÄázXO>YžØ˜»¸¹¹Ñëéçøiù4kÔˆ åÊqúìöþµŸb>T­\™¨èh¶íØÁ+áääÄå+—qqqåìùóÉEÝÎ9uÍþ¹g/3gLMªW¯ÆŒéSèÖãÙ4OÞ2S7™éÓ&§<íõìÓLŸ1P1µÉï÷ï߇YsÞOqà< WWæ½?ë?"5û’;wQ³F Μ=GÕ*•3ôذT)_Ξ=ÇÑcÇiP¿^†¹aƒúiþwrr¼¯³Ìž3ï)wÒ‹á©[·vºu#"nP©RÅ4ïW¬X1[öœ=k:cÇMää©Ó%…¨lݶ…~̼÷g§d/ÉMnß¾Íä)ÊÓ1æÝwÀjeòÔLš<•F ë?ôëQ4iÒ(åuz7Yøß3žÝ»÷P¬X1¾ùúË4^ÿL{’#ÏÒ̽%§în¢¬}CN8‡Ÿ}Fv€­Þñ¾ú+ŽÌŧ¢3.îüyóKÜ %¹xñ"§‚.1¼ÙŠ;•ËP»†ÄÄD4-V«½‹Õ’ãçwÖ,õþå—_>òFâŸþ¹ï)CÇŽùí·ß¨T©y>ÐfwŒtsqáâÅ󸻹…··}ŸëÏ˾£E“¦Ôñó§ŽŸ’9š-Û·óê+ƒqtrâbÈyœœœ9qò8eJ—;çÁ5›<Ö–/Ÿö:*Ÿ4Ù÷Þñ53u“IuƒÔGÕ5îq ¬Vk–Y¿7i*‘‘‘tèÐŽ=º1úÝñ¬Z½†æ+¯ç;£TvŸ¹sf抽½¼¼ åæÍ›”¸'­a²Wø^¯qfêæUŸ‰3±X,˜L&4 «¸ÇSª×)ùuï{ŽŽŽh4L&‹…8£1×ÚOÜjÿ^‡ßË/ Âj…_~ý)'9ù·$ùÆ&#íW¬\ƒ¥_}œ©›èÌžï,y’ï½óÊÉö¿Ží±··çPàa®^ ÅŠ•ÀÀ ìíí騡ÝC¿ëééIXX[·l |¹GÿÀ7kÖ„S§OsôØ1vìÜE³æM±±±¡E‹æìØE›6­1›Í4m–± _íÛµáìÙs,Zôé}÷ÆCÒûÞ–­êÆäý¹³ø_Çö899}‡z Òß7ƒÁ¾<<»y“ CR¼ çÎË–=ýüj²~Ý* ¹DØÍ›8pŸ–-gá‡ç‰Hž>Å ½v…Å}éß÷¾ûþZ·h…«‹3‘ÑÑlݶW_y 'G'Ο?ƒ³³ —BBؾm+O÷èñÐvŠºsêšõðpçæÍ[\¸p1Í“¬ .¤|ž•º)×Ý&âet‚Þ£X³v=[·mÇÍÍÓ¦©0þ×±CJ½€»rÍÞõêÕ#44”½{÷ò쳩!n{÷îMrÕÍRݼ‡ÅbNÉòàâê·ß"¿¢B`¾ùö«”ß}W´Zm’H5cÌF¸ÁÃÚ¹Õ~2QQ‘DGGQ¢DIï¹ÑsLi7U$?ºýsgŽgøI@fÄtM–;öœ¾³··§Cû¶X­VÖ­ßÈúõ±Z­tìÐî¾´pÿ¥]ÛÖŒ5– à#ÄÇÇËñã'Xºôûû š&e;غu;'Nœ¤u+õ(¸uëœ>}†Í›·(1Á¬/| OOöþµ/½Êÿ`4‰‰‰áÌ™³üöûjz÷éŸ%»$/çèæêŠ­­-!!—3vB¦·Ó²¥šÄ0ñ½)œ8yЏ¸8Ž=Ƹ “²eÏ^Ïõgù/+¹s7†Zµü騡=m’&}„…ÝÌõÁhóæ-lܸfÏžž’ ~Îì888°aã&•"ŸðɧŸóÝ÷?bccÃçŸ.JãÊ*z7NDìÆ 7Š_¹Æ¿þ‰æ„të×.Þžƒ§ðÔT ür “²s¹Lµkk°ãÎh@Cb¢‰š5kqòô™‡~Çb±°ëÏ?ñ÷«ÃÛÃFѶ]‡”¸öœúqýàƒ $&&†ØØXöíÛGß¾}“®ñÖN 988ФQ#vmçêÕ«ØÚÚrù"Ž޼øü@¶îØNÈåKü±u+¯¼¬<ÈgΞÆÉщK—BX·qÝ»vÅÕÅEìœ×l‹¤ c&NæÄ‰“ÄÅÅqâÄɔʼn’?Ïlݼ ìæM¦'åž:e"^^žinîn›‹Æôë×Oy¬ßy‡={öp÷î]öìÙèQ£Ò|žÙºy&’FÍfLIÞÑ>½úÑ·wúöî߼ä÷ûôê§BI4›3µJfÚPÉ­öÿ[t:]š' ètº4u2Ú~²}TÉ*ùnYê®]»°nýFÖ­Û€5)MFy{øPöìÝGPðžyöÑ©^7j€N§cÙÏ¿¤-[´@£Ñðóòèt:5l¡ýöôô`ÉWŸóÚëCØ÷÷~öý½??¤Ì? IDAT=ìX±òW¿þV¶¶3lè[lØIPP0]»=cö î/š×~‘ã'±áÄW”p®HYø8§Æwªö ëŽ}Ážý¨Z¬>£ÚÌÇÛ©T¦Å§˜7{÷í¥K§®Ü½·—7%JúrðP õêÔNçɈ•ýR£†UªTãBÈ9œ¸Nb¢½>ýI‹òJ¦çÙ |àlvOOOæÏ¼O&O™žnøTÿ~}šÙÄÙɉMš°c­Zµ¡xñ✿p–òå*òòK¯òÑÇ 6tNNΜ>sW7B.…°qÓzvïGú¾Ø9g®ÙáÃßbç®Ý9J×îi3B¸»»3|xêXž™ºyÁÄ÷¦E§NOÐù©N)ï·mÓŠßW­aÛöÔ ÉΔ̞°¾÷½ä>Ö§O¾ùæ¶mÛFË–iç3tìØ‘çžK]Ð$3uóªÏÄã°Z¬èõzn„¥f‰*îS''Ç«““#–ë7Rçéõz¬+qÙˆÉ}Pû†9ÜþϵN§ÇÎ.õ)º-:^µ›tþ³Û~N‘/VÜ»—V-›ãææÆ©Ó§9}ú nnn´lñè;i//OV¯ZÁàA¯P±By ƒ åËÓ·Oo~]±,M}GGGjÕò'..ŽêÕªR,)fÉËË“š5kOíÚþiîø…¿_M6mXÃ;#‡S»–?NNNØØØP²d Ú´n•娭‰ÆÐ¯ïsxzz`0¨^½ >x?ÓÛñõ-ÉŠ_~¤m›ÖØÛÛãææFýzuSöëÞÚ™±ç¯+–ñ\ïg)S¦4z½>¥Þ«¯ ÌÒ~fê‡pê """hÖ´ }ûô¾ßÑ÷9š5mBxxª˜.Œ4/߃c‡Îâˆ7ñÜáhüZªT©ÈÿšI©2eÙÀ¹ ¸Côh.]¹ÌºÍ›qwó y³–\º¬'_»Š“£ÓrfÙ·oƒ¦jÕªØÚÚbkkKåÊ•:t(ÁÁÁT«Ví±ž«Iï§}û¶iÞkß¾-“Þ{ôŠœ.ÎδnÙ’m[¹rå ŽŽNœ>{ 'Gg&¿7 g''Nœ:г“ !—BX¿q==»÷À3n ³³K)__Výþ ={tÇÛÛ N‡··=ztcÕï¿Üw3ŸÑº¹ÍªÕk؉§§Óþ# 'ŒKÏÝ™2u&3fÎá™§{0a|î­:ªÑhX³f cÇŽ¥lÙ²ØØØP¶lYÆŽËêÕ«ÓëÌÔÍ«>cŒ3jžÆ½EåIvbϾìÙ·'''4Í}õÀš´,zrÐ~FKn¶ŸÌÖ€Ml Ø”òN¶ŸSä;O²^¯çཬ—ž—ÍÍÕ•wGäÝÑ#3ÔÖÊ_~J÷ýÕ¿¯Èòþ»ººðÆëƒyãõÁ™Þÿ}æààÀ´©“˜65mXÄc}3âyœ6}/ x… ÞÇ`0píÚõ”ì•þ3/£ö¬S§6uêÔ~,ýeÑG ࣇ´ß÷u¶ÛÉÉ\Ϲ‘7ºFñ&4òéÉ_»hÕ®Mn½‚åq·”Éâ¹rükÔ`ËÖÍôîÕ‡ØX#×®‡Ò¤QSªW­ÁÉÓ'Ùµ÷/ÜÜÜ(Y¢žˆ‹‹ W¯]!..«×¬¢]ͧçùlÒ¤ Mš4!¿¢ÓéøpÁ|žq AAÁÔ®]‹d<õŸ«‹ Ú´cóÖ?hÓ¦%K”äÄ©#”)]Ž I“ûBB.±ióžíùLŽä¢hçì^³¥|}ïË‘ݺÚ̾ÿ zöèNÏÝøÛ–ÑãÉl_z*„n6³gÏÎѺyÑgô:111ØÙÙ§™0§ÕjhÑôþñNO<¹^§'&&½.뎽NGLlì}íg컹Û~LÌ]:´}ò¾÷tI:'Ú/´"YÈ]öìù+Ý”B:ŽQ£ÞPéPa·oóÛOдY}J¹G£s$ѪŬlr§mo//<ÜÝøeå/té܋Ź §qwó¤^º4mܳY­ªwçNÁGã`ï€=+W® –Ÿ¾%K©óeooÇW_|¨wÇ1ÿýÙØÛg.õŸ›« Otüë6n }Ûö”,Y’3gOáééMÈ¥KlÚ¼‘ÞO?ƒ§‡{‘¾.²kgAúLfûLòM@1oÑ´ISL &ÌI eܹ{7ÝïÙØ¨ ÷:­ƒ ýµ—bÞ>)Û˨7üÞöƒƒƒhܸIšöy£íÇÅÇ_—!Ûí‹H²Å×K>ç믿%ðp&“‰bż©_¯./¿üþ~5Å@‹Å‚+¿Nå9ôÏV.sO‡pÊyÕ ª¯;®ÅŠçZûuk×áøÉ“|ÿý·tîÒO/îDGvS­V‹^§ÇÃÝ“K—.°c;åÊ”¡¶¿‘L«-H4™HHHx`:HAr‡ä4,+5«UcõêßYñë L ú¾Á€Á@»Öm°Z5$&š35~õöE$ ‚.&Eç%f³Ê…™€‹‹ ê7äæÍ›=r„]»v©ÇjhÐkul x{zR®z ììl‰‹S^f½N÷ÈeS…Tbcc‰‰Åb¶P±l9‚S¹b%¬+1±±ØÚÚŠH„Ç0 \\œ©S§6ÕªUÅd2a¶XàQñØ zƒÁ€­­{{{llô™ò¢õöE$ ‚¯Ðét899aggG¼C<Žqñ¸º¸P¶LL‰‰XÌæ”Uø´-ZNÍ`¶±Á`0`g§2#füß•Js777œñ)VŒ²eÊP¯n]ôz=öövØÙÙei²‘ØY>“=´ZmRš3vvvX­.©iÍ!SsQkî+Ò¾ˆdA 0z½Ês™™´‰#7—ÎK²šÍ$#ßÓét8::fËæbçcrñæ"ù¹åVŸyÜ®¨·/"Y„BMa[ÒXì,HÿÉ‚ Ù¢U›…Æ»)v¤^*V®!'ZD² är+æP¶+‚ ´±¸¨·/"Y’È­'Ùnæ8h˜tFAä7é1ÅE½}É‚p2Á& èAä7©( ‚ ‚ BZ²íI®TE–2AAòÙõö‹'YAAD$ ‚ ‚ ‚ˆdAAA‘,‚ ‚ "’AAAD² ‚ ‚ ˆHAAÉ‚ ‚ ‚ "YAAD$ ‚ ‚ ‚ˆdAAA‘,‚ ‚ "’AAAD² ‚ ‚ ˆHAAÉ‚ ‚ ‚ "YAAD$ ‚ ‚ ‚ "YAAD$ ‚ ‚ BÆÑ‹ Aò{-”·ƒ vPÎVý-o«ÞsÓZˆL„ qªœƒ‹I/ÄÑ"6A‘,‚PÐT ”¶M¾åïÁåm¡¸áe?…ÚŽé|=!U@_ˆ¿çu\އD«œAÉ‚ ›$°Ýýb¸´­Ê"Þ!ñÿ¸I¯ÿù°ƒ†÷lóžR6Id7@S—û·hUBù^᜼ýóF¸a’s'‚ "Y!‹¸èÒÀÉaö™Éa®ÄÃùø{Â$ ªNºØ«?ïªò_´@IÛû÷§\Òß’÷ìoz-©aé•h³œ{AÉ‚ YlµÊ+›nH„x>bT O|@ÈC¼òÇçRÜp²¿>ì¸ÒñB—·O¨é JºÇeº?„#¹äæq ‚ ˆHAÈ´@ICZ˜âqµUׇ¥õIãqM',"¿z\ã-pÚ¨Jz¤xÈÓ)씈ö´Né ôÐøû'&Û$4þ!rAÉ‚ yƒ§>}/py[åMµ}ˆ N´>8.ø|\áÝ6CPŒ*éácìÿcϤRÚJ%•V®é ôx¡/Ä+/µ ‚ˆdA„\ÀFÏ{AGWèÛ¸ÊÝ—×îÁÿÃ’"}n˜TÙ—ÞErÖ»ôoNРн*éñóMØ ?Ü€±½ "’A²A/yÃX_%Ìh ¡ÇáÀ®¤ì qp1^ò ç‰ÖÔôH“ÿÙ.5ûG#(é};@ߘRæ_†¯®A¬œ#AD$ ‚ d;-¼Z Æ”„RIù…Oa½ Œ.Žn0øg¸-¶zÜ-p …¨D±Ÿ ùY–Z„|…£F–€óu`Q9%ƒc¡÷ð ‚w†@pu€YýÄ^ù•Y/¨s´á ŒÙuB÷£ðw4³™å!¤±úëm#öAD² Bº8ë”×ø|]ø ,”0À¿1Ðó4Ô †•á©!È#¾…x¼ÜêWÛå7êW„—;¨s4âkõžXM¡}l¿ ®z_.6QæR¶b;AD$ ‚ ઃ÷|áb]˜SFyÿ¾ OBƒ#°:B ¬{9s o­¾Ø1¿ ÑÀÂWÕ¹Y¼΄Þ_' :+Á¼6\Å4÷…sá«*PÉ^ì(‚ˆdAŠ(žz˜^BêÁ´ÒࡇÝÑÐñ4= #þýi+áz$´¬}›‹=ó }[BËpý6LûåáuÿŽV!µÂÏa ^-'²êàï(öAD² E„b6Êc|¡.LôUžämQÐæ8´>®^g„h#Œ_¦^ÏyäQýcÇÁæ P¯ÇÿѱûÞ‘èwªýK®è[ ‚À?hâ"¶AD² …”6° ¬ÇcJªäM‘Ðì˜òïÊB–ŠïvÂÁsPÚÆö?nÆ>¥½ààYø. óß?k„A§¡â~øèªÊšÑÍöÕ…mµ ›ØXÉ‚ J`q95!oD ºæ¶Š7~ê$컓õm[¬0ô°Zatw(_Lìý¸(ï£{ªs1ôKun²Ê•xxû,”ûf]RiâÚ»ÃöÚJ0wó CAD² S4ÙÂàl]x«8´*CEÝ`èqJe®È þ> Ëö€ Ì}^ìþ¸˜;ì °l7ü}*g¶yÓ.@Ùýêo˜I…^¬ñƒÃ TH†NÔ² "’A(T¶ƒ¥át\LMÆZv üƒT®ã ØœosÌp7z5…¶~ròš¶þЫ¹:c¾ËùíG%*rù¿•‡ùJ¼Z˜dYu8Ñ^)®VfA‘,B¾£†=üT NÔVËH|{ªAÿ³pܘ{m_€Ù«Ôë‚NF¶F†À5SþØÏ·—B¢Þ|üJËyË-üÊ›”­ßþ:ÿì—,y-‚ˆdAò„®°«쬡^G™aÆU%ŽÇ^Ri¹òG/ç€^”ó—[|øŠ²ñ§›àhHþÛ?YòZÉ‚ ä O¹Á>?å=nå‰0é2”=ï]†ðÄü»ïÓ~…ð;ÐÞz4’s™Óôh ík+O[ž¿÷U–¼AD² ÙFôðPñƪA'å){ ÊÂô«Ê“œß ¿ï%‰·ÔB#BÎ`g€¯¨×ïý¤l]%¯A‘,B–‚^žp¸¬ª¢2W\K€wBÔ„¼¹¡*¹ ñå68rI-U=²«œãœbdwµõ‘øò‚·ÿ²äµ "’Ax$: ô÷‚£µU®ãZp%†^„ ‡aÁ5ˆ±Ìc3[`øRõz\Oðõó]|=a\RÖá_)TdÉkAD$ ‚p^zxž?6‡êö*¯ñkç¡b ,¾q–‚œ;ŽÂÊ}àdsŸ—óž]æP¶\¹v)Çô°%¯§—/ ÕÉ‚  \t°¾*,©Ïû€µ¬¯þGÕJy ÖÂu¼c~T ôkMªÈùÏ*MªB¿VjÁ1߾㋵Àg7àÇJ`éÔ„qí`}-p‘ÕûAD² …{­Š9nìçâáó°j Ë“°w&Ô.[øŽùBÌ[ ,z´ò=ó?X4XÙpÞ*µua£vy8°Æ>Ô‚ÏMpî4vU~êÚAD² … ,¯í\TÜñ'áåÐj2œ¹¦òY0¡§Ê[˜˜³.‡CƒŠ0 ô…Ì2 4¨—oÁœß ×±éu0¡·ȵËÙPh5Þø žøW…_´s‡å5Õ5$‚ˆdA Ù…¾´tsW–:„sqê³½§ ÎX´lt0£ì›5Jžã‡±?ª×³ú‹¬º–a\`Ö êõØï”- 5Jþy0ãÕ÷­ƒ:Ã`ï õù9#t R×L7/XZ]~4AD² …ŠÅåT‹(3t9 G÷‹ÈaK¡Ã ¸xT€çÀ¨®…'<áç½ðç (î“zå¿ýÓô°CÓÃ.ßíפ砸;üy~þ³üði`TOø÷ChP.†A‡‰0ìËûoŽÆ@—`5Á¯¿,–¸vA‘,Bá`vixÃGMLêyÜ}pÝ€£Pk´Ê1l«‡yÏÃî©P¹xÁ·ƒÕ #¾‹†< •KHßx•KÂÎÊf#–(†cÚ=æ½ ¶6ðåf¨5‚üÑÐó(Äšá _˜]Aú† ˆH¡@3¦$Œ-©2Vô9 ;¢ý;Fxí+xj\€æUáðû0ôI5q« óïyø&@‰£…/Iÿx _Q¶úfü{®`‹FC»Âá¡yu¸OM×>Q}þQì¸ }ŽC‚Æ–…1e¤‚ˆdA $¯S^d³žƒu·3÷ý͇Á|¿láã°m"”ó.Øv¿ ¢b¡s=èTWúɃèT:7P¶ÿCÁ>–rÅ`Û øx°êË߀ÿØ|(sÛYw žT×ÔìŠðzIé'‚ "Y„E?O‡ 0ä", ÏÚvnÇÀ€O û<¸íü x îPp½Ê7£aú¯êuçnÅ"îÇ:÷P'xú/p3ª`†FƒŸ„àÅЮ܈„î3`ÀB¸}7kÛ\v†œV¯W~>Ò]AD² ‚®î°´¢ZRwÜeø<,ûÛ\{üÞ•ƒ³=|16Ž-¸K=¼:ÜÖ2dŠ ÓI§ù/Ãô ™hO‡›z>^W0Á×6N†/ÞR}våð{ ÖîÏþ¶?…qçÔ5¶´tõ’.#"’AÈ×´uQ¹ ˜ sCsnÛ·î@ܺOÖ#óa@ë‚g'“¶¯Júç=xKßIÁ[ï)÷úö߬˜Ìï´‡#‹áÉúp+zÏUåVtε1÷Ì ƒ–×€¶îÒuAD² ù’FNj5=­Z^wÜåÜigåßÊ«¼ö ¸;·ošÑàãZÀ ¶É,à Ì’u‡S˜e®Ø`†MK!û¸Áš‰ðíÛàÆ~o)/rn0î<|vtjU¾F.Ò}AD² ù ?{X_\uðÓ-‡œ›ÜˆRqÊ/}ªâ–»5€£@¯&Ìp#̼¬…ú²œõµð²^ÙdDBÚõ^-àè'Э±Š7~éC|#2wÛr~º®zX_ ü¥ ‚ˆdAòí`S5ð¶µ·aày°äQÛßíR06/gX1B/çb¼3VXlV#áB=e¬”-›”m ^.°bŒ*^.°ù_•¹â»íyÓ¾xÖÞR×à¦ÚPQVtÉ‚ <^| °¹*”2@@´Ê…lÊcms5BåT~í+•o¶WåUîÖ €qš®[¡¥úá!±¯Zj•-¦™ Ä.wk¬¼Ç½Z$å÷þžšªr ç%&+ô9·¡”-l® ¾¶2> ‚ˆdA ^zØT*ÙÁþ»j5=£åñì‹ÕªVé«5Z­Úçãªâ”¿{KÅ-çk¢ñI±·stàP;“0Ç ^7)›äcÜà»*þØÇM­–WkˆZ=ïq­ h´¨UùöGC%{ØT ¼$½  ˆH!oqÑÁúªàïGb¡Ë)ˆÎs¬.Þ„3`ØRˆ‡[© OÖÉçýέPZc‹`J¸±6êØZà»Ä|½«OÖS™+^l§úذ/¡ÃD¸öø÷-:ºÑ»àï¤b”]dN¨ ˆH!o°×ª,àlt:·ò‘®±ZaÑf¨ó.ì=¥r)o«r+;ç×XM 04¬Àh”/BÁÉå50ÚFûЄ¼ hÏ$Îö*çñÆ)*òÞPg,Z÷ø¼Çéq˂ᬻ¨¬öòK+"’AÈ]l4*r;¸’Ož‚«ù4 Á™ëÐj2ŒþâÕ*}ÁóÔª}ù’¿­°ÌvÀÜ"äMžkPǼ,þΟ ¹]-µjÞà'!Þ£¿VcàLhþ4éÕxx2®ÄC;wX^S]»‚ ˆH!—.Ö¥ ›;Ü4A§“p..ï³Å ó×Aý±pð<”ó†máãà'61Ã] —ÚUÓV ½tê˜Çä¿Éz¶ðñ`Ø6ʃƒg þÛ0•ê[ù™sF褮Õn^°´ºüà ‚ˆdAr…Åå ¿D™¡Ëi8j,8û~ü 4—«Õî†> ‡çBóªùlG¯ZavRp÷Gz(ÌeðQÒd½Ù&uìùˆæÕáðÇ0´«ê3€¦£áøå‚câ£1*F9*úûÀâ*2Ž ‚ˆdAr”Ù¥á ˆµ¨,î¼cH4ÃÌUÐh<…@å°{*Ì{ìòS€f¸` .ÄCä`=økÕ±.È?^d;Ì{vÏ…Ê%!è4 3W¨>TÐ8­²^Äšá _˜]AÆ3A‘,BŽ0¦$Œ- V•yGtÁ>ž %”gþ Œê çj”(ÍÄ#“ÔØt=xÂNå©éIw&#Ô1çüµtœ§gTOÕ7f®P9èBÁ6÷ŽÛÐç8$X`lYSFÆ5A‘,B¶x½˜ò"›­0ð¬»]8Ž+!&þ¢B0æž„u#tp@ojóǪw«-°Ý¢ò¤Bs1ÉF åífXܳàM8àÀºavÌ=¢¥é(b‘X8L¾î <©®åÙáõ’2¾ ‚ˆdA²D?O‡ 0ä", /|Çxð<Œ |•”Uâ-¬ÒåïíÛfHÞÔ_!šÄç§…7õêØÞÎažXeŸØª>𕉱3,<[øúû²0ä´z½¸ ôó‘qND$ ‚)ººÃÒŠ ÓÀ¸ËðyX!>ØX`°ž5C$Ð]‡õÐú1 Ó£VøÔ zàÃBäMþÐFÓ§‰pô1§|k­ƒÃÐ]‘Vx6Ç«>QHù<ÆS×öÒjÐÕKÆ;A‘,B†hë¢r!40'憑ÿÍ µa¯JÛu0]«ÝãbšÂöZèQ†Ë:h¯ƒp+L{Œ^d=0ÝÛí¡”öš¡v,ü–X$ºúÜK0' ZX^ں˸'"’Ax(œÔjzZøì†ò").mÌ0#ÉÃ9Q ;uð¸&:…ï% ·:PP±$¥|{Ϥ„òã ŒvÚÃĤ}™‘mŒpÉZ¤ºú¸óðÙUpЩUù¹Èø'"’AH?{X_\uðÓ-‡\$IÞ³@{3\šk HÏ<¦ð‹/-pĪ–oY€Ã.FÚ¨c8b/“Çö=9@s\±B{#¼— ÎydÈiøé¸êa}-ðs”qPD$ ‚†Šv°©xÛÀÚÛ0ðÖ>µ«Nì’+ð©™á¸jhONå1f%òúi¡Iò&7ÑB?½Ú÷1 yÛ¹“rSC Ç-Ð(>5©s*¤vq=|jaöPÉ^åPÖˆYá±£Â㣖=Lôþ‚bÏÁ¯u!&¶õª„E‹ÜÐ j•Gù-üO¯$e Èm.XažÞÓÁ"=46åÿ˜-°È ×<“:†¼ÀS_ÛªÔn_™àíÂÚ-³sƒ. KCø_=p´ŒÀY˜x~½ AwÅN‚ "YŠ(’f´¯>‡‡®u¡^9èÙ@‹œƒµ‡`Ý!8z¥ˆ,9§òVX¢S9•ëëáy³ŠaÎmæ˜á%-4ÐÀ-,Íç*y€há²æäQÊ·Ö:øÑN¥v‹´Â«ñE&µÛ£ð+ ]C·ÆÐ¨*h“ÜÅV+ü{Öí‡:7 ÐÉSD² ˆH„"Lç$‘üÝX} ¦þ¾îÐ¥.t­íkB“JªÌê n*±¼.vŸ,Ë-~¶ÀëVh©I:•O34L²âøÓ?çò>–ÑÀ2;•ÚÍŒÊ}<µh¦vóp†§(QüD=p½'­ÛH%ˆ×€-‡ 6þþïo‹€ 4uˆ0!‚ˆdA(Z<ᢖ¦Ý}î>à©}l¬þW­V€nõ”`®Uz7VÅl=§`ýaXû/œ¾^DŒ˜œSy›~Ô¥æT~Õ¬¼Í¹‘l`ˆ¾°À™|æ-­¬!6*fzDBîN”{FKlUj·+Vx>®È¥v«â«B(º4‚5AwÏ”øà J¯ÝÿœV!Tã®öF©Uøžð€ŸoÈX)"’¡Šd€ |\o±ÂþsªLX å¼U s×zк´®®Ê¼¾J$¯ýWÅ2ÿuF‰èBMrN寓â”ÕÁWxÛ’;aÿZá ¼ª……:è’.S{cÒ‹Èk°Ð¶À’Dø7—N¾ð¡­Jí*÷ñ+ñE"µ›N ͪC·&JWñMý,!’Â(Ö€‹Y¹ÂE$ ‚ˆdA(¢hI´·!‹1­o¢-ª¸ØÃµ”h~ªT)£:«~6VqÌC´±59§òZø )Fs ôIZ1/§Ÿ½ ÐY ´°)ŸÜ‰tÒAgDYa|.=«÷×Âr;•Ú-x'>+Ü©Ý\TøDׯ*œÂóže¤Ã£aãA%Œÿ8ÑÙ¼1Ûp æWR“÷´ÈÂB‚ "YŠ ¡˜ÎÅÃɸìo/Ú+÷«¢ÓB³Ê*,£[}%˜_h¡JB"ì:™:ùïâÍBfØäœÊZa¹65§ò;øÌ’³"î&0Ý óuÐ¥ l ³ j_…é&¸™ÃªU¼aØ‚*÷qŸ8µÔu!¤œtm¤„qk5/™ÓWUÅÚ¿á¯9û´æd,œ3ªÕ÷ºÀ~I)"’¡¨ðT’j˜߶ÙžReôÏJ$w«]ê@‹ªÐÑO•_„àK*óÚCðÏùGÇKò*§òÇf8úì^úq8çñ·n$Œœ k†ÃŽsvÛE ÷±V «¤Æ×*ŸöºÚu$5¾øôÕÜÝ—-ð†/<å)"YD$ Bâ gõwCTî·uú:ÌߠЇv°U‹yti¤Š[êgQ1*|bÝ~Nq'ïökÃ-%’Ÿð„ÉdÌÉ‚P(¦WáF äqÚ¶ˆ»ðã^U zhU-uò_yox¥*q&Ø~L…e¬Tié ,¹SÙ²Ì+A× l>€„Þi4ÿpËJµO9õ Qsûz*Aܵ1´¯ v†ÔÏ.ÜHšt·v}|¹Èn«1¢¡33@XA¿iÉ‚ <ŠN.j2NÀ]õ#ø¸HH„mGUþø•Rb¹[=hT:×QÅj…CU óºC¢Þ+PävNeÓ; ë¤„²¶cΉԌ¢íÚ^À]H|'g¶Yˆrk4P·Bê¢õ*ª÷@…ý}R…P¬ÛGóÉF‹Ê=Õ¾ï®ÉØ)"’¡ÓÙUýý#ŸÅ½¢ÊìµPÌ%u“ÿùCýòªLyªyÁ©KÀ`+'&57s*[/ƒi&ØÌÃÇW›¼›Äg}RüqâÌœ ÷( ¹€Žz謧Jyø7!u†lLœZÌcý?*Æ8,2Âæp%’;‹HÉ‚PØÑi }R<òÆ|<',¾Ù¥Š ´­¡<Ì•+©þI•¡ÒíÖ'‰æ‹à$äVNåÄ šj ™w“øt#U›Ö“`^}aYs—Óªôw]ôÐF¯2p§€íÅs挕µûaG°Z:¿³)i’i{w5v˜‹î ß‚ "Y ;MÕrÔ'ãTú·‚@œ 6©‚ø ètO&•ÅÀÑ$±¼ø õ˜>?’^Nåm}á×`9”Å&@Â0°Ý’w“øî¬—8Œly¯5õ ³ ú½àä>ÖÍtÐYyŒñ»g©; °ß a}"[ \çsF•®šƒZ¦zO$‚ ˆH„ÂIçl. òرIe:à$–;¿¤2ˆ6£¼Ì$ýŸßŽ%9§rïj°þG°3i2˜ÞÏšÂÏëI|92YOºwA7ÖØÀŒ@Xq,ÿæ>öÐÀIÞâ'õêÿd¢¬ÿgï¾Ã¤,Ï=ަleéÒDì ±÷±'Fc‹Æ&ŽQñ¨Q…x$j4zÔ(Qc‰cAÑÄ^°c¯+H_¶N9<³ eYv—ç{]ϵ3ï̼ó¼Ï̼û›{îûþñXAÎ4~Ÿè•ÀèoØpÍrEr$Ò´$ãD"M/’Ƕ–¾§Ó1 ¡+öÀð!:áPÜixª ž7mfÇ01ϹŸ’¹*Ä Š.¡ôIk/ÛþꇡrAß ;{7B±^bmŠž$uI8öìUœûaóÈ›&9³˜§Ê™VÁeZò‡9þPÇUt­ä jFÕ· c _.‡vŽçÏH$ŠäH¤•Ò³ˆ¾eTæxº²`žÀéX¿0N/lËb\†‰øTHÏìßy£+—êN¥vùÏHîDé뤱ô»j(â#ñ)^óm„b½ä/(zÄNá˜3ƒÈžÖbeS*D‰¯)åÓ6LlÃe%ìRè´ñD–ÓkY~§×†m­°MÚÓ³©ÌÒ·‚ž%ñ<‰D‘‰´B†¢ÈãçQ»*à|(D•÷¢Ì Qçiè“0FÈþ‡PØs%Ï9;žšÍÈÞM¢-Ŧä~]–n?™‘¡®¡ˆ¯±Y®b½.¤ï'ýg´%w7õ›‘¿’¿E&BÁà?ʘQÁ˜2N* ÅxÓò!:|PuˆïQ¢ÇæZýǨ6ÇøB4yHŒ&G"Q$G"­‘†ÖoMá²×옃{q4z`;!§ù5”a?Ü€©xbÛ•t†ÊÏ¢öj#?›Ôþ”N$5t)vR(â#ñ%z5Þü–§X/9”¢‰$÷Çl2‡‘9+Á-&‰mS\X«åL­à†Ò`{]–àµ,Õ±]=*9º†{3!ïxct¡ËEL¹ˆDš–X¸‰4% Z¿™»Š/F/ÆyBôx/ Šÿ¶(Œs…¨ó#ôdnÊ/Ù;¨yšâQ¤úSò™¨†ùKpœ+¨ˆo™ŠõÚ„Ç%G‚Üdjz íö ºQ앦ëBEwU Ý=’áóØï¬†Vp:Q’ ÑåH$Ò4ßå#‘È f— *’L¬æóú¸ßâs܈ýÑCp­Ðs¹+ŽÂ=Áü8NÃzM4·üTj„q-é_RöÉí–ìñ]Ä·,Åz‰í(zä/Ã1d‡‘Øty½$§óx¡èîž2Ž* yRŽkëRMçJö¯æÆú(¿û©eb%)vé×#‰"9iE né­ßšŠ¡mÜÉ胾8 O =qûc$>(Œ‘…mÅ+rR¹c\³ ¹7H¬Gé3]èŒkÔ"¾¥-ÖK“º¢gœóoP¿M!‡y†"‹Ñ?ÅÈ>hÆÈ’°-…§³œUKßùô™ÏÉ5ŒÍ4‹zÁæLCÊÅàNq-"‘(’#‘VÄÐ(’—·0» Q冖r3…hòiBtyšm>JèݼB´ò[ÔlGýˆpê,:—ÒçHl°øÇ5Rߥ¿¯%±¡ 7 ¶êRù|þ[ã[$6 è9R熹fGP¿ù·VÌÚtI„èð=e!Züxyˆ¯—dfž;ê9´Pt·k#êx+æ ,‹HºZ\‹H¤©ˆ9É‘È f6,ef–ççÇõXffâÎÂHaG ŒL6ÅO #‡ BóÃx]#:­ÕRÙÑ”ÜJrÊ^¥î 2×-â‰Á‰/ÑËÅ#ÂÅ«GRü€t]]Cñ^‚䉤/G9ùIdŽ$ÿtã¾ lž †CÓl“úvÈå­ÜCç²Í×y±ñüfÖ÷½uÊ‚_$Y±ÄHr$²‚ihýöø<²1Õ²qÈ )g )}„±A“ÚNèñ*úý•Ò[HL¢‘~«Î=Mu?2£‚-¾–’Ñ$z,âþ…">¡ˆo©ÃW¨¬Dîƒ$$ ÇsŒ|>¯¶¶ÖüãðÜéѤ¯ sÊ¢¾_# äN$&} ›ÜÉ«mBgŠíRaÍÇfBêDŸù!•â¬ÚZrã¼åó<^hB²Wìr‰4 1’‰¬`þ<'®Å c’PìWЇ æuÊøøPŠPtTP×ÙWÈ>Jf Ù—,»Š›KÝÑd¦øzRC(}“ºÈÞ÷Ÿw¯îÓPÄ·¤)¾§XïÈ#tã7ª­­uàóh9é7I¬Fþ²'»o95Eb[’CHîIb«°þøÉ|2?D‹ËP߆+šÑ38¨+{væŸÅõˆD¢HŽDZ0eIúW„ €11¹i¨Â…¡šäf¤‡‘Ú™Ô¶aŸK~&Ù'ÈÕ秇(qn,ùñ俊/} bÂÜv±NYh÷^Ì€‰D¢HŽDZ "cæ®P³ÈŠ"ÿõ·‡!Ij+RIïIjGR»†áâ <3ã ¹Ì ÏÜ‹ToAñéã]¡8q˜’Ì­ŠkŸS’¤Øß•˜"UË'Iê¤:ýëYœ)¸õ¥3ì·'wƒßfûíúæ•èNòp’ƒI "ÑåÛ‚=÷ùGƒÏWÐGZ9¡€ïç=BÊÅ{SâšD"Q$G"-T$?S-Z‡4ÉN£î’n‘° Òœì-•>LIê0%é¼âìçJ²Ÿ)ÎÍWœ/SR·¦¢º¼„¶ #ß U+°1yÚdɹFE=ó“ÓTågʽ‰ä¿+r£QLb·BŠÁ$6>þ¤BŠñaˆý[Î,ˆäÎ\Er$Er$Ò’¨H²SE0ˆ"¹’ŸCæ>2÷I)Õ3ñ+=ò ùÅ ¬Q =DNij“)u‰Îê’ÔúP]b=µ‰*µÊåh“É)Ê'µÍvÕÆÿ©ÊR•#—=ÄÖ¤ÿAr‚¸n *tŸÈmàòïÅר•‹älžÚS‘¢2¶D"Q$G"-…m)NðLe°£Ž´^6sMò¿õy¾0E­©ê’YµÉêRkªMõR— .™”וÜGäÞ ±ÖCµ`!M6AM2©$W§M¦XqžŠ,m Vb~2Ü'¨î‰!JœÒ)–´]]¤Å3³>ØTïÜøÇô¸&‘HÉ‘H ¡¡õÛèEnÕt¶­ “—5Á3¼nÈFF0èH.ä2÷½™“ë6(]”-H.´8®M«-Ê+Ê'Td)É%”g)ÏæU'^0ßË䟈/À*ÌèA$íEr$Er$Ò‚X¿¿àÒö\šhyóOÞr×>ß.ß$ϓŽóIäx»˜%/.ýN ’tO³W7' Â:ܨ>Á¬4éB¾rY.¡,¿ƒ2«MR™¢¾¹¼¿j;´Ü÷̘˜³= ·²~y<ßF"+ìa\‚HdÀ-ø&.Eke³ZÚ瘓äÍ’¥|o¤Q‚rÖOsÛ\N™ÏÐE¸2fÌI3½ˆªT8—äè\O§úp9²ŠÑÇÄeˆDV$1’‰¬>¨a× ÎÁe_·À8¢¥CY±„4‹çäñ\nGÙy/ýÀ™vSJö¡t_ж՟ؾŽ+fQ‘gB’§Ï‘I6÷ ¹ù‡Tš¦Üo”;Iq¾ƒâ õ^7ßejÜ‹lk\ö8õ…8k-.]‡bŸäHd…#É‘È  !yhû¸­”R;ºEBÊ;®X‡ü-ÕULñÚ]E—OXm"m/¡h{òud^°Of¾k ylŠÓ,p/¯ áâü,r/„ë‰íI]Bz¢\ú•©¶¦'~nž³å|©Èæ:¸K‘#ã©}`hç¹&ZSG"+ŒIŽDVãçR—g‡6tJÅ­‰Í\ ½ÍñŽ7¿PÈ¡%{…ˆqÉžß¶®Î}MíÃÔŽ¡í6Žs†“¾IJ`TQÞ•Euò™’ÒÌ×¢oèGbrÿK~‰!$÷&чÄoä“¿1ßU¹Ç”åæ)Êï¡>q3ù™x ¾X­”NEìОºãgÆõˆD¢HŽDZ•9ž­äGmÙ³wΊkÒX¸›ÅsŽ–M¯Iɾ”ìMñÎB9_Ì›AטêÛÉ};d—QãoŽ–“µ«azÙ6ÜP¾}^§b?‡Ì¨vÅç9%ù´{Ýàû«6ŸäH„JêÏüáùfÏ ÷MDâG ÝPº\d‚Ù$÷#ý:‰Ý ·?„°.öùžÏ$w;Ùƒƒ`Î $w5ùOÑä1AxÍ õ0É_¢g|ÿ¬dº³MÛpNy"v̉D¢HŽDZ2Õ¹ ”“B_¤©IP´%çÓùeºN¥Ýõ” †õ/0o8ßôeúÚÌ=…ºñÁðc1Lõ’§\!)å§FI¯v)½—H¯á´/>wöô2 ×øoù¥œ,R_vP)ùÏ—`þŸ“½4\L]å?:Täî .òÏ’Xƒôã¤. §öoE“GùñdO!³6™¾d‡‡H¶b’CI]OÑTÒ/“<ŸÄ–Z´Å^ eHg’‰ «£y$Er$ÒÒÛà¾S.šF—S¼mo ýãet~…ŠßQ´ù*jîgÎ1LëÁŒ˜)™·–úyÆ9ß׉u³‘Aù³å¹ìÓ·5·§zuÎu”]¼àéãIö ÑÚú‘KþD¹‘á1‰¾$ÿÏÛóSB Eî gõÿ&ý/ãP‰AØxÉŸ/ÿ¹KÉì@}²Ç»U$¶"õ;Ò¯0~5n(c¿"Ê£`n \ö­ß"‘&!þ‰¬`ÆDòmƒ@6פ±Iõ¦x(Å{S´;‰Ò†[ª¤Ö%ûn µR÷ÏЭȴêoº;i*»Î`ßYÙ!·‰Js óc/¿rïLÑEárÝéXš9Ô„Ž©ûC”8÷7|W%eÈžKn<©Û =•Ÿ&û,ù=IœDþ¤e8ÊiänÆÍdKCÊGr_6,g:ö(æ¸âp8ÿÊðp=£3LŠaÎF'Ø£c¸üHÉ‘HÉ‘HkàãÚÐnÃÒ`SýLe\“åW íXÆCIoºÐm¹àßQ7šº‡É¾~4ùÅ$YN×+épœ©xªí‡vŸ·žÕr˜æs'ÙËÞüöcŠÎ B9û8Ù,ýsæþAòq{:/¤F|ù'COåÔŸCžrrO²p$ÎÁìå8ðòcÈŽ 4¶L±wš¡El“bp:ŒkðV6ˆåÑžËæYvhì¨ß« íß"‘HÉ‘H«`ôœ ’‡¶‹"yYIt¢xÏà]4˜d§…´áê+ãÑ䦯 I”ôeõ»(Ù8D¤§ 3nÞ-&`{›xÄ_}eêwDõ¦¤… õ§.ûsgO%ýZhù–»1¤E|/…žÊùI]Âêù ç?£qÖ!ײa\TK—DËCÓ L³i*Œ3K˜™gl!Êüh&\,5CcW‹H$ŠäH¤52v.ú1´=g×c‰OP›.ˆíè[ukÙh«“( IDATC¤¸öaêŸAÝ •èt<‘®ÑYû_BíD¼ã!ïxèûZte8Õæ®¡te»P¾åkRÖ‹²5Ãõb!maú™|t35ßQúù·BŸääoH]IfÀâUlîOäŸ&9š|/’§…ÜæÜu7´ŽéyFÕ…QŒÓ!ʼwë%9´(Œ¬Ynˆ2¿CÌK+’ÇÆþÈ‘HÉ‘HkâéJ*sô-£gŸ×Ç5ù^)ZrŠ‹÷Â8Õ{!ÙWGæÉ Šë"¹IHu¦ÇŸ©Ø/\Ÿ}#ÓN%÷»³¢á[ÀåkR¾å»P–£äD'/þ¹VC¯Ëèw“ïåƒë˜öìBß .$yXH»HîÒ0G~"©_ÓþäST^KbP(Ƴ‚[ëðD&ŒÓk‚HÞ»(ˆæÓìR— ¹Ë£ Qæe–.U{¢g }+¨Ìòô츑HÉ‘H+¢6Ïø¹ìß!´‚»)þdúo’=)Þ«1ºS4›FÝ#…4ŠÇBZE“R¾«ßNz ²³ùêXæÝ÷(¥Ë~ìx×⎒|–êϨšLõª§R5%ŒêÉdß~ ëÒ1†¦Ù«ˆÞIN*£*Ïc…ó#>Å )D‘ÇϤ6.K$Er$ÒÚ]ÉCÛ­â"9Izë[\¼7éÍ-h¹›'óÚ‚4ŠÌ˾ߵyE“H³Úùt:;ØRW?ˇR?å?ï»ö¬õ[æÏ#;e®[‡ÚT}œÔL%·˜ŸŠñ%&ïK›µXÿxÖ=†ŽýØþ:¶„òû×S9±Ðîtr—,f­{P²/2Tÿù³IÝQè~ñxhõ–½ ÜÞÌÉso}Éj¶N-ˆ2ož íäö+ Ù ¯gy¸e~9»rÞÍ„ç#Ç®‘HÉ‘HkdL! : %‰]^UH´Qââ¡!jœìºà¶|ÕBEwû|%O¶hMV¿ƒ²BôwÆÿðÍä¿GH¶Û–5‡…û½0€¹/¸'eï…Ë5Ç’ûdéæ02¯Ã°ælp"Ýveƒ_…ñõ›ÁPï³³©ý ±h¥G…Ó|íßÉ}¶ev'u>ɳCOåÄÈú-7%9¼” ã<ôL²WzAñß©0Î-aZžG íå˱½ŠP’d@¡HuLÉ‘HÉ‘Hkäóz&V‡¼ä]*?¯uoj½).Ù›ôÎÁà®ì¤-ÚêÿÕh­‹—Ÿ¶?¦ûM¤:ùŒ/§j) ÉR6¾%Dš'ÿ~@†¢¨ {¹.‡¬cÒ]atØ$äµ§ÛftCuåý½ƒ°þö);.\¬¾a¡íß×Sù ²Ç¿•öÉqc]¥Ø½Pø74Ò2Ž*£ÏdD™?lÝ!æ]:P‘bb%Ÿ×Æóh$Ò”DǽH¤ ]ˆ&nî{Åõ§b$>£bdØ–HQÿ4óÏbV_fö¡òdêÆ6œ,§û ô¼7äÊøtóE dBšE›™ÿŸœ¿Ð¾¶'}(j¨;³ñæ8ûm^<‰{zò‰Ìz—2lº)~Bÿé9˜Dá´^¤f¼žmôöÐ+šuÊ‚øÌzžŸ#‰4u (.A$Òtdó<^ÈEÞ«…¤\t*çà-¸åPž=“Ž¯ÒæBж ½‹ëƆԉ™}B*Åü³BjEsÈÅk³Þ“¬~Ihd1ý*æÞsÇ df¡E…Nug¡ª ޤŠÜY!=áÝù𦰹ó9!Rûà‚‚½"?‘±áªÚ>¹¤”'+X»ÿ›È )gÕ„”Œ>óBŠÆØLÈ]Þ.Å…¥¼Zá™k¹åtÞ•Nm[Æg¯¡õÛã³Â¹#‰4-1’‰41£çrPGölǧ7¿ù¥’l»&C6fÏ ÙªWØÖÀêcøä3jGSÿXèNÑ’èü z^Iª-õŸ1ùhæ_Â/2ÍEç‘èNîi²w6Ýåî$y‰]ø¨˜³q¸í[{K@ N­ ‘×[ÊØ)ÅëaÛÍuÍÿÅ”ãÚº0Êôd^»OÂN}Ø©G $›ã•yôƼÌKï‡mÍÁ±õ[$Er$²*1fNÈíß–²$ÕÍàŸó¼QÅý×Ñãê²<ùcßeì{Ll¡¶Úé.¬yí÷×gÝÍÔÉÎZŠt=lŠ/F~;Í"±E'#GÝišöwý<ÙÓH¿DÍѼõU[‘šõý{KÂø ›Ur]ñç2öIs|u° n Tåy žê}‚Íz3xë0vÞ„m7ãÜC™9'Þ¢yìË|Ö ú˜—%éß‘\>¶~‹D¢HŽDV¦e˜0ŸíÚ¡ô3Ø‹Î_QÚ_~‘ Ss œÏ©%\\Ê/‹ƒ`>¢Š[þ瓯¸~tÅiv؈=· QæÍ×f¯mÂy<“¾æñ¯á‹è¯fqûa$lµ·dÏ-ÙqcvíÆÅ?gúƽZˆ4¿»,4¤ZŒ™±RÞU‘H$ŠäHdåòèÜ‚HnÇ_/ÙcŠSìÐ't¡¼›÷$±±Ø¤™…Hñû!Z<§zYÌ«HÏ˃ÃtÝ$&IåÓ+èùæ¿Äæàÿâ·7ðè–þ³šo)©íðïcY,É *§ý ÷+lÌ2ÿ!æþ‰Ç1¦Œ "yããx}ùF”[µBoâÑn-c›¯VpF ×Õµ8ÓŽ%þ~”gÂa\ríÛ„(ó€ÍC¤¹w7ûQù<¯ó£¯ðü»!J½D"¹ÐúíÑ™ñ<‰D‘‰¬¢"9›g§ *’T.BìÝ9D‰oÄëSQ²à¶ªºÐ}büûŒy—÷¾^õÖ±¨kþ™vCÂõ™£øì²+ògê­üñ8r(“6bõ øìÌ{ Å›ÐîW´=œd!™=û5sÿÌÜÈL^pßÓªyóŸ¬6}Xc`ãä&—§3ô«äªÒ`}m{…_¶~÷‹9ó¹ï™0`Ã^¡cÆ€-B÷Œ-Ö ã샩¬æñ×û ã^ yÐßGEŠÚ‡sCÉ‘HÉ‘È*ÉÌl°©Þ¹‚íøÇì°½¼8tŸ²qÆë®öíÇMü"D‰Ç¾Ò)jêWÝ5ìðcz]Oz52ß0õfß·‚Ÿ4?¤)­aÝcøôiºcÖ}!ÂܨÏUL›CJEÙ® ¶W?ÅÜë˜ÿ÷`{ø]>Ìqm5;ý…Îk¼¾ïcnž£«ƒÉõe Ióf[N¨æ¾UëÍùÞÔ0þp?¥Åìºiˆ0Ø"tËØo‡0à£/B”yÌË¡{FU!%h@'Š“<3;ØQG"‘(’#‘U’Ñs‚H>bÖkDñÎë„´Š‹é*žø t¡û.ŸÍŽë–jÇWÑ騂NÔc¨ÿ² žügIvIòUžkŸ§]¡ÛŚ㩟Býdꦙ®×M3__BÕ“^‹vÇÓîRݶÜ\æÝR*êÞþá}\XËË%9œÞXÀ·(î«ç¹ .BùÞrFÕqJMÒ«5u!?yÜ«áú«Á¼çVôïz3Ÿ¼oužy;ˆæí ?D—½H$ŠäHd•fÌ\.Ý€7äÀuQìq_šDñ˜wxiJó´Ì]YTìÂZ·RÜ›\ŸŸÁ7×iš<Ør\V8mÏ2•ç3ÿUV¿‹’MÂø>òYrÓð E•”ÖÓ&I‡RºtämÈ¿ÏF©Û…oJuo0çz*o'W¹äs›çÒIl?†×öaÓ£yé’»>_æ:Ÿ‹¹¼‚±{š#«CjÆ*ÌgßpÓØ0RÉàö7¤ š·Z/çþýp'>‹.{‘HÉ‘È*ΛÕ\òç0ýyþ+ÅÄèqäÛ$JèqÝÎ@’ª L:‚Ú÷›pg¥é•àå<)ôÎÕëºè¸ íúQ¶>Åk‘ìN®#um¨M‘è¡eAUaLLJxµÝÃ>“yJ_cÒ™Ì{lÙçû—:ö½û°Ó¶¼Ôk”ÇŸêx<Ãm塨ï_m¸¼–ókBÑß*N6 ùž—ón£S[öÞŠÿH—]¹äÞ¬Œë‰D‘‰¬ÂäqÝŽ,gyü¸Š¿Fü”nJïÛ)ëG>Ã×óÕ…ár“Ñ'Á©ð¢ýº~Ao®t)íÇaw-þñ™,Ó§1ýfU2·žùIêKƒK^6ôúœY=Øvuʶ úo<{-Ï\Må´¥Ÿs7$X}3ôIòiý,ñ~Ž+9¯”³K8³Ð*îðêÐF.òoæTòã™tyœÏj¹îóVÛ $‰"9‰,9Ÿeéÿ5ÏvgßrnZ_|ÿI‚$]O¥ÇÅ$K©ýÉG0ÿÅ•0—iJñ×,/,ôêô¿€ËüyTNaÖdfOaÎÔð·áú¼/È.&'ùÝöáob.ìIÿ³Xg7œÃ®§1áfž¼‚™“–nÞ%LJbÃ>¯2¢”Ÿ6á·° Ϋat}ˆ*÷K1¡‚sj¸²66^š›6dßÕ˜^OÿׂPŽD"Q$G"|XÏ>Óx¢;GUðU–³g­ÚkRÜ‹5GѶ?ò|ó|>ŒÜü•0™%9(I%Î\( ºÆ¶ì8Œ\–[ðYcä3äylkíÄòÆû°ÓÉìp¯ÝÉ?GðÕïuÚ˜µ‘©dÓÛX­ˆ¥ùg翘e‹J®(åøâðwhš£ªƒåõ*Ì%ëpTª²ìóÆ_’"‘fC2.A$Òóù:Oÿ4oVphÑ*û>?µg­E]Ž&òb´ ŽD¢HŽD"ßϸê©#;qX›UëøSé}½ÿJªsþÁ»}™;z%Nêø}|šgäBQäþÐec¦¿Ãç¯Ø9|õ6wÉeëñì5ÔW³É¾üú9Nü öV}%ØèHäyãZFÖ†|侩Í]YŒÎÐwÿ¨§C‚¿–sW9«Ô{ý°îŒ\/|Öñã¢qH$Er$Y<Ïé3ƒä¹y5•­ÇÝv½IǃÉÎ }?9€Ìô•8©Î¸¨v==³Àyzá4‹û&SÓ4ó™9‰ûÍ%}1Õ³CÞòqc8ýU6?8D¶a“_PTÁäqÌ|'ÌýôÂ}èÛ9µ&Ó¯ŠÙ4µò×ù“»U2¼0¯SJ\|^Òæë´¾÷ûzå<Ôò£¾døÇñ<‰D‘‰D–š<Žý†«è’â‰n¬‘jÇ–LðÛxñX†uc‹‹ù`{¾¾4Ó5 ®L‡þ?ÊòV¡Xoe¥Yü™Zžÿ?žýcAàþN¼ŽüwºG¼• fi!jÛÈâÒZ¶¯´ÿuU†o™óâUüö ð^i ¬QÂ[Ð¥ˆ¿áØ÷b›ÇH$ŠäH$²\ÚágÓy¾–5Ò<Òö-üSÛ«ãdÄŠ’\;;GÕ«Íh’û'Ù#ÉŒ<.EÞè@¤xþÊ•“fñC¼x3•U¤V#SÅÛ‹ÈY¹°&ÛiöoF?Q¼šõè©õ®}ˆ¢#ŽaüeôêÒ²ßóíÓ<Ò/åççð³·ÉF…‰D‘‰D–ªj†“==,¨'æ¹á;jæÃB/ºϤ]¯æ7÷’”¬Ú&ô^›²‹¾ï uLÌ«êÓ›_eè˜ lv¾@Ç î:›Û~K»ò–ó¾O%¸svh\ôözƒ9‘H$ŠäH$Ò˜4ØWOÏ.°¯n åz…èñá›1¿Žf¿»˜ÞÅz&8»E>%ò]æÓÇx÷Š+xEó›ÿ&¿ ]Nö*ÊÙo§¢Ég—гùý;˜>‡ý~Ç W3¿†Ãû‡¨òN›4ÿ÷}´›ŽD¢HŽD"MHƒ}uU>ØW_Ò±ùε(ÉÅýyò(zw`Âlyÿ÷J3^à)*pOŽ.Â.ù±aÔU²ÑAôØ<æ*¡ß/Ùâ×áú[7†¿;ŸHb1§ùf¸§žŠ#šoßµÿ{„-ObÂôîÆ“—sñQ5ã¶ÊÑn:‰"9‰41-Á¾zýÎ<{ Ãw)†§ÙéÏ|0£/ìö MÓ3ó›øÜ©Î¬ Ç|hÛ7ß$ž>g§Ó¹ä®p}ø!<;’õ{6¿¹F»éH$ŠäH$²’hÎöÕ¿ÜŠWg›Õ™4›ÝFqÎÔçšù™ðEá7ò˳Á‚z±ßTF2ã=:oÈv§7ý|Ë»²ËÿpÂvû=mz0íu:„·o%—ᙂ‰ÈN'.~_Ÿæ¸¼6ûËšõ…ú çŒb·3˜ô5۬ϫ×ò˽šÏ£Ýt$Er$YÉ47ûê.åxlùŽ3S*ÉŠ–0ÿ`x 14Í4cZÖ‹ûúÇl}2—ǯöfÄ1 ÞšŸÿoˆ87Ñn:‰"9‰´ 쫟ï±À¾úÀiÿi·,¼ × ¶Ò_Uò‹š©­ôPœæG?Ix.Ê0}9¾I•Òw?ŽºëÄt–¹Ó˜ó U•ÔÕ“K’,¥¸#k¶¡ëû¼Þ‘u6aõ-ØhŸ¿Á³×3áöЭbiÙḠ’§¼¼d÷Ÿžç¢Zþ·Ô Ÿ¤ü뱌ºö%¨ºŽ“¯eôKÜ|:?êœúNücÈa^^¢Ýt$Er$i4ØW?Û}}uCOåe¡] ×îl¥áÁ÷9öÁfj+½„œ~—vϺúâœS®^ÎPû ð[jç1s ³&‡¿³§2k 3'‡¿s¾ [¿èýä ýËsè´;ÏÇг?½Ž}G¡üÌŸør s’Ûõ ï¾¡oò‹£–ü˜®®ue§z§l•sö¹ìî–ù:™Àf'pÓi¡ûÅ]g³÷vœtM莱,D»éH$ŠäH$Ò‚i°¯~¢{°¯þ*ËÙ³–~?;õâöƒ­ôü:†kæ¶ÒK@¯.œsp¸üð}yê—cgkmKÿaä²\3€É/5Î$gNæássý öÒëîÊ.¿ 㣧‚YÈé‹b»£H¦Ãýæ~¹äÏ_ÏèûrNÙŠsá¯O4nªBS2}ûý.Ž\q<‡÷gçM8ü÷¡ßòÒí¦#‘U‡ØÝ"i¥,}uQ’‹ûóäQA Oø‚-ohù®8–Š2îy†Ç^[Ž•rØ-$S¬ŽŸõH$Er$Y*q¥PÈ÷3¼Šî¸S ·­ÕÌæÜèÅz‹¢©Ó.zlÂA×rÑçüô:zöcÞ׌»„ ×á†}ywì ê÷cƧtîÓè|4ß"¾Ò$¿\=¤Tܽ [¶å«:Îþ„5ŸçÌù².~¶#‘HÉ‘H¤Èà.l…xå8áÎÂm+›R¬·(š"í"UÌ–‡ð›'9û-vù¥íøè)FýŒóÖäás˜9ù?›ÏñüáòŽŸ<ÜÜŠøÚ¸}º×oÀºe|TÍ ï‡Èñe“c§ŠH$²t¤ãD"‘¥a|aôÅ0ŠC ã ü㬜VÂ+¬XoQ4¤]ìñ[NϬ)ÌšÌÌ)Ìž®ÏœþÎù‚lý’í·ÓZAØîp m»…m5s™p;Ïü‰/—ÐñÅQìuႾ崨þ. E|íŠø~zqÓ¿æ=Š9µ'¬ºTÚ¸˜Â}Óc—ŠH$Er$ibþŸ½;«²Îÿ?þ<‡E@E\PQAC³!$•1F32ǰœÊšqoܳ©,—lä§-fe5–K:ã’Ni5–Ô×2r5¨Ü\PT@DÖ³üþ¸‰ÑÒ…êëq]÷uàpÎ}nÞ<¼¸}>w:0 ø ð0èW¹¥ 0Î0;ê¶ku²Þ¯ù"'Á¨uFK„OÀ…g³!5/ Nç@y)ØÀÅÜZÒ9Õ ?·lxÖÚýÎGR!~©ËŠªwl…9ƾ !ƾ/çÕø·?uÜú¿I|_&9¦ì7»Ã³~0¢54¨ü?ѯòp¬U*DD!YDêÜ!àYà…Ê ü$ÆYæU½ËoË€Ú¼âµC&ë]LE©1Yî»AS?ã,pS¿ÊýÀ»³qŸG3ðjgl°ØËÍà Øíp0þoºÑ[|5–!Ù7´vÆ¿rß¼ÑÆ$¾ ‰µÛæÚ¦·‡!-Àl›ÝXÆm~–V©‘š¥žd©…Àë€?Ææt -ðZe~ #ÿÕ‡MÖûÕSàîž·Bó0h}7´}ÜC ¤9ä™ 8±ÌÂñ£pdä|§²ðqÊá—ÿBÎQ8a·`øÝ‡ñ"4lyÇåf\9¦¢öÎé;bŸ–q‡¿­«"R“ÊÕÀ{@$0 £ãŒ‰~ïc´b¤×Ðë9t²ÞÅBh—áþ5¿üšÝù 7ÝØŽWÞæí5.öqŽ£_·¦‰&ð¿zÏ¿ŸaOAê øï8}°zÇ×k‚Ñ ž½«öƼr_ìËÆ$¾l­™³ùN&ø½7L÷3V© òï‹¥Gá­CZ¥BD’EädÇXã_+_<<ŒF`Lî{càÕpød½Ÿë;~3 Šó 'NdÀñ´Ê`œågª_¹›­m/#,wºB‡ ñìœo¼Î¥´ê·D½Ì‰+jµ 59‰ÏÍ #[Ã3~Æ*`,ãö×ðäˆV©…d¹N|ƒ±Îò Œ‹“ü ¸§rKÂhÅøc©¹ê¨³Éz?i½§“òÖÞ GkvÿGà£Áà=§CÀ£Ðm8tû>ƒ¯¹˜ßL“ v¿%µ^Ž«Ä×Ä&¶…?·ƒÖ®Æ}ûJàõlX} Jmú·$"Ž£ždq˜,Œ‰}~Wô;„`¬‚±¯òk.s_u:YŒ6‹V«PìXPóù\'2à³°äfØýXJàæ(¹†ýü¦óŸãî¡#Œ–ÿ,rHI®ôJ|>®0¿#d÷‚yþF@N:C3Œžãw* ‹ˆB²ˆÜò€—ÀXàŒ+÷½Y¤_¸²ß¯©óÉz}ç€w8‘ Û¢óš§BìX|Ä¿¥Fßò#_ÀcIÐe(˜*—Ž c\Âú‡X8žé°²TgßÍî°ìã ÓüŒuŽ¿Ê‡ÈT¸}7|˜«uŽED!YDn@eÀ߀.À``;Ð x8XùµÛ.ð¼:Ÿ¬wn›Å'£ÁRêØ×?› qÏÃ;~°uå@«îpÿ:è6ÌÎ>ÑxìŽ%=´Ë¹_hcø¨«qéè±mÀÅd,ãÖc7ôOÑ:Ç"¢,"+”Åw= € ðð-°èsÎãët²ž#Û,.™HÏÀÎ×`ÑMðÅÈ?V@ÿ¹Ð¢œÜŸ9ü°~šÄ×ÈݘÄ÷-ã&"×MÜ‘zå¿ÀïNÀÓ«aDUn‰À¿êz²^]´Y\е ’ßç†ÐwôkÜ¿ìuÓÌ[5‰ï7ðâp¯U˸‰ˆB²ˆÈUÛLfS*?Âz‹!¿æ5…Ü`o ì)…=%Pd­Åƒªë6‹KI[¿}š´€òâZ_öí\œ ³»±Ýì·¸C~4 „YÆc´Œ›ˆ($‹ˆÔ“@40ã¬r¿ðàÆÕûþx~×£åFXÞ[š÷–À%p ʯvX—!àäñoÔm›ÅÅ”@Å0u…cj|Ù7WøWà›Ï ÄÝ¡ëžäð¶æk7QH©qÅÀ`‰¼+ÏZºöòf7#¬µq…ß69ÿùV;,3‚óOÛOAúP™Ñ}I&Œ™õu6‡»´ö7®äââ ¼Œà\ fÀ·Áù¸³‡qÛ¡q¼ )µì-9¿Æ{âáD…~~ED!YD¤Ö¨0¶øÂ_ xçèŸ^G7c»·é^éÏ^e€>/àen€ß<½þ éëáp=;›6\= à$˜Z@àØõÆêír~}ªþÐp7®xw!V;쯬˞âÿ©¯Ö"" É""Že²ÊŒíËŸ}ÍÕþn?kpû_«@7cû¹‹˜¶D>NZÀw¡Ó0Y‰mñíõ£/Ù¹„Ž‚ßL1>ß¹ºÏÄÜ}"Ý¿‹În¶ª>៾w¯_y÷¯jY)ùYËJI ´¬ˆˆ($‹ˆÔåvø¾ÄØ~®jÒ™ç‡I7#L†526€çNEs{Ñ 2[vaÒ°9<´{zíô?_Žqê=SŸ§°4ö`Ô¶1 Ï]Ãc%q°i'f÷»Áy/þÏ9æsÏ¢×êäG…d‘kC‘’ŠŒíçªÚªÚ7Jy~×h†ÿvïvœÊÈÿdlÁùm5Òÿ|ŽŸ÷ ·iÖ’oCž`Ó­“)tõ ûéfì}…OŒSc+Sr—0µý^m1ëžç÷ —¨OXDD!YDä*\°ÿùûDLÎ °÷™F¿Î+öáíÜæZzUýÏC¸çÅû„ºw`A§©¼ì7†b'£7äÎSqŒÊx…V?þ‹½Åvž¨<+ü}ê 3‡Í"Ù‘ÛNej0ED’EDj—ý«h¸eg[váÝ®sà_Ó«¾vEýÏ%À[ðŸ _¾VFãþŸÿt>ñ{«ÉìvZï¡AÜ+ìÜ“À×lí(€Œ÷ x„L†/'kÐDD’EDj™¥6Œ†q; |*dü³jµ‹+éûÀÚ@âªú„šöbWœî|˜L`³@ÒØ6ŸcÇ3.}ŒI‹ ûD_Ϫörp"" É""R}‡!~ô™c·@A6äg·§ÿù™£`­¸hÿ³=e?w˜ÌpË=ð»àa|±¢òêyq ÿàåß©L8 7Ýó«ËÁ‰ˆˆB²ˆHÍú*r’àë U€±]ˆÍ E¹PtÎAY”›Áêö¦´}:úÓ³ …¯ñœ’رþ³Ðxî•H]j„äÖ=4V"" É""b)…´õpp'´êÞAм34mž­¡QSpo®NàéclpÔGm¹ÌÉ_Àæ±p6çꎯ¼,®+…dqrƒ¶ƒ!lÝù÷WnU¬`ËûIp*ç p5ƒ»4nJ›éضo;…¾`ûÜ™ ?.‚BÙžIî6Ö¸LõñÝ+…dé6ºLƒ²3p&г 8ŠUÞV~^zl_œøˆÝX¢Â4º=´¼nžÍ# ó,èød¯€ý  øàå[Cð2&üe¬ÒX‰ˆ($‹ˆ8@ó0¸m*Ø­ðïþp*±vj‡ÜÍÆÖ´—–[ß7=&Àá`ß|8s«[Œ³3ìÛpõm""7³J "rœÜ çJ09Áw j( ÿL~$†mÝàÐã>ßáÐ7Â6!úbLfè:Öø8m™ÆKDD!YDĺÍ&]àt&¤G×îkÉ€äðÕÍðã;`-ÖQÐg„ÿZLç?Çïnhrœþ²¿Ôx‰ˆ($‹ˆÔ²sÛ,vŽk©c^·ø ¤O-7Áž— ¢Àè[îùD$AÛ¡Æ™m€ÀqÆí·ËÁnÓ˜‰ˆ($‹ˆÔ"G´Y\JY.|ÿ<|é™Ó 4št‡Û×A»Ш­&쉈($‹ˆ8#Û,.Årö½fœYN›E!`„½bLØ;£ {"" É""µ¬®Ú,.ÅVß…oŸßò{ãVöDD’EDjïpr‚ïÿZ7m—rx¸—€›;œ9¬ {"" É""àtÎVY À£²½âØaMØQHq€¬ F«E—?C‹°úw| } E{ã2ÔÖnàì¥1QH©e'!c±²EøJc¥‹ú$`˜ ï8ØB»13…dH‰†‚LðêÝçÔcr÷†é8ÙøŠqJ÷"»ñ‚ý€ÓQàÔÜÆÛcà–@ÃùFP.Y ÖËœ¸×° 4‹kä¬ÐX‰ˆ($‹ˆ8€[4 Xáx(M¬™ýZ³àì,8; ÷‰àr'¸O2¶Š¯¡d ”mÊ/¾Ÿ¶“{O+[ˆˆT“ÖI¹&7h¹p‚ü5ÏSeë  òºg‘í…F`öüšgC׌3Ï?çì­Gv8²Hã%"¢,"âÍæ€k(Ï„¼èÚ=kM†Sm¡h¢Ñ«lnÏA³ýÐ$\üïmÝg 85‚¼X8««í‰ˆ($‹ˆÔ¶sÛ,rGƒ½Ôq¯m/‚’¥ß ~¥ÿ»\ïƒ&_€ëPÀÚN4d‰ÆKDD!YD¤–9¤Íâ2UÄÙaç gg€å4xZ=î dœüLc&"¢,"RËÝfq9l' x>œ­ì=n;Á¸=²cý7QH©-uÙfq9*V»š´ëY-û&"¢,"â ‡€Ù òÿZ·mcÏYÆÇ¹éZöMDD!YDÄœêï óÎ^ÐÂÇøød;½Å‹ˆ($‹ˆ8@áãòÒÍÿ îaõïø|Æ€“;œ.²và|·ÆLDD!YD¤–•$©`r‚¶+•.êÅ;yh5ÚL1>?úOãÖeœÆLDD!YDÄr£¡,t–sêöXœC›g!øGð_ æ9ŽÏ,à&™ˆˆB²ˆH-³—‘ѕmSë¦íÂ¥%ø¾!ÙÐþUpõ³)°çÈ}ìGÀ8ƒË(™ˆˆB²ˆˆÔUÛEƒpÓÛò#´›eLÔ+Œƒïî…´8µÞïË*õX½Õ‹ˆ($‹ˆ8ˆ#Û.< Ó{¼Z?fwÈo{CÆo¡`3`?ÿ9–/Áö#˜oÒ>…dqDÛEã^pëFJïáÆ}'Ö@j7ø~0œIø•'Û b¹ñ¡&ð‰ˆT›³J "r…~j»h1 :oŠl(Ë2nËAy6”g·GÁ^q;5×=ÐvxFTæÝbÈ]G@ÙÁË?¾ŠUÐ`îÿ&ðÙs4f"" É"" ¥IÐq8€[À…g·BE.æò“8•áTQs¹—r7”7åŽöàNYXúϱÀ±Epl!TäVÿØì9Æ>ç!ƾòy/…d°—Âéõ˜SwâäÚ'× L®Áµ=v—ÖØ\›bumˆÕÅ \}°¹ú`~~Nù˜84ôŹÜFƒœ/(9>›õ*ÏþV,7B²S¨ÆJDD!YDÄ1L¸áÆ`ÚX×A Æv¡,m²Ræ’K¹ëIÊ]‹¨p­ÀâjÆê↭AS|Úuä¶¶¶éÞ'|1Ù~‡•LòXD ±{ehuƒ2ÀZ®ÁQHq OæÐˆi”qÙXÈÂB6a!›ŠÊÏ­ö£ØË+à"YõH†±:…ÉÔžî¡3hHÞÌ¢9OQÀ N²€ Vï& _Øwi°DD’EDjŸ+a4b*`%—þ”“X{µSÄfŠØŒ½hÁ sÍxœ¦Là4p’ù”‘qé]™º€)(Û ˜ˆH5h 8‘+`¦¬œ(bA äó“@6ƒÙG7 X€ÃéD:~lă^—x‡Ÿ ˜ÀöP AQH©]žÌÁ™.XȤèZ}­228Âör3y¼ƒÅMì ÿ¦Œ0|/0ì`[¤QH©]ç¶Yä3;¥yÝ ’Ãör'x +4$‚ö|AG’hÂPÀ©òÝ} Ðì±`ÏÔ ‰ˆ($‹ˆÔG´Y\Š…\ryž=øqœiXÈÁî´cÍ8ƒy¢ñ`ë šˆˆB²ˆHírd›Å¥Ø8ÃI^c7q” X8ÈM¬ ¡i.˜:}Ø?Ó ‰ˆ($‹ˆÔžºj³¸;eäó.¼m|î4¶2E/l8…d‘ÚãÆl8q–¿ÖI›Å¥œdgMÅ›ZÅZöMDD!YD¤öY0®R_¯]g¥€Cæ4²@˾‰ˆ($‹ˆÔºr6VÜù3΄ÕÃ#ô¢È쀯Í'¼4h"" É""µËB"%,œhÄJL¸Õ³wô1€ö“4´{Ђ14…d‘ÚWB4V2q¢ îÌ©'GÕãÁ4“u9-™¨·y…d‘Úg§”"Fc´]L­ã¶‹Æ˜x3?bb)fk°Œá¬}6eì£ðâ> šˆˆB²ˆHí«û¶‹–˜x3Ù˜xðR°óØßø܈qo&jÀDD’ED£nÚ.:`âíÊ3dz/ìÄaç^l„`g=`Œåà¬Ñ„HÜé¢QH©}Žm»ÀÄ{˜Ù‹‰ÇwìÄ`£7v~‹Í€ý¼gX)àï&¼™¬QHqŒsÛ.ðnlÅ•·qf,fzb¢ñU¾B/LlÄL:&†W†ó5Øè†Á@¯>û‹;Í¡åàDDªÉY%¹rFÛE:άÁ‰¾8Ñ÷œ¯Ú±ó#6Ò¶íŸ4É…˜0q0•÷cgv«ql™œ&–&ÜC Æpœ74`"" É""µÏN)e¬¥œ­˜é†™@Ìt­ü¸ &üqÂ'Ÿƒ-¸’KCŠðÄF Ü™Ôì~ÐÔЦò‘ØY„…@îß –Ò„{hH –ˆˆB²ˆˆc¹PL#rh„+(¦ÇðàœèŒ…ö”ЌӘ(Šp¦Œ6”yç†s ,  ØiC …Lç_^Õq™(¥ÐW ’ˆˆB²ˆˆc8á†/ƒéϺ_}œ+ÅäPD…äpŠRNãD1ž”Ó’ŽzpS{øñ«4z€3Á@,'Iå[–òk© ¨ÚÇך±˜€3ìÖ`‰ˆ($‹ˆ8F s`%œ¡”lŠÈ¢ˆlÎrˆ¢s>/æ(6*.ºŸÔ½Æê&S?ÒžÆÑ…ÇhA¿e ½™Ï¬%Åä‘qYÇæŠ͈Ž…\Vi°DD’EDj_sÂèÂTìXÙLN‘X#û=C;™E"sèȺ1‘6ÜI7&ÑIåkÒYÂ~6`£ü¢ûiÉ(L8sŠ ”“£QH©]N¸Ñ›•˜p"ƒWk, ŸËF9{YÇ^ÖÑŒº1‰[Fî¤ wRÌq2ù;,ã Y?{¶™ÖŒàË4`""Õ¤u’ED®@ shBN“IѵþzydÇdVÒ–3‘“¤âA+ByŽìçwÄàÇL•oëM¹7n¢”É¿ÊÉ"" É""rIç¶Yì`4VJöÚñ-KYGwþÉoø`ÃÂMÜG_Й¡˜0Óšqc9`Ó ‰ˆ($‹ˆÔžsÛ,2YP+m—+‡x¾d«ðe3(æƒx†jžˆˆB²ˆˆã8ºÍâr”p‚$æ“Á"ü™… gòˆÑ„=…d‘ÚU—m—ã[VaÅ‚.€&쉈($‹ˆ8€C°áÄwüµNÛ,.æ,9üÀ)Ä|MØQH©} ¢ò¶¾Ê­¼m ˜4d"" É""µí°cåfþL3ÂêÝñ¹âƒw`ÂŽ/MiÏÝ4…d‘Ú•G"{X€ 'BY‰nõêø~ºÂžL\€ÀÊeàDDD!YD¤VeM!™xÒ….Ì©ÇäŠ7˜N;&p€—°a¡#Q4ÄGƒ&"¢,"R»¬”²›Ñرҙ©uÚváE8]YËo8D'^¡mÙËÈa=û‰ÁŒ3]¥AQH©}uÙváD#Ú1;H!”ÿК?b™|F2÷rœõ€´Êåߺ1¶êRÕ""rùœU‘êË$Uµ]¤3½V_¯!ø2‰Ö ÃOÊ9ÎþΖQJÖyÏâKNó#M¸‰öÜÍ ¦ IDATAþ¥A©^¹Žh»0ãJ+ávâèÅ·´cÎx’Ïפó(ÿÁýÌúE@°c#å€&ð‰ˆ\ I¹B?µ]ÜÂ4î` ÅdSB%dS¡Ê[ãóRŽb§â²öëF{Ú2޶<†+­°PÈ1ÖrˆÅœ%ã²öó-«èÍܪ |gu‰j…dGÈ$š|’èÎ:@c.ø8;VÊÈ¡˜,ÊÈÁ‰RÜqÂOšÑ’·;~A*Î` €3¤r„¥ä°+EÕ:¶³ä°Ÿnf]Å™§QH©}VJ9ÌzŽó/ÜñÃö•·ÆÖ˜ÎxÐ'šáF;Üh÷³ð §€Í{¡|/¸ˆ ;V’Ig:'®òÒÒé,çf†ÐŠP –ˆˆB²ˆˆc¹ãA+|hÍ­´¢+­èFKºàLl—´.бO.g(¢ VÜññi·ýïQ:Ó‚é͇ìd ,älÕ§«Ç7\3å$…dG½‰ºÑ•yˆ5¿øš;yà8é#½êö{±a9ÿ±Gí˜Lí¸™{¸“ÜD¿eá<Å7¬ žäs°ZÇÌL@»4X"" É""ŽqsèÃ4ŠÉã©ä’Á1Ò8F:¹dPÆ™jîÑÎ^6³—ÍøÒ‹fp ÷Ñ“Ç ci|À×Ì'÷2&ïµ  7I9E¤²Bƒ%"¢,"RûÚF8S±ae5÷r˜ÄÝÿ!XË`ZÀL'GéÎp‚Æ|F¯pˆ„‹>ÿv&cÂD:ïQJLD¤´N²ˆÈpÆ!¬ÄŒñ,¨ñ€|®\2ø˜¼ÉÍìä,”p+QŒgñonf`:ï9nxÑرó ‹4`"" É""µï.æÐ’.ä’ÉWD;ä5ó9ÈçLáunâß¼D)ÜD#ù‚É$Ñ¡UKÇ1Wñ#±œ$S&"¢,"R»Îm³ØÀh,”:ôõÏ’Ëžç5üøÓ8C>tg(ëèÎÌ8ÂD’X¢¹êI©Ö›æÿÚ,¶ój­¶Y\JgØÎk$°`FчD±/n¦)Èg{ùLƒ&"rt&YD¤ê¢ÍâR,”±‹wIàm‚ g‘íØ4h"" É""µ§®Û,.%™”SLZPA±–}QH©}]‚'øk¶Y\L)œâ&à4´ì›ˆˆB²ˆˆcØ+·úÈ /šàhŽ?nxiÀDD’EDjW&°a¥¦aõîø‚ƒ ”qW<fŒMDD!YD¤v&‘x`ƉX‰3nõ⸜hÀ팧SHf9¡LĤ·y…d‘Ú¶•hrɤ%]èÇœ:=WÓ›gù3?2ˆ¥4§ÿÇâ˜MûhF':sŸMDD!YD¤vY(åFcÃJ8Së¤í¢!-éÇ‹¾dr€X:rÁŒ!74h"" É""µo+Ñ#‰ß³Ž–Ð’€ >Ά•"rªBóéÊýS.>¶Àx’hMwÀh™ØÅ"þËBÎ’{EÇ·›¥täÚÐCƒ%"¢,"âJIc={øMðËö4Á¯r󭺯>xÒOÚá¿ØÏk-Œ®âÖtç 9ìäMv³”rÎ\Õñ•QJ1PŽ«KDD!YDıJ) ”Ž“vÁ¯›qÁ“6çiO|ñÂ&´§S»Ú÷…—ÖL …UX)«‘ãêÊX¬ÀqvkDD’EDêEYd±ý_·2V§²æÝ{͆øÐ‘(lXÈ`•AD¤´º…ˆÈu*€Q˜qf?1œ%GQH¹±™0Ó±¤³LQH‘öÜMnâ4?’Å—*ˆˆˆB²ˆˆtcé,ÇŽMQH¹¶tïÞý‚_)MØQH¹v߀ÍfžyævîÜYußÎ;yæ™g0›¯üíYöDD’ED®IíÚµ#66–×^{ WWW-ZÄ¢E‹puuåµ×^#66–víÚU{¿š°'"¢,"rM2d)))Üu×]äææ2hÐ üqüq Dnn.wÝu))) 2¤ZûÖ„=…d‘kJ£FøÛßþÆ?ÿùOš7oΦM› dÓ¦MU9÷¾æÍ›óÏþ“¿ýío4jÔè²^CöDD’ED®aaa$''óØcQRRRuÖøøñã¿xìñãÇ«Î.—””ðØc‘œœLXXد¾†&쉈($‹ˆ\œœœxþù牧S§N¤¤¤Ê¢E‹°Ûí}žÝngÑ¢E„††’’’B§NˆçùçŸÇÉÉé‚ÏÑ„=…d‘z¯C‡ÄÅÅñ /`6›yýõ×éÙ³'™™™—½ÌÌLzöìÉ믿ŽÙlæ…^ ..Ž:T=Æoü™Î-L4aOD¤&8«""5ïø‹/¦I“&=z”#FðÕW_]ѾÊÊÊxöÙgÙ¼y3ï½÷ááᤤ¤0î¡·øáËN´æAÌ4à$ðþ  {"" É""õK“&MX¼x1øÃذaãÆãÔ©SW½ï¯¾úŠîÝzñç?%ç¿ÁœI¦ `ÇJ.Ÿ‘ÍbN« {"" É""õGŸ>}X³f íÛ·§¨¨ˆ'Ÿ|’¿ÿýï5²ïFОI´ÉFü2O#·´3àO&wŒ?ÏxÛ·kDDjˆz’ED®’‹‹ /½ôÛ¶m£}ûö$&&|ÕÙŒ+><ÂÄчoñcÎx’Çפð(ß4à¶Á‰÷n˶mÛx饗pqqÑ€ˆˆÔI¹ ;wfíÚµ|7¤þÃN®e‰ûRèh{˜fd“Gydsš£X©¸¬}ºÓ_ÆÑŽÇh@+,r”µd±˜"2Œî‡ððp¢££™9s&Ï=÷wß}7Æ cÏž=…dÇ{ì±Çxë­·pµ6b×a.t"œN¿x¬ +…äpŠ,òÉ&ŸCä“M^eÎç0 ÃIx3Æ2ogH%›¥a-VŠ~±_‹ÅÂ_þò6oÞÌ?þñzôèÁ7ß|S£­"" É""rIÍ›7gÙ²eU—Œ~ÿý÷™ë9çB/šÑžføÑ?šâKSühN{<ñÁ‹vxÑÿÅ>OÛ«u9¬#›%äYÇOPPPÕ¤Á¿ýío 8°Æ& Šˆ($‹ˆÈEõïߟիWÓ¦MNŸ>ͤI“xÿý÷+¿šÍÒ.ø<'\hBšáG3ÚW…èŸ>w§ Çø/§ÙÅaVPΉjÛéÓ§ùãÿÈÿýßÿ±xñb† BÏž=9r$[¶lÑà‰ˆ($‹ˆÔ¬ ðòË/óÔSOa2™Ø¾};Ç'++벞o¥¢²?9‹ÿ3®ï¿ÿ>ñññ¬Y³†>}úË›o¾ÉsÏ=GYY™SDä2hu ‘K 11‘§Ÿ~‹Å¬Y³èÛ·ïe井•Eß¾}™5k‹…§Ÿ~šÄÄD4 "" É""WÎd21yòdvíÚE`` ûöí#<<œ—_~«ÕZïßjµòòË/ξ}û d×®]Lž<“ɤQH©žV­ZñùçŸóÎ;ïàîîÎßÿþw‚ƒƒÙµk×5÷½ìÚµ«jÝfwwwÞyç>ÿüsZµj¥QH¹<ƒ "--rêÔ)~ÿûßó§?ý‰¢¢¢kö{***âOú¿ÿýï9uê$--AƒiÀED’ED.ÎÃÃŋCË–-Ù²e lذáºù7lØ@`` [¶l¡eË–ÄÄİxñb<<<ô "¢,"r¾àà`vïÞÍĉ)//gêÔ©DFFrôèÑëî{=zô(‘‘‘L:•òòr&NœÈîÝ» Ö‚ˆˆB²ˆ˜Ífžyæ¸í¶ÛÈÌÌäŽ;îà7ÞÀn·_·ß·Ýnç7ÞàŽ;î 33“Ûn»„„žyæÌfýjÑ;¡ˆÜ°ÚµkGll,¯½ö®®®,Z´ˆÐÐPRSSo˜¤¦¦Ê¢E‹puuåµ×^#66–víÚéDD’EDn4>ø ©©©Üu×]?~œAƒñøãSRRrÃÕ¢¤¤„ÇœAƒqüøqîºë.RSSyðÁõƒ"" É""7‚ƳbÅ >úè#š5kÆçŸN`` ›6mºák³iÓ&ùüóÏiÖ¬}ô+V¬ qãÆúÁ…d‘ëUXXÉÉÉŒ=šââb&MšDTT¹¹¹*N¥ÜÜ\¢¢¢˜4iÅÅÅŒ=šäädÂÂÂTQH¹ž899ñüóÏOÇŽIII¡G,Y²äºžœw¥ìv;K–,¡G¤¤¤Ð±cGâããyþùçqrrRDD!YDäZסCâââxá…0›Í¼þúëôìÙ“ÌÌLç233éÙ³'¯¿þ:f³™^x¸¸8:tè âˆˆB²ˆÈµjذa¤¦¦ÎáljŒŒäÙgŸ¥¬¬LŹLeee<ûì³DFFrøðaÂÃÃIMMeذa*Žˆ($‹ˆ\K¼¼¼øàƒX³f žžž|üñÇñÕW_©8W諯¾"((ˆ?þOOOÖ¬YÃ|€———Š#" É""õÝwÞIjj*<ògΜa̘1<ôÐCäåå©8W)//‡zˆ1cÆpæÌyäRSS¹óÎ;UQH©\\\x饗غu+~~~$&&ÂÊ•+Uœ¶råJBBBHLLÄÏÏ­[·òÒK/áââ¢âˆˆB²ˆH}ѹsgâããyî¹çxñÅ gß¾}*N-Ù·oááá¼øâ‹<÷ÜsÄÇÇÓ¹sgGD’EDêÚØ±cIJJ¢GùäZ´h¡âˆˆB²ˆˆ£ôïߟ´´4î¿ÿ~ xôÑG>|8………*N),,døðá<úè£pÿý÷“––FÿþýUQH©M 4`Á‚ÄÆÆâããÃöíÛéÞ½;ëÖ­Sqê‰uëÖѽ{w¶oߎ±±±,X°€ ¨8"¢,"RÓHLLäé§ŸÆb±0kÖ,úöíKVV–ŠSÏdeeÑ·o_fÍš…Åbáé§Ÿ&11‘€€GD’EDj‚ÉdbÊ”)ìÞ½›ÀÀ@öìÙCxx8/¿ü2V«Uª§¬V+/¿ü2áááìÙ³‡ÀÀ@vïÞÍ”)S0™L*ˆ($‹ˆ\©Ö­[³iÓ&.\ˆ››Ë—/'$$„]»v©8׈]»vÂòåËqsscáÂ…lÚ´‰Ö­[«8"¢,"R]ƒ "--pêÔ)xàÆÇÙ³gUœkÌÙ³g7n<ð§NbÀ€¤¥¥1hÐ GD’ED.‡‡‡‹/&&&ooo¶lÙB`` Ÿ~ú©ŠsûôÓO dË–-x{{ÃâÅ‹ñððPqDD!YDäbBBBؽ{7'N¤¼¼œ©S§ÉÑ£GUœëÄÑ£G‰ŒŒdêÔ©”——3qâDvïÞMHHˆŠ#" É""ç½™ÍL›6„„n»í6222 ã7ÞÀn·«@×»ÝÎo¼AXXÜvÛm$$$0mÚ4ÌfýZ…d|}}Ù²e óçÏÇÅÅ…·ß~›ÐÐPÒÒÒTœë\ZZ¡¡¡¼ýöÛ¸¸¸0þ|¶lÙ‚¯¯¯Š#" É"rãzðÁIII¡oß¾?~œòÄOPZZªâÜ JKKyâ‰'8p ǧoß¾¤¤¤ðàƒª8"¢,"7–ƳbÅ >úè#š5kÆçŸN`` ›7oVqnP›7o&00Ï?ÿœfÍšñÑG±bÅ 7n¬âˆˆB²ˆ\ÿzöìIrr2£G¦¸¸˜I“&Enn®ŠsƒËÍÍ%**ŠI“&Q\\ÌèÑ£INN¦gÏž*Žˆ($‹ÈõÉÙÙ™Ù³g³}ûv:vìHRR¡¡¡,Y²D“ó¤ŠÝngÉ’%„††’””DÇŽÙ¾};³gÏÆÙÙY…d¹~øûûÇœ9s0›Í¼úê«ôêÕ‹ï¾ûNÅ‘ úî»ïèÕ«¯¾ú*f³™9s懿¿¿Š#" É"rí6lÉÉÉôîݛÇÓ¿¦OŸNyy¹Š#¿ª¼¼œéÓ§Ó¿>LïÞ½INNfذa*Žˆ($‹ÈµÉËË‹>ø€5kÖàééÉÇLPPÛ¶mSq¤Z¶mÛFPPü1žžž¬Y³†>ø///GD’EäÚAjj*<ògΜa̘1<ôÐCäåå©8rEòòòx衇3f gΜá‘G!55•ˆˆGD’E¤~sqqaÞ¼ylݺ???vîÜIpp0+W®Tq¤F¬\¹’àà`vî܉ŸŸ[·neÞ¼y¸¸¸¨8"¢,"õÏ-·ÜBBB3fÌÀf³1wî\úôéÃþýûU©Qû÷ï§OŸ>Ì;›ÍÆŒ3HHHà–[nQqDD!YDê±cÇòÍ7ßpûí·sðàA"""ˆŽŽÆb±¨8R+, ÑÑÑDDDpðàAn¿ýv¾ùæÆŽ«âˆˆB²ˆÔ­-ZðÉ'Ÿ°lÙ26lÈÚµk bÇŽ*Ž8ÄŽ; bíÚµ4lØeË–ñÉ'ŸÐ¢E GD’EÄñ"##IKKãþûï§  €G}”áÇSXX¨âˆC2|øp}ôQ ¸ÿþûIKK#22RÅ…dq 777Þ|óM6oÞŒqqq±nÝ:GêÔºuë "..6oÞÌ›o¾‰›››Š#" É"R{ºvíJbb"O>ù$‹…™3gÒ¯_?²³³U©²³³éׯ3gÎÄb±ðä“O’˜˜H×®]UQH‘še2™˜2e »ví¢[·nìÙ³‡Þ½{óÊ+¯`³ÙT ©Wl6¯¼ò ½{÷fÏž=tëÖ]»v1eÊL&“ $" É"rõZ·nͦM›X¸p!nnn,_¾œvïÞ­âH½¶{÷nBBBX¾|9nnn,\¸M›6ѺukGD’EäÊEEE‘––Æ€8yò$<ðãÆãìÙ³*Ž\Ξ=˸qãxà8yò$ --¨¨(GD’E¤z<<...¼ýöÛ„††’žž®âÈu)==ÐÐPÞ~ûm\\\˜?>[¶lÁ××WÅ…d‡~˜ÔÔTúöí˱cÇ8p O<ñ¥¥¥*Ž\×JKKyâ‰'8p ÇŽ£oß¾¤¦¦òðë8"¢,r£òôôdÕªU¬_¿ž¦M›C`` ›7oVq䆲yóf‰‰‰¡iÓ¦¬_¿žU«Váéé©âˆ($‹È¤W¯^$''3räHŠ‹‹™0aƒæÄ‰*ŽÜNœ8ÁàÁƒ™0aÅÅÅŒ9’äädzõê¥âˆ($‹ÈõÎÙÙ™Ù³góõ×_ãïïORR·ß~;ï¾û®Š#¼ûî»Ü~ûí$%%áïïÏ×_ÍìÙ³qvvVqD’EäzäïïO\\sæÌÁl6óꫯҫW/¾ÿþ{Gäßÿ=½zõâÕW_Ål63gÎâââð÷÷WqD’EäzòÓ÷îÝ›C‡Ñ¿¦OŸNyy¹Š#råååLŸ>þýûsèÐ!z÷î]Õ¢$" É"rûù$¤?ü   ¶mÛ¦âˆ\†mÛ¶ć~ø‹É®"¢,"× ˆˆˆªå¬ 5jC‡%??_Å©†üü|†ʨQ£(,,¬Z61""BÅQH‘k…‹‹ óæÍcëÖ­øúú²sçNBBBX½zµŠ#rV¯^MHH;wîÄ××—­[·2oÞ<\\\T…d©Ï~ºÄîŒ3°ÙlÌ;—>}ú°ÿ~G¤ìß¿Ÿ>}ú0wî\l63f̨º”»ˆ($‹H=4~üøª%Ý8@DDÑÑÑX,G¤Y,¢££‰ˆˆàÀUKÆ?^ÅQH‘úÂÛÛ›7²téR<<®®®*ŽˆB²ÈµáÖ[o%!!iÓ¦a³ÙˆŽŽ&""‚¨8"rÅ8@DDÑÑÑØl6¦M›FBB·Þz«Š#¢,R¿?¾jI·pçw2wî\,‹Š#"WÍb±0wî\î¼óN8PµdÜøñãU…d‘úÇÛÛ›7²téR<<<ªþk4!!AÅ‘—PÕÂåááÁÒ¥KÙ¸q#ÞÞÞ*ŽˆB²Hý0`ÀÒÒÒˆŠŠúÅ$‘ÚòóÉÀQQQ¤¥¥1`ÀGD!Y¤î¸¹¹±páÿoïNc³¬¶Ÿ… PÆŽ„ŒÛ‚´BT¦B\!…8¨ ‚p—¸á¾TT>¨…BC” )"Ôb«^Møp&äþõê}]ÿéY²dIŽ:ê¨,_¾|Ïëšö•Ÿ^+¹|ùòuÔQY²dI¦OŸžÖ­[D2ì['žxbjjjrÅW¤¡¡!×]w] ”O>ùÄ8À>÷É'ŸdРA¹îºëÒÐÐ+®¸"5559ñÄ"ö¾‚‚‚\yå•Y½zuzõêµçÙ{ï½7~3¹÷Þ{÷uß«W¯¬^½:W^ye "öŽýpsdWIDAT£>:K—.ÍC=”Ö­[ç±ÇKŸ>}R[[k`¿Q[[›>}úä±ÇKëÖ­óÐCeéÒ¥9úè£"~]gŸ}vêëëSQQ‘-[¶ä¬³Îʸqã²sçNãû;wfܸq9묳²eË–TTT¤¾¾>gŸ}¶q@$ïmÛ¶yüñÇóÒK/åÈ#ÌÒ¥KSTT”E‹Øï-Z´(EEEYºtiŽ<òȼôÒKyüñÇÓ¶m[ã€H†_¦oß¾©­­Í˜1c²k×®Lœ81ƒÎæÍ›06oÞœÁƒgâĉٵkWÆŒ“ÚÚÚôíÛ×8 ’á?øOÑ¢E®¿þú¬\¹2=zôÈÛo¿ÒÒÒ̘1#MMM8MMM™1cFJKKóöÛo§GY¹re®¿þú´h!@$ÃÿâØcÍ+¯¼’»îº+………yøá‡SVV–wÞyÇ8ÀïwÞIYYY~øáæ®»îÊ+¯¼’c=Ö8 ’áŸ>|xêêê2pàÀlÚ´)gœqF®ºêªìÚµË8@³±k×®\uÕU9ãŒ3²iÓ¦ 80uuu>|¸q@$ÃÿÓ®]»<ýôÓ™7o^Ú·oŸ… ¦¨¨(UUUÆš­ªªªeáÂ…iß¾}æÍ›—§Ÿ~:íÚµ3ˆdv'Ÿ|rêêê2räÈìØ±#cÇŽÍ9眓/¿üÒ8@³÷å—_æœsÎÉØ±c³cÇŽŒ92uuu9ù䓃H6£ÂÂÂÜzë­Y±bEºuë–7ß|3'tRæÌ™cà 3gΜœtÒIyóÍ7Ó­[·¬X±"·Þzk ƒH†ƒÅñÇŸ×^{-7ß|sZ´h‘»ï¾{Ï1®«wß}7ýû÷ÏÝwß-Zäæ›oÎk¯½–ã?Þ8ˆdhîFµkצ_¿~ùøãsê©§æ†nHCCƒq€ƒ^CCCn¸á†œzê©ùøãÓ¯_¿¬]»6£G6"š£:dÁ‚yê©§røá‡gþüù)..Ί+ŒðV¬X‘âââÌŸ??‡~xžzê©,X° :t0"š‹SN9%uuu:th¶nÝšQ£FeĈùæ›oŒðÿñÍ7ßdĈ5jT¶nÝš¡C‡¦®®.§œrŠqÉp kÕªUî¹çž,[¶,ÇsLV®\™Þ½{ç™gž1À¿é™gžIïÞ½³råÊsÌ1Y¶lYî¹çž´jÕÊ8ˆd8Мp yýõ×síµ×¦±±1·ÜrK˜÷ßß8ÿ¡÷ß?Ì-·Ü’ÆÆÆ\{íµyýõ×s '‘ ‚‚‚‚\vÙe©©©IŸ>}²qãÆ 0 ·Ýv[~øáüB?üðCn»í¶ 0 7nLŸ>}RSS“Ë.»,B$ÃþªS§NY´hQfÍš•6mÚdîܹéÝ»wV­Ze€_ɪU«Ò»wïÌ;7mڴɬY³²hÑ¢têÔÉ8ˆdØßœqÆ©¯¯Ï!Còõ×_gذa¹è¢‹²mÛ6ãüʶmÛ–‹.º(Æ Ë×_!C†¤¾¾>gœq†qɰ?hݺu¦OŸž%K–¤sçÎY¾|yJJJòüóÏ`/{þùçSRR’åË—§sçÎY²dI¦OŸžÖ­[‘ ¿•¢¢¢ÔÔÔäŠ+®HCCC®»îº 4(Ÿ|ò‰qö‘O>ù$ƒ Êu×]—†††\qÅ©©©IQQ‘qɰ/äꫯÎêÕ«Ó«W¯¬_¿>ýû÷Ͻ÷Þ›ÆÆFìc¹÷Þ{Ó¿ÿ¬_¿>½zõÊêÕ«sõÕW{¨‘ ûB—.]RUU•x ­ZµÊìÙ³Ó·oßÔÖÖà7V[[›¾}ûföìÙiÕªUxàTUU¥K—.ÆA$ÃÞröÙg§¾¾>ƒ Ê–-[ræ™gfüøñÙ¹s§qö;wîÌøñãsæ™gfË–-4hPêëësöÙg‘ ¿¦¶mÛæñÇÏK/½”Ž;féÒ¥)**ÊâÅ‹°ŸZ¼xqŠŠŠ²téÒtìØ1/½ôRüñ´mÛÖ8ˆdøo•––¦¶¶6cƌɮ]»2qâÄ <8›7o6À~nóæÍ}2gÎã$æÌ™“>}údÍš5éÖ­[V¬X‘Ûo¿=………ÆA$sðéÞ½{ª««sã7&I¦M›–òòòlذÁ8™ 6¤¼¼<Ó¦MK’Üxã©®®N÷î݃Hæà1zôèÔÖÖ¦¬¬,üqN=õÔL:5 Æ8H544dêÔ©9õÔSóñǧ¬¬,µµµ=z´qÉ4o:tÈ‚ òÔSOåðÃÏüùóS\\œW_}Õ8$I^}õÕgþüù9üðÃóÔSOeÁ‚éСƒqÉ4?§vZêêê2tèÐlݺ5£Fʈ#òÍ7߀¿óÍ7ßdĈ5jT¶nÝš¡C‡¦®®.§všqÉ4‡rHî»ï¾TUUå˜cŽIuuuŠ‹‹óÌ3Ï€é™gžIqqqª««sÌ1Ǥªª*÷Ýw_9äã ’9põìÙ3«V­Ê¤I“ÒØØ˜›nº)̇~hþ-~øa˜›nº)™4iRV­Z•ž={‘Ì¥   —]vYÖ¬Y“’’’lܸ1ååå¹ãŽ;òã?€ÿÈ?þ˜;î¸#åååÙ¸qcJJJ²fÍš\vÙe)((0"™ý_§N²hѢ̚5+mÚ´ÉܹsÓ»wï¬^½Ú8üWV¯^Þ½{gîܹiÓ¦MfÍš•E‹¥S§NÆA$³ÿƒ6"™ýË¡‡š™3gfñâÅéܹs^~ùåçùçŸ7{ÅóÏ?Ÿâââ¼üòËéܹs/^œ™3gæÐC5"™ß^qqqjjj2a„ìÞ½;“'ONEEE>ýôSã°W}úé§©¨¨ÈäÉ“³{÷îL˜0!555)..6"™ßFAAA®¾úê¼ñÆéÙ³gÖ¯_ŸþýûçþûïOcc£Ø'sÿý÷§ÿþY¿~}zöì™7Þx#W_}µ‡úÉì[]ºtIUUUxà´jÕ*³gÏNß¾}³víZãð›X»vmúöí›Ù³g§U«VyàRUU•.]º‘ÌÞwî¹ç¦¾¾>ƒ Ê_|‘3Ï<3ãÇÏÎ;ÀojçÎ?~|Î<óÌ|ñÅ4hPêëësî¹ç‘ÌÞqØa‡å‰'žÈ /¼Ž;fÉ’%)**ÊâÅ‹À~eñâÅ)**Ê’%KÒ±cǼð yâ‰'rØa‡‘̯§´´4k×®ÍÅ_œï¾û.—_~y† ’Ï?ÿÜ8ì—>ÿüó 2$—_~y¾ûî»\|ñÅY»vmJKKƒHæ¿Ó²eËL™2%ÕÕÕéÞ½{êëëSZZšGy$MMM`¿ÖÔÔ”Gy$¥¥¥©¯¯O÷îÝS]])S¦¤eË–B$óŸëÚµk–/_ž;ï¼3………yðÁSVV–uëÖ€ʺuëRVV–|0………¹óÎ;³|ùòtíÚÕ8ˆdþ}çŸ~êêê2`À€|öÙg©¨¨È5×\“ï¿ÿÞ8¾ÿþû\sÍ5©¨¨ÈgŸ}–¤®®.矾qÉükGqDž}öÙ<ûì³9âˆ#òâ‹/¦¨¨(Ë–-3ͲeËRTT”_|ñgŸ{ ’ù™òòò=¿Qoß¾=—\rIÎ;ï¼|õÕWÆ YùꫯrÞyçå’K.ÉöíÛ÷üµ¼¼Ü8ˆdþ¯ÂÂÂÜ~ûíY±bEºvíš5kÖ䤓NÊ“O>išµ'Ÿ|2'tRÖ¬Y“®]»fÅŠ¹ýöÛSXXhDòÁì§§|o¼ñÆ$É´iÓR^^ž 6€ƒÂ† R^^žiÓ¦%In¼ñÆ=ouB$súé}‘eeeùè£rÊ)§dêÔ©ihh0•†††L:5§œrJ>ú裔••í9‘ÌAâOª¬¬Lqqq^{í5ãpP{íµ×R\\œÊÊÊŸ4‹H¦;í´Óöœaÿí·ßæ‚ .È\o¿ýÖ8üìóñÜsÏM}}}N;í4ãˆdš›C9$÷Ýw_ªªªÒ¥K—TWW§¤¤$•••Æ€¢²²2%%%©®®N—.]RUU•ûî»/‡rˆqD2ÍAÏž=³jÕªLš4)¹é¦›2pàÀ|øá‡Æ€áÃ?ÌÀsÓM7¥±±1“&MʪU«Ò³gOãˆdT™0aBjjjRRR’÷Þ{/ååå¹ãŽ;òã?þ ?þøcî¸ãŽ”——ç½÷ÞKIIIjjj2a„H$s éܹs/^œ™3gæÐCÍ“O>™Þ½{gõêÕÆ€_`õêÕéÝ»wž|òÉzè¡™9sf/^œÎ;G$s ø §Ÿ~zN?ýô¼ÿþûyî¹ç {Ù£>šÝ»wç‚ .HÛ¶m“$^xa_µÉüæ¦NšãŽ;.UUU©ªªÊïÿûL™2Å0°—}þùçùóŸÿœvíÚeøðáéׯ_þð‡?¤¦¦&k×®5Hæ·Ò¯_¿Ü|óÍÙ¾}{ÆŽ›±cÇfÇŽ¹ùæ›Ó¯_?À^öÓ|—^z©öD2ûƒvíÚ¥²²2………™2eJ>úè£|ôÑG™2eJ SYY™víÚ ö¢ššš¼þúë)--Í…^˜­[·z`O$ó[š5kVŽ;\¹2<òÈžë3gÎÌÊ•+sÜqÇeÖ¬Y†€½ì§»É­[·NeeevìØa”L¡ š‘#GfäÈ‘?»ÞØØ˜òòrÀ>RSS“¦¦¦üÝ+î$üJ}ôÑ455å¯ýk ò /äwÞ1ÌÈd€_Ù·ß~›¿üå/7nœ1D2ÀÁmܸq¸™ðu É ’@$€H‘ "D2ˆdÉ ’@$€H‘ "D2ˆdÉ€H‘ "D2ˆdÉ ’@$€H‘ "D2ˆdÉ ’@$€HD2ˆdÉ ’@$€H‘ "D2ˆdÉ ’@$€H‘ "D2 ’@$€H‘ "D2ˆdÉ ’@$€H‘ "D2ˆdÉ ’‘ "D2ˆdÉ ’@$€H‘ "D2ˆdÉ ’@$€H‘ ˆdÉ ’@$€H‘ "D2ˆdÉ ’@$€H‘ "D2ˆdÉ€H‘ "D2ˆdÉ ’@$€H‘ "D2ˆdÉ ’@$€HD2ˆdÉ ’@$€H‘ "D2ˆdÉ ’@$€H‘ "D2 ’@$€H‘ "D2ˆdÉ ’@$€H‘ "šÂÿöxoÃ:+Ь¸“ ÿàÝIž;gºåÉ?=f¢ÕÉkã_ÿÇj4k¾“ "D2ˆdÉ ’@$À>ó³÷$wïÑË*ˆä$idû455Y‘œ$µkk³k×.kpPûàƒ’$IÜ>€¿ñÆþÀ_U|tIEND®B`‚xnec2c-3.4/doc/images/currents.png000066400000000000000000002153411257141547200171450ustar00rootroot00000000000000‰PNG  IHDRÉMecã—bKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEÜ ÷®M`iTXtCommentCreated with GIMPd.e IDATxÚìw\G‡Ÿ£cì-"*ˆ[T°×(¶Ø{ì%F}m±÷¨é‰ÝØ¢Æ^±Æ‚»  ± PDîhwïçœwÀMÅy>òñv§ÏÎÌ~÷·3³t£@ @ ø|¼}رmÃG¡B…(Yª$+0⻢qe#ªñ^"‘`bb‚e>KŠ)BùòåiÒ´ µêÔRÏÙ{?LNŽý¹‘†@ Û´ß§àÂÅ ”-SVa’ú¤™©™úwó&ÍQ(„? W/äS @ùïíÜåT¿ŸG=§VÍZœýúh¸oþw3AA+VŒqÆiôÃŨ£4Ž_F¿äeôKnøÜ`Ê´)´lÕ2Çóày“E iœ{ñâ/^¼ àVcÆŽÑpkÞ¤9ÀG5}ŒyÊ…BARRI¯’xýê5¡÷C9éy’êÕ«3}ÖtŠ)¢&7ÚìÇÐ/‚¼NVµßÇ>òØ1¬/^D®P"—“¢þ_®uü"^F­–mÒ£Õ"9ôQ(&&š™ð§á\¾vÍ?cíã½ûö*#|/àsÇÆÆ†i3¦1aÜ6mÜD}·úT¬XP¾½ùwã¿H$¦Î˜ŠµµõG‘çÊN•iÛ¶-µêÔ¢D‰<þœåK–sþüy¶nÞJ›¶mr<Û·n`䨑¸·sÇ‚ˆˆ|¼}øïðiŽ5ãô)‹g½Î¢P(J¥„‡‡síÊ5vîØ‰ŸŸ“'NfÕšUXXX¨ýŠ:òYÕ~ÙÞçºOºùìÞ½»ÎðÖ/rðÎmÖùø0¶ÞW˜a"1ÂÄȈç½XÔ¼{ƒƒÒ_ÔgMLµ<) ua.z]L3“©Ã‰L Цn½ºtëÞ;v²`ÞÖo\À‚y HNN¦GÏÔ­[Wíß­ž¿ÿù;»wí&àV2™ŒÒ¥KÓñ›ŽtíÖUcÚÆ‹/øgÝ?\ºx‰çÏŸ“¿@~jÖ¬ÉaC°³³ÓÈ‹L&cçöœ9}†‡’œœŒ““}úõ¡AìûgF˜/¾ø‚©Ó§rþë󄇇kõs}âT•éÂå zÕÙãÇpoçŽ vvvØÙÙѹKg ¿ª¸7h¬þ­J+uÚGaÏî={÷î­3¼\¡ÀÄÈ:U«Æd7Wµ@V¿3~\†ÚU}ÖØÔXçë,UÒÊlïÞ½5"¯ÄÝŒýßX®]»FèýPþ^ù7 …‚°°0Ê;”gÌØ1:û΄q4Ž>Ê×£kÖ¯áË_’˜˜Èð‡\»z#‡h…«R¥ ÓgMÇÎÞŽ°`îX³f sæÍI3_·lTÿNLL$0 Ásèà!†F«6­øë¯¿àî½»T¬¤œÞÉ•+WÈ—?_»-îWRk¿÷²êwÿþýÓÔ~©Ã§'3 oˆHN>å­%ùüˆa4\µZK„Nœ !’Ó Ô)˜›˜koý¦@]¨Ô¯ Ss/ôžFFÅöqAÚD<@.—“/_>õ¼Ïȧ‘Ts©¦Óÿ ~¤¾k}õñÿþ÷?vlÛÁãGÕ}í‚—òU÷¦ ›Ø´a“V¾>¾j¿§Oà§Ÿ~¢vÚj?®õ]q­ïª3Ïž=cäˆ‘Ü ¹Ã_|Á¸ñã4ú¹¾qÞ ¼eP]Us©ÆÁC9xà þÙÀÓ§O ½ÊŸ¿ÿÉšÕkXºt)u¾Ò¶,§7-\´Pg•¡ ½°Y©Ã4ãÕ3ÍŒòoHȈ´ü%›$§éGulooÏíÛ·ûýX(^¼8U«U¥M›6 4H+ιóçR¹reõõž3oݺtãòÅËi¦‘ K`éÒ¥xzzòìé3’“ßåëÙÓg˜›*ïe=zô`Åòxìõ`欙;r ¹\N;÷vØXÙˆI Э’ÕÚO×,‚ó0hР´µ_ªðéZ”3Ê©\ºÂWr¬”fx•%ÙDbĵQßQgù 9µHNkÜ3y7VKt[’ß›7¢KÉ› K²@/_¾dþüùLüa" …‚ùsç3oÞ<êÔ«£žw›šÚukkô©‚Vå+fÕùèèètÓ‹‹Sû}ñü.Õ]ô꫌6’¨¨(Ê;”gíúµ+QLáq‚uakú èG÷^ÝÙ³{×®^Ãëœobß°páBöÚ¯&½<Ô¨]#mw…vØ„„­x3SÞ¬¦™Qþ i™Í«·Ònkg›¦%ùÇE?2cê nß¾ÍÍ›78yò$K—,eÑ/‹h×^s~pù å5âr¨à .OZiüúÛ¯êEï“’’¢ö׫O/Ö¬^ÃáC‡ùaêXZZr`ÿzôî!îUAš9kÚ/uøôrFáÕé¤aN+|ŠB®±HÏã½¼;~‚•mÛfIF¦ºŸ&LLðöõ¦Ö—µ4œÃ…iU¤V€…óý"šú®õù¶ÿ·x÷äÒ¥K,š¿ˆ%Kµ_‡[°J3>U_+Z´(œ~ÈÂꬣC²oß>¶mÛF•ªÊ{WŸ~}Ä}J HW#+4¦5è""2"Ã9ÅíN1~ÜøtÃìݳ7ÍðÍIN-US,¾øåWµPŽ53ñU‚™±YÚ»[¤ê9ÈiM¾«…m+ÜÌéÊÎ8sÖLÊÛ—W»•·/ÏŒ™3˜:e*3§Ï¤aÆ.\X¯þ¤r› WÿÖ7NCLjàà`‚ƒƒù‹¿tºýßX¸+8âëëKû¶íuæ3½´ûöíËÜ9sY³z kV¯É–:Ì(O†¤™Qþ i¡z˜yWWW–¯\ŽU!«4ãöñöÁÇ[÷Þ¦5ÒʃŸŸîmÜ5ÎYYY1é‡Ii–½MÛ6lݲ•!ƒ†dXÎÚµjS«v-¼¯{LÁ‚Å®¤6Žê³ð.;w§Hí–žÐÖww‹Ôs£¦M¥ØBåGª ÛÝÂÝû$§1$õ±©‰©A#|NLŸ6/^аQC¨eá4xGŽáü¹óL›:µëÖêÕŸTn¥J•âÄÉ,]²”cG@¹råpss£g¯žj¿E‹娉c¬Z¹ŠCqïÞ=’““©þeuF­wÿMíÏÐ8õMcÙòeœ;w?_?"##yýú5… ¢Zõj 6”V­ZiøŸ=w6ãÿ7ž¨¿Ô¤oÚ#FŽÀØØ˜ÍÿnæáÇ.\˜ÊN•2t½{öÖkHyÓË“!if”CÚ@FH$LMM)P°%K–ÄÅÅ…o¾ù†fÍ›é´Î§Î×Gÿcë–­œ?ž'Ož ‘H(W®­Z·bÂÄ ZyX»n-«W¯æÎ;Ȥ2\Ý\™3wŽÎ)#ê›æÂ˜ššrøÐa^¿~MÅŠ5z#‡ÔYGÆcøõá$$$гWOS†Aöi?UøŒvN…OQ(EòñãÔâ8õ_쬙˜ajdœáØ*QæG,Y†4Nªv(l]ooõ×LôaÁüDÇD‹&‚4)l­|[’÷‹û÷ïS§V .]ÀÉÉI\ ¾™í÷Q„1Bý%=½ÂŸ9«oceƒ,Y†Ï5Ü\Ý4§[¤˜¦¨½‰{Cü ªÜ7qoD ^ää´‡±cƲnÝ»/GvìÔ‘êÕª‹J2ÐqYÑ~Ÿzø÷y·pOb¤^L¤Bš(-F 9Âû÷œìDb¤œbeeE«Ö­Xº|iަ'䲪ý>õðão§[€rE¡@ @ð¹!A¢{º@BrŠ$!”@ Ÿ–––ZçÔ"9ôQ(/c^ŠZ@ |–8;9k‹d’¡VµZ¢v@ Ÿ%Ò$©‘ü–»!¢†@ Ÿ*VÁÂäÝ'ªÅ·9@ ‚÷"Y @ "Y @ H“Œ<88:‹Zä‰Dk^ü¹3ž4jÒBã¼Ç¾=¢Âr˜ ?Ì•ËíZ È.>†û·D"Aõ-†Ï5}±Ö+‹d€{wEM r•hÐÅÀ¡ct¶Ã‰“g‰ŠË!’’Eÿÿ@íZ È.>dûJÝö?D>>¦ôyX$ 3^çNŠJ@<¨ÉŽ·tB$ ò 5ÇëÜIñÿ # ûÑæM¡PdËÛ‰2.¡¡¡”/_^k£³x(ȵ'ÓAÃÆêœ»©ëµ´Ç¾=LœÆºÐe}óæ û<àuáaaIHQ¤HìíìhÖ¬ m¾n%F=ê1=^¿Žeë¶íxž<Íýû÷‘Je/^ Ç hÛök:Óñ£m3ŸBÿÍh,|ØqôS'!!˜7¯151%Ÿ…%f¦¦˜™™!‘H>ˆ`OHHÐX&‘H077WçU—›©©é§?î^¸ÈÊU«¹{÷±±o°¶¶¦Üe©RÅ™™3¦~òåóõõeýúõ=z”°°0 .Œ‹‹ “'O¦E ímÚÙµk;wî$0P¹øîC-ü,·€ëÐÞß~ÿ‹§)’÷8@ûöîâNñ ðþî!!w˜2u&‘QQþž=‹àÙ³.]¾’çD²Ê œ•)†ìÈð‘ßóìY„Æù'OÂyò$œ3gÏ©E²@ øøHII!1) ‡Jܹ{KS3ÌLM±°°P‹ÓÜ"^*åeìkäòõ9##cl àå›×Ön##cl Â*E²\.'!!¹\Ž™™™– W¹'&%aanž©:Û¿ÿ &MÑ8Idd$×½}´Dò§øàV£F÷îÃÏxöìžžžlÚ´‰~ýúi¸W©Rå£É{ŽˆäŒ.Þ‡¾¸íÛ¹óû‹9yêR©KKKÍÎϩӧ‘H$´o×VXn>…'ñTÂ.&&†‰“¦ýò%µjÖ`à€~T®\ ccc""#¹qÃ#GŽŠJË Ó#::šÁCGðüù ê׫ËèïGRµª ÆÆÆ<}úŒ+W¯²{Ï>Q¡9<– Y!))€R%JQ¬H1>ãIø#d ˜™š‘?>ÌÌÌr%/ÉIÉÈå)4iØ…B\.çüÅ3$'§¨iýº H$áuñ,ÉoóŸH¥R¤RÒ)) ,,)\¸°Ú]&“/U»§$'gJ$¯Z½€)“'Ò­kòå³äÉ“p.]¾’gÆÐ:uê0pà@Z´h­­-OžOBQQÏY¶|%gΞ#""’‚ R·nƃCù,¥_¦LijÖøoŸ?q’ŽÚi¸Ÿ8q©TFíZ5)S¦tšyÖ7MšµæñãÇ<°§Ê•8xèãÆOâÏ?~U ñ àÛ´ïЙ²eËræÔ±\¿.™­sUÝ,[ò'ÿlØD`P ¡îWu˜:õÊÛçxÞS[@·ïØMôË—Ô®]“?~û#£w¯Ë–)CÙ2eÔu® ›–@|ß-õñ‘ÿޱwß~<C&“©÷kNÏ]%0ÿÙð/—._áùóäÏŸŸš5ª3xð@ìlËi¥ýÛ/‹Ø³×ƒ€À@d²J—*IÇŽíéÒùuÙRÏ%Ný[•fll,ëÿÙÄå+W‰ˆˆD¡S²dIj×®E›¯[áìTY«Ócý?yþün®õùgýjŒŒÞ-o°µ-‡­m9ºwëªîì¹óüûïV|}ýÊd”-[†^=»Ó¿_8>ÂÿÆMÀÌÌŒrå¾à›N2xÆÆÆZ}rÏ^6oÞÊÝ{÷‘J¥ê~z?4”Ÿ~ú•K—¯ œœ8 ?ß—éþüêÕk–.[ÁÙ³ç ú¹\NÙ2epu«Oço:R½ZÕ\GÓ*¿!}úÞ½û,úéW®\½–n]¥7~geœT…]·v•^mD*•±aã&Ž;Ahè’““©êR…aCÓ¼ySºt퉟ÿM-˜G·n]4ò©j_..UðØ»3[®GxøS/YÆy¯‹DGGSØÆ† \;æ{õ}ÄP¿9=¶ÊJKhJŠœ×±¯(V´8¥J–&øv/££‘&ÈÈgaIù11ÉY¹"O!))¹BÁó‘X[Ù””LÊ[ËrRR2‰„×±¯°±.¬á–$&&ñ&î R™Œøv¶öܽ‚…©™^î†ö€o:uÄʪvv¶ØÙÙÒ«gwýëýßYéo¹qß¾zõªÆ±½½=kÖ¬ÁÃÃû÷ïkùøxŒåt‹ÈÈH¾éÒ“ˆˆw¯q_¾|ÉÑ£Ç9w΋;¶P¹RÅ,¥Ñ¡½;Þ>78xð°–H>pð°ÒâœÎT CòèZ¿;wíÆßÿ¦Z$Ÿ9s€Ó§Ï¨›¿ÿMÜ\ë}’u®º™ª8sö¾~þìß·Kë&‘“P¯ 4à[ œ†ÎÁ[²t;wí1Øýùó þQQÏS‰®Wœ>sŽËW®±jÅ-ñ2ñÍ×m²xÉrºuí¬W~gÏù‘«×®kœ{ôè1=fß¾ýêúÓ×’ìyò4£G§!\2bðZÂìÇ?0àÛwÖ„6ü›ê¦•ÈÝ»÷øõ·?HJJâûQšq,Xø3ÿlؤ•Ö“'átïÑ—˜˜õ9oŸxûÜÈRû;n^^5‡>x@èƒlÙ²-×­¿i•ß2=~ü˜î=ûðêÕë ëÊþ’™qEŸ6óê½û|KHÈ ¿Þ>7>ò{î†п_&LœÌö»´Dòž½Z"$³llÛ²‘ÛAþÜôóæà½LŸ:™*ÖGvôß´ÊoH™–,]Á«W¯Õ}ø¦Ÿ7ef\ѧ,^¼Œ;”.]ŠËs튷ü½Ùòïõ:÷¶_S¬XQüüo|[6""‚ .‘?~7JYañ’e¼x­s |ñ"šÅK–eÊoN­ÆFoE²\NRR"‰I‰$$Êxñò9±q¯¨S»_V¯MTôs"¢"yóJé?Q)…¯ržtâ[ËrÆFFj7‰D‚©‰)’·ÇÆFY—0 …©TFLÌkž>{JlÜ\]QµJu+äÈd2å½%"m÷ÌæåÇùs(V¬(=æïÕëè×­Û´gÝú ZkjR?€«úzês™éoâ¾ýúõk¨ì§î÷º¯Ò’|öÌ9Ö¬]ÏšµëµÜ¯]÷Îr6664làÆ™³ç8rä(}úôàÈÇHII¡i“ÆØØØdKë׫‡D"Áßß__bbb˜:e‹~ú•¾~Ô®U$I¦Ÿ"?t/øq®Z€89UæÇùsèЩ+çÏ_Èñüçöþ¾Ó§N¦Fê»+_ûÃÖm;غm‡–»ßÛ· ©™:uø@ý˜ IDATuj×R2={=x®w~mmËq÷î=&ý0 {;[Š-Bg'š7kJî]s­Zô# Ü\ÕÇãþ7†7oåáÃGês2™Œ¿/ãØñ<}úŒääwóÃßjÅùËO ©[·ŽÎ€E æá⢖..UX´`:wÏtûw(oOPðm‰cŠ/NõêÕhçþ5öÏõ¾›Vù )Óy¯ Z}ØÙÙI݇ss\ѧ?¡l§¿ý²ˆ¯¾zWöºuë¨ëÂÄÄ„^={°dér¶oßÉÜ93Øçq¹\N‡öîäË—/[®®úK=¦~ó`ˆßœ[ÍÌ̕ۿ)ä$&%’”œˆ±±‰RˆJ$¼‰‹Å2Ÿ%­[µåñãG\÷¾J±"Å(^´(ùòYfk;633W‹ä¤äDµõØÌÌ\ýÛÈÈSS3ŒÞŠd•[VJeD>âEô êÖu£H‘"$&&œœŒ¹¹ÆFÆÈ¤2>yHݯÒp—É2'§Ê=rýX·~ááOÕSŸ–-_ŪKuöïìêo¹}ß~ôèîîîܼy,XðùY’S?áèzÚɈÑÑéºÇÅÅeK>UÓ)TÓ+”¿õÛÕÂ<)R˜ŠŽŽÜ¹{©TÆ™³ç°¶²¢¿>X[YqæÌY¤RwîÞ£REGŹu-²£ÎíííÞ;¶×+îì¶$—*U€Û·ïbOÐ:“˜˜˜¦o—ô-†i¹§~õ¯‹øøx­sïÏqÍ—/ÿÛ›†þ‹V¦NžˆƒCy¤R)AÁœ?U¯¥gïþœð>>Ô­[—›7oâääÄéÓ§)Q¢„°$J‘"EˆŒŒäÄñÃØÛÙåX:­Z6ÇÒÒŸ¾Ðx•ªŒ;E¿>–d7·ú bhë~UcccõÈX>vì÷\¹z;|7jlº~«ºT¡F/¹q×Û!w(P íÛfíOká¹jêËØ±£8söœÎú³±±aìØQ©ò®¿ßœ[%É[‘,Q d3S3òYæG&“±cÿ6ÌÍÌhÞ´9¦¦&Èdñ9öå3Õô #‰S3$Fõb=•%Y¡P¼ɩܲJb‚ ###êÔ®Mll,»÷l§h‘â´ùÚKKKõœã:µjû&–Ý{µÝ3›—Û!!Ü aÉRÝî#G Ó8v(oÿÍ[‚WÕ3Óßrã¾=vì»>ºiÓ&6mÒÜçý6¥«.SŸËͯï}”–ä¢E‹à±o'ÆÆ¡¼=fff˜™™QÞÞž^=»³{çÖlK«QC7¬­­¹BHȬ­­ÕV•ìÌcþüù©V­*2™ §Ê•(^¬˜:ž*UœIHH zõªê§ÄO±Î—.þƒZ5k`mm¥¥5dǶ͔-S&W-É•+Wâßë6t0ÎN•ÉŸ?¦¦&”(Qœúõê2mêj¿Ý»ufô÷#±³-‡¹¹9Å‹£nÝ:üúËÂlÏgaÖ­YEŸÞ=°-WNyc25¥\¹/èØ¡¯\šé¸¿9œ²eÊè`þ^¹”íÝ)S¦4&&&ê4{õìÎì™Ó ¶$«ÄLJ÷3aüXªW«J055¥téR4i܈ŸÊÜ‚ŒÓ'Ó»WŠ)Œ™™NN•ùãwíúeÊ”fçŽÍ4mÒKKK¬­­©U³†:_ªý– mÿ»wn¥G÷®”+÷&&&jCÌT>?†>]¶lYvnßB“Æ4êjéâ?´âý¶_¦OŒƒCy,,,(Y²5`íš•¹6–[[Y±g×vƃ³³–––˜™™Q³æ—¬Z±TGž•o5èÐÞ=Ã7…†R¶LöíÝÁ7:R¬XQŒ)V¬(:u`ßÞc !~szl•H”VP###LMÌ(¿ ¦¦æüwôÛwl¡vÍÚ4jÐ…"™4>GʼnDònq^¡‚VKŒß áwn©Q¹er¹i|æættï@‰âÅøã¯_ðºpî­©4 s³4Ý3ï¿,ä›N©PÁk++Œ±¶²¢›+«ÿ^¡µËä&bk[Nç8Ÿ™þö!ïÛŸ¥(WJùòåµ…88:sïN ¨)A†V–¬î{îŒ'ƒ†ÕŠçÜO£Õ=öíaâäY¹¾³ÅçBÝú 111ý¤ûÿ€ACðm?jת‰™™OŸ>cÍÚõlß±‹J+røPÎÑÊÐvWû÷‡$,ì!-ZµE¡Pp䇯¶‡y¹î3º²²aîsùë¥He2¼½¯qá¢Í›4ÃÞÞ™TJrrR–Û¾B¡È°,dÍ®=»y÷F}®@trîܳ›7o4ݺuîJìë˜lIÿ}ÌÌ-066á⥋<{@ÿ¾ý5ÒÊÈ=½¾ŸÚVêºýظw'0ÓÚµBÅ*( .^ºˆ›«[öM·Ðw䡱²gó§xsÈëåÓ…¾_Š|^õèåuQç–ZÆÆÆLœø?qÁó83gÍÕØ_ùëÖ-?œ¨>ñ|;ˆ}{©[§.C&1QÆ›Ø×¹š—™”î]»i½VO)w%éÞEÛM&ϱü$&(çj»Ö¯O77­´2rä ²M$JB+/ˆÂϹ|:ÅÈ¢u°ní*Ö­ÛÀ _?’’’(^¼µjÖ`РTu©".øgBÁ‚iܨ!óçÍ•‘ …BÁA 0…BNÜ›×Ä:˜˜˜@bbÚ»C$$È>@ý(§`dÖ] D²@ðQˆraIõ¨‹Æªw’|~ÝóçÍfþ¼Ù¢îÓ@*£OÏ>ÈåÊ9Çr¹\4xѯB$ òB ‹z†‘”˜HRb¢¨ ŒDò†ìÊ õ(AFK² O , ¢@»äõÝÏ„%Y'PY@ÅÿÙó¿@ é¡P(pptþ(ÿ² ±O²à£Aì“üq‘öIþÛµ@]|èûwVö)ÎKé‹ErŸ™Ú'ùÜOQsÁg,ò迟r>Ä8&È ŠdIv~÷Q ȇŽIÓ-)I¬ÌÎIDÿÿ0íZ ÈKý÷CçCŒc‚L·2˜n!@ äuÞŸn!î @ ï!D²@ @ D²@ @>.Ü+B@ y }¶à4Ñ7"@ às!C‘ܨI ±Ù½@ à³BÌI@ „H@ „H@  ÂäSÌtÙŠÎÈàƒýaX|À?>`éeŸwñ{þâ«”@ 苃£s®§)‘H²üiqé@7b LýhÔ¤…¸V‚O¾ r–ÜÜ"»Æ!’  +*! ÅG³’¸V¢ Ù‰É@ ÇM\ ÍÇ(lĵú0H$’LÕ½D"•'"Y xh„H@ ²‰»/n°Þ{ùÌ Ñ¡ÒXª•jœ£é‰-à@ äÑÑÑ 2œèèhQ‚,‘”’ÀZŸ‰tm5„öM{qüñ*æžnÏÓØ{B$ @ øtJe >Šsç¼:|R©LTŠ Ó ù‡Z|Q´I/ÖvUœ«qüÞúKÓ$§;Èò«8xè0‘‘Q/^ŒöíÜù~Ô,,,ÄäYN:Ãú ¹u+¤¤$ªW¯ÆAhÖ¬‰^áC<௿–qéòbcc)S¦4;´gø°Á˜™™©ýùúú±g¯—/_åIx8r¹œB… QÞÞŽ-šÑ¯ooÌÍͨP±Jºi¦ÞOÒ¿Ù1³k÷^Î÷âÉ“p¬­­¨èèȰaƒqs­ŸgÛI`` »víbçÎ*çs²øÉ××—õë×sôèQÂÂÂ(\¸0...Lž<™-´·ÔŠçÇdëÖ­<}ú”R¥JÑ»wofΜ‰¥¥eŽ—WÕ®TíGW;355ÅÆÚšÊN•èÒ¹îmÛd)Íì(sHH³fÍâÔ©S¼zõ [[[úöíËäÉ“Õý !!?þøƒ={öB\\ùóçÇÑÑ‘.]º0a ÿúzä$)))üoüDüüüðóóçã'²bÙbŒõj'•*VäÐÁ½:÷) ÚµïÌí4ǯ´Æ©ŒÜ³Ú¾ Aß<Ìžû#[¶l OŸ^Ì=#×®eNÕ—!D¾ Ãëá¦öZÆ­Ø#¼L|Hùü®DF>£šM›K7ÇD²B¡`äw£ñºpQ}îÉ“pVý½†[·øgýj±ªU'Yõ÷Z~ûýOsW¯^ãêÕkz 2÷î‡Òµ[/bccÕç<cñ’eøûßdõßËÕ}§k÷ÞZᣣ£‰ŽŽæº·>>¾¬X¾øƒÔƒ!c@ûŽ]4ÂFE='*ê9.^â·_Ñ©S‡<ÙVªT©’¥ð5jÔÐ8~öìÏž=ÃÓÓ“M›6ѯ_?ëÑ©S'Nœ8¡>Æ¢E‹¸~ý:ÇŽû(Æä¤¤$"£¢ˆŒŠâÜ9/Âß2tÈ L·Á¬–988˜zõêñêÕ+õ¹;wî0{öl®^½ÊÁƒÕq|ûí·ìرC#|ll,>>>øøøàïïÏöíÛ?©ë‘YæÍ_ÈÉ“§5Î Ü\)R¤0—._áÉ“pa¾3oŸH¥2¤R)gΞ£GϾ:ýâ ÿ¾lß±KËmÏ^zõÌ>‘ì´„:US0¿ ã¯SܼFIæ\ð÷¤³ó„¿þ9&’_¾| @áÂ6çUÇÑÑ/ÅÝLçxö,BiuZµš;Èd2bbb8vÜ“.]{áç3Ã8ªUu`Öìy„…=$11‘°°‡Ìš=ï­xÔ¯ïܹs—€À`­ó‘‘‘¤¤¤OPP0ËW¬Â½Ý7 îmÛ`llŒ±±1îmÛ P(سw_š÷»¹åïÍÁý{¨VÕ…˜˜–,]ž%¿îm¿¦X±¢øùß$(ø¶ú|DD.\"þü´o×Vïò½’EòÓ¹Œ=T—S÷6kL­yü:ßg'h]£7÷âÎó:%’šVÝØsn5ݪLÁ´À§+’ÓB|2T—INNÐ9ŸX&“ñÓÏ¿eÇ“&`ffÆ Ï“4oÙg—4oÙ†ž'ßZ6LÒä¯_»ÈÆ k©êR…BÁê5ï,WU]ª0kæ4Ž9@à­ø\¿Ì†ÖàT¹,Xô³ÁåÍŒ€Îh xúô=zöÃ××rå¾`¸±¢aéÁ£GhР—/_ÆÁÁAkNrZõŸÝc²jü‚çâìì„¥¥ÎÎNü8ŽÁqÉd2ÂÓ°heå¾cH™þùgÌÍÍñððÀÑQ9­ÉÑÑ-Kã„ xôèîîî!•J ÆÝÝG1qâÄ\¿¹ÉÀ¡c þK333µ5yéò•ZVäì´òªØç±Ÿé3fcffÆÊKhÖ4sé›7oæÑÛ©bW¯^eÕªU,^l˜à–Ëåjë¬jšEêß{öz —˵©úž……NN•Õ}ïüù Yò `bbB¯ž=ؾ}gªz;ˆ\.§C{wòå˧_ÿNzßÓ¼nfô_I`Ü)þº4ˆW²( ÿÞ˜Á7M¿%:9”'²›T)ø5ÁáWIŠWðUÙ¶¹Ò¦slw "##yMñTOMª Åß·. yk¢¢ž3oî,ŠSZ„Tó‰OxžÄ_KrÍš_²kÇ–-_ÅÕk×É([¶ -[4cÕßk)U²Tša­­¬ps­í’/hÒ¬5!!wÞ b{wjÝ€¸¹RnÙbšµøšK—®èß¹92tØwDFEáàPž ë×P´hѰ2ÀÇLJvíÚñôéSœœœ8vì%J”вP†‡‡E©RïÚÊbiˆu+=Toìíí4ÎÛ§3m"u;KII!""’uë7°qÓfÖ®ß@·n™[½ževuuåâŋ̟?Ÿ³g•SHìíí騱#?ýô_|ñ…Úï… Ja±fÍuz•*UbÍš5”.]//¯\¿¹IN|–º{·.¬\µ†€€@fÌœC``%K–ЫMd´Üûèbˆ_½{õ`åªÕì?pˆ)“'biiɾ}†OµX{cµ\êSÉîKž%1¸õL.Ý9̧»P½ds Xå£J™ú\‰ÙŒ‰‘9åÌëðËÙïSom®µé³$»TqRÞÞšóª¼ß;;;‰;› ÏáäT9]wssýÉ*UœY¹b Þ×.pÓ‡cÿ¤L™2Ô©S+ãŽmd¬ÿ `l”i Vz;_:œ:u†ž½ûE½z_±kÇVJ•*)U_Yõæø­Ô)íNÉö¹ÖþrL$·o߀…?ýÂuoâãã¹îí⟠C{wÑûyŽŽoÛ}Zó‰ë~õ•†5#-‹Æà!#¸|ù*2™ŒçÏ_°s×n~úù7ŒéÛ÷ÝÞÈ]ºõbë¶Ü»JBBñññøøø2vœòµ®j‘@‡N]Y·~AêU7nøò¿q“Þæ­Î6nÚ̈ïF#•Jù¦SG6¬_C¡BEƒz‹j—„÷Y²d :u"..ŽþýûsìØ1¬­u/tìÝ[Ùn&L˜€——oÞ¼ÁËËK=@åžU6P.<›>c6AAÁÈd2‚‚‚™1sŽ^áSRRÊ_‹—`eU(Óy1¤ÌiÕ1@Û¶m9}ú4R©”ˆˆÖ®]ˤI“066fÔ¨Qï ]”ó®‡ÊíÛ·IHH $$„¡C‡j¸çæõÈ ôèÞUýf¤D‰tï–½ûâ?áÉÿÆOÂÌÌŒµ«WáZ¿^¶ÄkkkËáÇ™>}ºÁ{ǼzÅ Ï“H$NŸ<¦eŒ8}R¹öñž¼zõZ#ìô³ Òê{ ºi¥cˆßÔ|ûvß¶í;ß-ØëeØ‚½¾ÕçqíúEŽzoÁѲùŒ sOæEœéS:7@¬$œÒ«”¶¨ŠLš„wàÜ+}—»c¯Ò€¤ 44”òåËgÛU åÂÅKZn Ü\³ô1‘²‘Áûðø€$|ÀÒË>ïâ÷üÓî#r¹œAƒ‡k|@CEÁ‚Ù½s+åÕ"Ye}Ÿ´ÄóÔ)“|Ø`&MŸ©keH™Óªãôêù·ß~c„w+ì÷ïßÏ7ß|“ftèÐ!ǮLJ~KÝOgϙϖ­ÛµüõéÝSc¯ä •ë'R·!C¾ð¦Ë¯¡_Ü«ì\]½ž$+ãª,™­³Ôlúw óæ/¤AW6¬_£ÓÏ€Cñºp‘Ù³¦Ó¯oïtû“•U!ö{ì¦ìÛ7’™ñû~^»õèþ˜››cjjÊ¥ gÒüRäûã„Úš,OdÇÍ…<Š¿Å€6? 0M 8ΓøäoH–'Ð¦È VšMër£¨V²‘Ac·¡÷Õ5¼xé"n®n9gI–H$¬Z¹ŒÇP¦LiLLL(S¦4#†a劥âk{‚<‰‘‘«V.eô÷#)Wî LLL°±±Á½möîٮȱjÅRjÖüsss (@½z_±fõ °më&:uê@©R%166ÆÒÒ‚ ø¶_ܧÈ»wn¥gn”··ÇÌÌL½ÿrÿ~}8rhŸZ ‹1 ïZ£÷ïßÏ”)S°µUîGmkkË”)SðððȶëQ¶lYvnßB“ư´´ÄÚÚšZ5k°tñzÇaaaAåJ™2y"ã³°p3»Êìáá««+*Tˆ¦M›rèÐ! бcGŽ?NëÖ­)\¸0ÆÆÆØØØÐºukŽ?®ȹy=>³fN£yó¦çš7oʬ™Ó>º¼¦'?ª©={¤míùvþïûÓ2–.þƒZ5k`mm¥¥5dǶÍjÑ›Y¿ÚÖä>€ò‹€Ú»gêSê&Ffô©>‡V¶#ø}Ç$=½O­B=15²@šòŠê;áv ¹µÞù“°$ç$Â’,,É«%Y·ÈiKò§Ž.K²¸VŸïCØûúA*•Ñ·ÿ@üüü©^½›7ýƒ¥¥…NËÝÇІ²Jf><’š+«xC {H‹VmQ(9äAÅt>^¥Ï8ñ"þ1+®ŽÁ¾\y:ÕNxâMŠUfѶ‘üÐ`Eò•6x<Ȫ%ÙDtm@ Ù¥¥kþ^ÎĦòÛ/‹´r^ãS02f3gÍe[ªíß¾nÝ2]¬/6¥ùÁm+{çÝãø¦ù¶Þø•e»“ߨ0 굪/ZåìNÆB$ @ È .Ìúµ‹ŠÈƒ,XÆ2Þ¬LÇ!—ÿŸ½û‹âx8þ=î8zQ±a‹ Ø£Øû/ÑhÔÄn¢Q£QcÆÞ{b,±EcÑ$ö®‰Š%cT{A+‚ÂÑîî÷Š"½ó~žçñvogwvv÷ÝÙÙ:­V‹N§G§Óòë|«ñÓîo(fùµ+t <<## ##ŒF(•F)12R$ ²’M”$HB!„ÈãÒR“‘ZïéÓ&3}ÚäL[o½^oøèþ®h_‡ò5·¡Óë@§G«Ð¢×¡ôFŠWæ7ÊÒöû$ !„Bˆlgdd„‘‘*•*!@ޝ]Öéâa Q3‹ø¦ÒÜB!„y‰c‡%Dº¼ÚO¹R©Ì5ë%A²B¤ ?¼y/ûJd¥ô>¾/(/»‰¼I‚d!„H†t)&ûJ!Aržpýòaiøä;1†Ïó”f46|ò×P¾Z Üðy+#ÀÜð"5lÜ\j&e_ !2A^lŽ#5ÉB!„"ËäÕ$%HB!„Y&¯¶=7’]'„B!„ÉB!„BH,„B!DZ¤Ø&Y:B!„ùI¯¾CRìG•Ú !„BQP¤$Kß“B!„¢ ‘6ÉB!„BH,„B!„ÉB!„BH,„B!„ÉB!„BH,„B!„ÉB!„Bd•dÈ+Ê”«”éËT(èõú¿Ü´¤¿få" ®u!„kRΜ‹súZÓéß¼~I‚d!^•™Û¼:äzA^nzÒOÍpžB!פ¬=ôô%HB(ÙyÌ ²ªÆ^ò9{òYŽãü+'k’…ÉBˆªw¿¡’ €^¯ÏÒšÉçìÉg9Žóg™$ !„\„2 ½m÷ …äs>Êg9Ž¥Ì ’…B¼&+k)cbcxBØóP,Ì-)äà€ÚX-ù,„”!A²"·‰ÐhxALl4±±±Äjµ¨”JÌÍ̱4·ÀÔÄ„ÈÈH>@adD‘BÎX˜›KÆ¥C`p0¥K•¥Hî?àÆ«”,VL2F!$HB¤UXTGî®ÂçéQÜѸDL]2¼\MT$A!Á8Ú;QÙ£&&¦¨Tq§™˜˜BCŸá×{÷ˆŽ¦y“÷ ÂÛç•ʽS öApp0#¿˼ofcooŸîå< ¡H4šl¬m ’ 9 òYH™I+NKгP"£5ÄÄĦê7ÆÆ*LÕf8ØÚ`d¤ÌÐvôô%HB¤Ëþ+(ãâNÿæ ð}x‚¥'zóEå8›—J÷2Ÿ†£W(ð¬ÕµZMtt‘‘bcc '?5666T«Z“ØØXŽÿé………%ÑÑQ<{Z ò_£‰¤ï_âí}‘¾_|ÉÏ?­ÅÌÌ4]˲´°äúÍ«ØÙÚsíúU¬­¬¥€gA> )3i < ¤|¹ rrF©L]À§ÕÆò$ð ×o\¥h!§tŠ=ýÌ’c#îµjÝŽ²åÝðò:öÖy¼¼ŽQ¶¼´n@Ùòn”-ï–몰°çü°âG:têFõšžTt«J£&-ø¼ï¶ïØ%g,4lø(Ê–w£S—îhµÚ$8-;w§ly7†•êåöù¼?eË»1aâ”7¦Ÿ0™²åÝèóyÿt­s|9Né“•.§Zé¦D)Bp+V‡¡ÍV°ââ<ޏ“®å…„†bnnEíšu=Ïž……B¡@­6ÁÄÄÔpÒö ½^G]Ï ¿¤S«S§N(Š„Ï«^ý>©ONÓjµ 1oï‹x{_d؈‘I–ßÔpvtâÞ=Ž?Œ&âÅŠÉ´u•|Î=ÇlV cÔ×ãx·v}Þ­]ŸQ_#44,ñ1Bí: ([Þ›~MwZ—/_fêÔ©¸¹¹¥XV"""7n¥J•ÂÄÄ„R¥J1nÜ84M†æÍŽ2FÅ nv.‚B¡@«Õ¦ê£PQعÞ©Dðkû ­éWªè^`ÓÏóAò‡m>`÷ž}og×î½´1Ì›]ºt™V­Û2ï»…\¸àMXØsbbb¸ÿÇŽŸàëÑãò]`š›.S§LÄÙÙ™sç.°båª7¦ÿ°âGΟ¿@áÂÎL2)ÕË7n4*•ŠÍ[¶qå굄ï¯\¹Ê–­ÛQ©TŒ?:ïîCÛšü뿇g±¹åC1Dzôoº€û¥9Pˆ "2w·Êh4DFFbbbÂóÏñö¹À©Ó'8ìõ—.ûŠZ×9::2áâ›ÊGq{öìaË–-XZZæÉ¼Ÿ6}GŽMôÝ‘#G™6}Vº–g¢6¡t‰’Ô¬Z²®¥15ÉœšRÉç‚cÆÌ9ìØ¹‹É“Æ1aüvìÜÅŒ™sÍ3iÊt‚‚‚©W·ݺvNwZnnnL™2…Ë—“aN¯×Ó®];fÏž¿¿?ÑÑÑøûû3{ölÚ¶m›¨WŠ´Ì›]eF¥ÁÑÁ)îŒØØT‰ñó;9B¥Iw>k¢48Ø;Øô3KŽ5·hÓú¾›¿ˆ#^^h4ÌÌÌÞ¸+ô:z…BA›Ö­²eÂ4Ý)Ó§ož> ¢Žgm€‡‡;J¥’‡ñÏ™3lݶCÎÀYÈÆÆšoæÎä³^}ù~ñ25l€›[\ï¾¾—X¼d9 …‚oæÎÂÚÚ*ÕË-SÚ•O?éÆÚu?1cæl6nXÀô™sÐétôìù ¥]]ÓµÎo+Ç~wîй˧3tÈ tç‰ÏS/.áNØE‚4oïÜ“èU1T(^¿Èûu¨DïÆ3Xq¬_T^™ª¦z½ÿû¼×¼ÑÑÑÄÄD£R©ø÷¿xö,˜¢…‹PĹáánùÝÄç’¥J–¦VÍZètZž›º ùùóç 8€™3g2tèÐd×-7š:e"S§LÌ´åEFEq7àO±·s T‰˜™f,P–|ÎÞc6§=v€æÍš¿;?‘0ýÀß9pàw,--™=kz†žTªT‰Ž;Ò±cGÜÝÝß:߯¿þÊ¡C‡(Uª6l jÕªx{{óÉ'ŸpèÐ!~ûí7ºté’æy³«ÌÄÄÄ`ddDTTÔÓzöú4ÑÿׯÝðÆ<ÆÆÆÄÄÄdIú©‘•é+ V¯[ÅåË/«ï¾Yè\’Ñôó|ìâR”êÕªòß¹óüqèm?lhú¡CGÐh"©Y£:..Ej0_?a>eÉÒå;~‚ÇŸ`eeEíÚï2|è`Ê”)0_ã¦ïÀžÝÛ©X!î¡={÷3|Ä(Ìÿ6!¿rõm>üˆbÅŠqÌë÷d·aÍÚõ<}D½ºuX»f%FF/+æK–,AÉ’%èÔ±C¢Ø·p_Ÿöêÿ·mßÉÏ?oâæ­Ûh4n^¿”âô´äMü²V¯ú 6qá‚7šÈHŠs¡k—Nôø´{¶½Zƒüêßñi†††±xÉ2Žÿ“¢Óé(æâBÝzuø¨}[ªTöÈô²T¯nzöø„uë70bähvíØÀW#GK¯ÏzP·Žgš—;xÐ@vîÚÃ?ÿüËÁß^Ï™3ÿbggÇà/fê6<~ü˜Ïzõ%88˜.;2xЀ4/C§eÇyÜŒø‡µÓÞ¦6¦N()?0zs“«‡(åX‹î Dzüè|YíGœÌK$_‹¬‰ÀÉ¡*•а°g¨Õ&\¸xލH î^ŽFuõÚ Z¾×[[ î±f|€¬ÓéˆMef¸{>zôXB|ñ¢!ðJ9¨:lx,3xðÀDrrÒz>sÖ\Ö®û)ÍÓÓ’7ñ^oc{ëÖí„GnŸõü4Uë;tøWœ<ù×µ-~wî°qã/Yö4`ÔÈáœ<õ7oÞâ›oçÇ uÛråÊ2ò«aéZ¦µµÇ fÒäiÌ™;/þ ˆáCÒT+’ÐÐ0>ëÝû÷ЬY“t×düve&z«p†5\D°îþ±§ˆ BKêO’¡Ï(cß’ÅK³Áw#jý”ìü!!ϨXÉ­6##%OƒžòèáC*»%nŽEø‹èuq½^N¯C¯Ó£×ëˆMEÁéÓ§Y¾|9*•ŠU«V¥x̹¸¸ðäÉLMM)[¶,­[·føðáy²‡ƒèèhüïÝãq` Žöö”,^<áéÛ“'hù^k4šœœxøèABüâÅ ¼}|xðè1Å\ŠRÅÃóמÚI>gþ1{ÿþ>êЙ  à—çäÀ@¶ïØÅñ²}ëo ÁoZæM8Ï™¨l<øÿ}†gÏž%Z‡V¬ÂÄÄ4Å›î&±cç.Žxy¡Õê ß5`ÒäiÓ¨a:vü8ÛòøÜ¹sq×îºuWŠÔ«ÀùóçÓ5ov‡:¥RIlìËÐÂÂ"Ñ߯’*•òe3´ ¸É¥ŸlP˜éÇS*•,^ºb.ÅèÖ¥{BÏGæ†î?_77ø9$·jõ>ÓfÌæÏ“§ ÁÎÎ.áÎõä©¿P*•´jùÞ[¿`Ñ?~LßÏ{Ó½{ ;;óâÅ öî;À”©3˜7o«~\n8xj³yËV¼½}èÜ©:Žã'Nbeeʼn'Ñjã ’··aþ”ƒä€€û¸»¥~üöÔÓñþ8t˜–-¦æ»5°µ±Iõô´äM¼Â…™} €““S¢ï L×¼ÙUf"##¸Þ”J#æ|33!(´yåZmccüùs‚ ã&¢ÕÆ&ZFf§Ÿ\`›éÇ366ÆXmLϽÍknaèÍ›ÑôóElggGƒúõ8vüû÷¤{÷®ì?ð;Z­–&%ÎI9~,®ÍÔ«Öðãª5oLÿ÷ì ×ñôD¡PpñbÜ[«.\äÙ³gŒ3ŠÙs¾åüojÖ¨ÎÅ‹Q(Ôñ¬+j,¾™3‹ÚµßMóô´äM¼9³gP¿ÞË;ñáÆ°áçMܽ{/Õë[¦´+W®^£Oß”+[†B… Q¥JeZð>½zõÈÒ¼º{/­V‹¹¹9z½FÃÝ{T¬X!ÝËT*•L?–Ozô2\LƦùF'¹Ò—ƒ‡rþüÊ”veåŠe˜¦³-é‘Ûø_ÍND]äEL0¶ú’ìÿë?yòÖ»q…BÁg­Fãƒø9¬UÎܸs ßóWR{N%RL÷Ex8*•1á¨Õ&ܽw7ÉGý6Ö64®ß Ýy5gÎ.]ºDÙ²e™4)ù0kÖ¬I=hÖ¬eÊ”A£Ñðï¿ÿ2jÔ(¼½½1b;wîÌÖã¸Wß!iþMï~/›8l×!ÑÓ¶´Ìoú´É OD;vøˆé3fqmjã¿ïÞ½ ³æ|“P™“k¾ýfÖkAjPBÐ}ý:¹ê´Ì›ÕeF£‰D¯×ƒ±±KKK&Œ›üÆ|3¦Í~ù÷¬©èõqíyã®aéS›~¢uÉ¢ô㙚šaanÎÒ勸r@\>Æ$õê¼M?Ç‚ä×ïºzõ’¡aÛ´ù€cÇO°{Ͼ„ y÷žÔõjœìôððð„¿ì)_®7nÞB£‰äØñØÚØÐãÓî,_¾’cÇŽãV©7nÞâòåRõ¨°X1nÞ¼…ï¥ËÔ¬Q=]Ž\ /û¾z~N˼ñ^m*gþÊH••^©P«Õèõút?²ž8i*Ïž=£yó¦´k÷!£¾ÇŽ»øn^\­çW#ãz÷™;gf–ä·££#< 00"¯tk_+üj­qZæÍ®2©Ñ Ó鈉‰A¡PÄ5«x¥¦T¥Œ ¿^ýÎÂÂ…BALL :ŽH&ËÒOJV¥ÿjÍpïÏú¢×Ão[7&ªIŽ¿–ÄÇH©I¿L¹J¬ýñû4ÝD§u§«&ùÕ;¯Œ°ÿµh†™™çÎ_àþýèÑsþ¼7fff´hÞ4Ùß:88ðäÉý±×R)_ÔëÖõäÚõëø^ºÄÑcÇ©[¯ÆÆÆÔ¯_¯£ÇiܸZ­–:uS÷’W³¦¹yó‹/{ãŽ$3[¥"66–ˆˆˆD'¶³ÿ{ëoÔju²Ë|Ûô´æMüEîUé©1uwwcïž—|¹ÿàv6vT©âµåÛk¤âo$›6múÖ`=¥š£øGâ¹µ7†ä”+]†?þ8Hƒú qv.̃‡)ìB÷®Ÿ²þ§54ªßk+ž……qèða>ïó––ܾ}++kîúûsäð!>j×.Ùt z>gÖ1kooG`àSüüî$z’åçç—0==ó&woy/µ/è¥d×î½:|[[[fL›¼ìã-š'Ìçuôx–åwõêÕyðà§N¢C‡—MÜN:e¨ ª–®y³‹&2N›Ð˃µ5ë~Zöë×fͺ®µÖ6Ö‚T-š 47H.ý·Éªôã…†>#,,”"EŠbnnñÊžEBº/ƒä”Ó¿uãrªŸ¤%˜NeäŽ=3îÀÌÌÌhÞ¬ z½ž={÷³wï~ôz=-š7}£[¸×5mÒ€‘#Çà}ч¨¨("""¸|ù k×þD»:%š¿Ž¡‡ƒC‡ŽpåÊU5Œ{üÛ¨Q}®_¿ÁÁƒÄÓ©ì ¡w¯Ïpp°çÔ_§éùÙçœ9ó/òª]] IDAT†ððpnܸɶí;éÔ¥{Âü%KÄÕâ,ú~)!!!<þ/¯cŒ;!ÓдæMZÄ¿tàë{é aÇÎÝùõ·-<NåÊ´hތƆ@ž< Ì’“ÑÁƒ°ÿAÌÍÍ™={zBõsfÏÀÜÜœ}ûÄõN‘K,]öëúccc~X¶ø(ÓÃ\eË•à¨UjÂbà^ª6—ýE¬6:Éù«nÆÙë^8(Jt/¿ó†ÙªTšÒ5Q›òüy  667·Ê\½~#Ùßèt:Žÿù'îU6d$Mš6OhËžY×ï¾ûŽóçÏNDD§OŸ¦k×®†ã½Qž ÐÌÍÍñ¬U ¯ãG¸ÿ>&&føß»ƒ…¹=>éÅ¡£Gð¿w—ߢOï¸ä7¯ciaÉÝ»þìÙ¿‡¶mÚ`cm-ùœ Çl}à cã'LæÊ•«DFFråÊÕ„Á‰â§§uÞìð$0é†~§N™€££C¢¤W_7ÈÊAcºuëWcýÕWœ¾‰íø—øÎŸ¿Àùó’ü]½ºž™¾ÁÁÁLš2€1£GRÌÅ%aZ1Fý“§Lgò”iÔ®U3CÍ.2Ë‚…‹¸f,ñm“’–ž@JÛW%4ä!öŸùõªôàòÕKì»ò#E¬ÊPÒ¾ÎV/Û·¬Ð‡=—VpòŸ3¼S¨#ÏÃɲXš·Å¹§NŸ¢uË6¼x†“£EŠºpöÜyªW­’ÄÓ=ÿœ=K¥Jî”/_?ÿ[X˜[ò48ˆØX-*UÒ/-¾­V2©šÍóçÏ¿õmvæÍËÙ§ “§LOrIJîݺ$Û³‰•¥%õ=ëâuô0 6¦páÂÜö»‰k©2ôþìs}¿€!ƒ‡ciiÅõ—±±¶Åÿ®?ûì£}Ûvا¢ìK>gÎ1;tè—;~‚‹>¾´i›¸G;;;†ý2áÿi™7;L˜8…g¡¡´lù´j™ð}“Æ Ù¾c‡¼ì#¾2&-’ ¬_ý.¾ŒuéÒ…5kÖpøða4Hü>C‹-èÜùå€&i™7»ÊL¤&½NJ¥âñ“—½Lv.‚¥¥EB «¥¥ …?|˜©Tèuz"3Ð&÷mé§*0Ìäô_ß×J¥ SÓ—O®MMMP*UqéöFÓÏ,Fä ÔÃÖÖ–kׯsýú lmmiP?å»gGGvîØL¿¾}(SÚµZZ­¦´«+]»tbëæMoÔ€V®ìAdd$+¼C!C;%GGÜÜ*E•*‰îòRâáîÆ}»øjÄPªTöÀÒÒcccŠ-BãF µ×êÙãÆM™2¥155¥pag6¬ÿF/™!­y“£¿IÉ’%’<Ùmݼ‰Î:P¢DqT*UBšŸ÷éÅüï¾Éü áÔS·Ž']»¼Y;Þ­kgêÖñ$(èe0ÕsmÇ¥s7±À‰(žãµ›òåËð?ϨöNœl 'šßÆÌ‘OjŽçÛ¶ðyÙé ãNøÎ„ñèьռãýïS¬DIyyqËÏáá„=ãnÀ=ö<ˆ­=õê6àÇÉ>ÀÒÂò­rZ>}š~ýúñÎ;ï`bb‚‰‰ åÊ•cðàÁ\¼x‘ *ä辚4qÍš5Iô]³fM˜41åÑ9­­¬hÔ ‡½€……%×o^ÃҊɧaeiÉ•k¾XYZãן½û÷Ò¾m;²àæ0?çsFsqaÇößhß®-NNŽ(•Jœœi×îCvlÿí›ùÔΛÕvìÜ…—×1ì™öZP8~ÜÚ·kË”©3™1sÔŽñã²nÔQ…BÁ®]»3f %K–ÄØØ˜’%K2fÌvîÜ™èú“–y³«Ìh"5@Ü{¯~âúI¶ää飜<}KKK ÅóÞ°ŒtÖä¾%ýÔ~²2ýx‡¼pÈë@Âÿ33ýÌ’+j’U*gÏœJq¾¤jÖlmløzÔ¾5"Uimùmc’ßïܾ9ÝëoccÍ€þýп_²ó)•Jzõê‘d/¯o[Jµˆ©©eLmÞ$·¬¤¦Õ®ý.GHrþªU«Pµj•l+;‹͇EÉŸhZ¿:ÃédfÿÎYÑWt¥ÂžÔrnÏ_ǽhØ´:E4w4¤ÀWìt¥°¤p–ìJ•øãÐA:uìBD„†‡àY«ß©ÄÕëW9~ê/lmm)Z¤=?é…µµ5÷‰±±š»vÐ4擪ùôôôÄÓÓ“ÜJ©T²pþ<>éÑ oï‹T©R™…óSßõŸµ5Í7åà¡ßiܸ)E‹åÊ5J/…Ÿáå>ÿ»8¸í?Δ¹ æsFÙb..oô‘Ñyß¶iýþmÚ·kKûvmßzKíö¤µ,½M\ºÙÌž=;SçÍŽ2£R* ÇÔÔ,Ñ sFF ê×yó|§z¥=¹J©"<<•2ý*¥’ðˆˆ7ÒOÝo³6ýðð4oòþß) tf¤Ÿ¯j’…KóÒ=qŽ¬Æ¶¿óèV±ÏMPh,ˆ0â-M“3…“£#öv¶ü¶å7ĵ9¾åw­.–êU«1xà`ºuîNýº ‰á¢ï4qíÛ·QÙÝ—¢E Ôþ233åÇKiذ>?®XŠ™YÚºþ³µ±æ½ÿãC¿sïÞ]¬­l¸qó66¶øß½Ë¾{éÐþ#ìí ôq‘Ñ|RfÒZfâû/ääÌ…‹Þ˜™›cjb†±±cc5Ï_¼Hò?ÝÔÄ 3ssÎ_8O!'ç„å¥'ý‹I¤ŸÒ';ÒŒŠ"(8ˆà`‚C‚ "2**SÒÏl*9$„Èût:F(ù \Ê=®Í¹qË8˜Qʱï¸ØaS¨p–¥_­JU._½ÊO?­ãƒÖmp°wäyX(Ož<":&…B‘‘*¥ {;îÞ½‹×Ñ#”*Q‚*rŸÙÛÛ³fÕŠtÿÞÎÆ†Ö-[±s÷Nš5m«kin޺ɃèÒ¡ùxÄ»ìÌg!e&­Arll,Õ*{ðÛÖíDEFRëÝZX[Û¤ê·aaaœúë$GŽ¢Klj5¼è–Ú&#¯§¯Ñh Tú$ !Þ V«±³³ÃÊÊ ‡f¼[¾1J¥QÜGÆÆ™6ÊÛDEEQ´Ht±Z¶mÛ‚½åÊ–¥x±ØÙÚIxD8OŸñ÷?»xöœJ+P´p=zŒ©™)f¦¦± ‰ŽŽ&&*ŠjUª±{ïÜÝÝñ¾p†õëCtttŠ]H !2Wü:· عs;›·n&&:uóŒÕjLÕjš6jŒ^¯ 6V›¦ówAO_‚d!D’ EBPœ´Ú¸¾0£££±¶¶¦Vw Ä×LJãÇ…*#%j5N”ªX SS"£"ãj™•F¨”ʇM/EDDN«£LÉRxŸ¿@¹2eÑëô„GD`bb"A²9pV«ÕX[[Qµj*Tx‡˜˜´:¤Ôl@¡@¥T¢V«11Qcff†±±*Mµ¨=} ’…¹ŠR©ÄÒÒSSS¢Ì£°ˆŒÂÆÚš’%J‹N«M…ÏHa„‘R÷³±1jµSÓ¸žòs€üúH¥™ÁÖÖ+++œ ¢d‰T¯V •J…™™)¦¦¦ézÙHòYH™É###C7gJLMMÑë­_vk–Bø²/jÅI_‚d!D¦RÅõs™–.““•C g§ôöf’šß)•J,,,2”ç’Ï—äàÍB¹¹|eU™ÉéÀ® §/A²"_ËoCK> )_BH,„Ò°qó|S»)ù,¤|å_eÊU’-A²¹GVµ9”å !„Èkç₞¾ÉBdU'YnÚôê;D £B®I9|..èéK,Ä+ä›ÜAÑ !„\“ –Z!„Bˆ×d¸&¹ly7ÉE!„B‘«d´¶_j’…B!„ Y!„B ’…B!„ Y!„B ’…B!„ Y!„B ’…B!„ Y!„B ’…B!„ Y!„B ’…B!„ Y!„B ’…B!„ Y!„B ’…B!„ Y!„B ’…B!„ Y!„B!A²B!„$ !„B‘z*É!„Èf˜QWJQš”•Ҕĕ’¸b‹-Ïx†?~øã‡·¹ËîpüР‘LB ’…"¯PU¸PœR†À7. ~ù·3…“ýýcÀƒ’xPå-Ó%Ðw ÿÆÿ}Ÿ{Ä+;A!$HBˆìWgJj€_†](Ž*™ÓjQÜÃ?É w3ÿ¢ñn’AvqJâLaœ)L-ê¼±ìXb¹Ï½7–÷ïmžðXvžBH,„éc…õ[k‚KQ3ÌÞú[:îÀC3 ?C3‰øÏC C÷–߯9ÏYÎsöéFQ„¢ ëRW\ Í6JQ:Ñ´¤hÐ$4ÛH*HN˜ì|!„ YQP™`BqJ&Y\WìqHö÷Á%dúãÇ=ü‰"*KÖ;>¿Oñgº¶«"nTÄ-Wm—BH,„Ù 55®FÉtì“Wk\£ˆâ&×¹Éõ$§§TCnö8PšIèy®r!„ Y!²‰=o­1-NIL0yëoc‰åþ®íîsÂðÁ¼“œžR[kŠáB1êÑ0Éýmm­ýñ#˜ )´B ’…"+cLg>¡ -ø®¨Å[æ•^ Òî yÂcÎp:‰ Eʽv”¥¬°a8³$Ãr©Ì ޱYŒ¦UéB[þåoœ(Ä$fr&1Gœ$Ä$ !DR,±b£¹Èmfò…)Âþ£;í©OUv²%¡…Ù 'š(>¦7nÔÌËeܨÁÇô&š(f1=zö³›fÔ¡ Í8Ƭ±a$ãðåsYˆ‹á‰BH,„(ð¬±ák&â˦2' ñ/Ó‘hDMö²=úD¿ñçY‚FŒeŠ·¾Â'²›ãX€FüÌü¹ñÆ<ÇñâCšÓŒ:ìg7f˜1€¡xs‹ÅüHiÊJF !$HBLö80é\ŸñLÃ{Nq‚¶´ 9uøƒýÉþ~)ÓxÊ#jÒ€è*šK´¦+5iÀS±”iÉÎû/Ó…¶Ô¥ [ù%Jzò9ÿq•5l ÉP!„ÉBˆ‚Á‰BLa>ø1Š XcÃ1óiE#Žq8UËyAóÀWÌÁsÉÜfŠ9_1€ïÇ‹T¼r zÓT`=«Ð¢¥]ù o~eïâ)™+„ Y‘?¦³˜~ g4–Xqˆ´ .miÁIާy™;Y/g)Bqú1F29‡}ÁŠP_β“õiþýmn2˜¾T¡ ËY„ ­ø#œf7‡iDSÉd!„ÉBˆüÁ…âÌc ÞÜæK†cŠûØE#jÒVI^‘Z:tLg0zôôaÅ ý(‹ìW Wú0 =z¦38CÃTß'€Ñ ÃRÌca„Ò˜fìáG8M+>”vèB ’…ySI\YÄ .p“¾|‰5;ÙB}ªÑv\à¿LIÇ›¿ÙË&L0e$s%ãsÈ(æb‚){ÙÄþΔe>%iŒ§%™Æxy»xò+»8Å:Ð%JÉ|!„ÉBˆÜ¯ åXÆZÎqÏè‡%[ØD<èI'|ñÎô4ç1š^ð>©MÙ Ù¬6MxŸŽDð‚oéË#”yÌÂWF3ŒûàNeÖ°‰³\¡}P£–!„ Y‘ûT «ØÈ¿\¡;Ÿ°‘u¼KE>§{¢ÑØ2ÛcٌgFR»˜m”(™À"V0›ÇÜϲ´4D°œET¡ ƒøœ[Ü  åXÂ*¼¹Å†b&/p !$HBäîTa=›9é†-ëXIuÊ3^ÜJ¢ŸÜ¬°ŽùàGy<èL?Ù1Ù¤ý(ø±–ùÙ’f4ÑüÄjjR‘Þt׋¸PŒ¹,Ä?F2kldç!$HBd¿ªÔ`;9ÉyÚÑ‘h¢ù‘¥T¥,Cùü²u}¢ˆd#Êtlq”Ålq`Ә͢ˆÌÖôµhÙÊ/2äµB‚d!DΫE¶²ŸãœåÚ‰†¥,  ¥É îs/ÇÖí0;9ÍlqàK&ÉÎÊb_2 [8ͳ3ÇÖC†¼BH,„È1õiÄ.qˆ¿hAK^ðœÌÅWÆ1‚G<Ìë9‹ah‰¥)‡»ì¸,Rwº3-±ÌdX®Y/òZ!A²"[4¦9û9Î>ŽÑ˜æ„Ê·ÌÀW¦0†@žäªõ½/›X†ãX(;0‹Œg!JTld7ðÍuë'C^ !$HBd‰ÿъÜf‡¨GCBf&“p£$3˜H0A¹vÝ—2gQ‡f4§ìÌLÖœvÔ¡Ïb)ÓrõºÊ×B ’…¦@AkÚqœ³laïâI O˜ÌÜ)Å7L'ŒÐ\¿ÏbÃ|L0•›IL0e¬¡‹…LäY.¾Yz• y-„ Y‘ŽíèÈI.°‘T¥xÈx¾¢2¥YÈ\^ðÃ•Ï ½^ˆŒëÅŠáÊu|ØÌÊ<·þ2äµB‚d!DŠ”(éDwþÆ—õlÆÊ< €Q ¦ ¥YÂ|"ϓۦCËL†ðcqÆEvx9ãÂŒ`CѢͳÛ"C^ !$HB¼ÁGzЇoXÇ2~æ*âCù‚*”a%KˆÌæ>o³Â?å [0Ç’‘Ì•ŸA£˜‹9–d ÿp4_lSrC^Od:8ÊŽB‚d!DA`…5›ÙËbVщODÏöâ‰ëXI4Ñùj{ç1š("iM7ªÈKZéVOZÓ("ù–Ñùnû4D°Šå¬âgBС2–-ìÅ k)BH,„ÈÏL1c;¨Imü¸Å:~@žú´f§¨@•|·Íø±šoQ `"‹1’Ó^:.FLd1 ¬æ[²y4ÅìP*lå ýC°‚xÀ-jR›MìÀ 3)BH,„ÈŒ1f-¿Ò¦< €ö¼ÇDð ñç¨ÂÎПñ(Qå«m_ÉrwjÒŽžRÒ¨=q§&¹Ç æä«mS¢bãÙÊ*P…;Ü ; ™ÄÚó÷  MY˯c,…A ’…ùë@7bkiŇ<%i‰·8Ç)ÚR•ŸYŒ c†1ƒß8MY*å›í$‚ïÀfa)ÏSÍk¾bß1†H"òͶ•¥›9Í0f Â˜ ,¦-U9Ç)ü¸ÅÇ´ä)´âC–³VžD!A²"?™Ç:Ñ0BéDk.¿6BZ$Ì`½hÎ}îàNM¶ñ½™o‚‚}üÂYþÄ‘Â|ɤ\·~A†Onó%“p¤0gù“½ü’onû0’íü‡;5¹Ï>£93òÆMÀe|éHkñÓy,‘Š$ !òƒ)̦ÐA7ÚógÞ:ïßxñ!•ÙÌJÔ˜ð5ßò3'(I¹<ŸzôÌf8:ttgP¾Ø¦¬V’r| tè˜ÅpôèóÅ6mä_ó-jLø•´¡2ãõÖßüǺў"øœLa¶!$HBäeÃÍpÆM4½èŸ©è¶+œçLâ úÑŠÇܧ:õØÉ>apždáÿ±5¨1a, ¤€¤` PcÂ6Öp‰ÿòô¶(Pð)ƒÙŪSÇܧ/­˜Ä„§b œ¥]ˆ&šŒax>ìáC!A²Boú3…ÙhÑ2^`Oš~ÿ'iƒ;ù 3Ì™À÷¬å0.”ÊÓù²€q<'”Æ|@CZJAy‹†´¤1ðœPæ3.Oo‹ ¥XÇa&ð=f˜³“Ÿhr0MË9ÀÐ -ZÚþRP„ Y‘—t¤[BÛÉ‘ b ›Òµœ0BCOÒ–§<Æ“¦ìæ"è—gk•ƒ dÓ ùô*é±à *ŒéÄ,c:ÁæÉíP  3ýØÃEvñßçÉmpÆ…ÙÏ4V`ÙBkÜñbw†—½š˜ÂX”(YÎZZÒF $ !r³4a-¿¢FÍæ°0‡bá)ÃèÄ0:ÂSð>{ðÉ“ýÇÃVЋ‰Øâ$…ÇÀ'z1€-¬ –˜<· íéÉ^|hÀû„ð”¡tb¨¡Üf–Ìe>sP£6ô?ÞD $ !r£Ô2Œ fÎj–3…±Y’Ϋ5rÖØ1‡u,c8ç©ü:Íþb–ØÐßа€þÌÂþb§9§ÖÝg–³‹9¬Ã;¼ØMkì0…±¬b9昳‰Ô – !$HBä&•pg3{±Æ†ÍlLh3™U‚xÌ@Ú2†Ï#„¦|È^|yŸŽy*ß1œ¢hMo*P£À—£ Ô 5½‰!ŠE ÏSëþ>Ù‹/MùÐЖþ3ÚÒg¥‘ b3±Æ†-ì¥îrBB‚d!DnàJ¶qGœØÏnÒ ºlI{'ëicè%ÀG²™…lÆÇ<‘w÷¸ÁV–`„CY绸Ë †²#ŒØÊîq#O¬·Ž,b3‹ åîOÒv°>[Òסc½ØÏnqbp¥Œœ˜„ Y‘“ŠàÂvR”bœÀ‹^t!&›Û>æ>ý^éoö}:²ÇP£—¬aA<¢ hA×[–ZЕ*4 ˆG¬aZžXçWŸ`Ä÷ïÝ×пwvŠ!†^tá8^¸PŒ¤h}©U!A²yžŽlã¥)ËYþ¡í‰D“#ë¢GÏfVò¡aä2GœYÆ.æ°kìru>†Æ†~€0SÌ \Y2ÅœÌàÆNX®^_kì˜Ëz–³ Gœù/ÚP™ßX™c£jÐÐöœåJS–mÀ!ŒDŽå̤ƒá¦*/;ÁQzÑ…h¢Á†ç¦-B ’…ÈSzÓŸ)ÌF‹–ôâ{òÅvÅÍB&Й:üÎN¦ÌøN IDATÒ™Õœá#æŠQïN°“³Áz3)–«IØàÀYŽp‚9¾> |Ä@Vs††tæwvÒÉÐ<'†è|‘çØÃz¡Ekx2Ô_NpBH,„HŽtKhÃ8’AlaS¾ÛF_Î2šîìæGÔ˜2’¥ÌaG®¨½]È0´Äò){¾ÉóÒ¸óÑËB†åøúØàÀv0’¥¨1e7?ò5Ýñål¾+ï[ØÄHqït¤›œè„ Y‘-iÃ2Ö¢DÉƲ†òí¶FÁú1޼à hËz.PF9º^·ñe;ËP¢b óM~c!JTlg·søåÏj4b=h@[^ðŒqt`ýˆ$"ß–÷ÕüÀÆ¢DÉrÖÒ’6rÂB‚d!Dj4  kù5j0‡…¤ÏÞclãSªp‘S¢‹9B?¦£D•cë´†i„DMšÑvy>ÒŽš4#” Ö0-ÇÖC‰Š~Lg1G(D1.rŠO©Â1¶ˆ²¾€¹ÌgjÔ†~Ï› „ Y‘ŒÔ2ŒÐeÎj–3…±jûs—/iÌ:fðXÊ1œ)‘#ëJ+™Àæ£ÎE½p¤•S†z±XÉDB Ê‘õp¦K9ÆgL`3ø’Æ<æn*ëSË*–cŽ9›ØA jÉ P ’…I©„;›Ù‹56lfcBÛÅ‚FK,+™È`šñ„*S xÓ˜sd}v±’[øPWºz½È‹º2‚¢¸r v±2GÖ¡1³o*S'0˜f¬dbžìÚ-3Œd›Ùˆ56la/•òQÛw!$HBd Wʰ8âÄ~v3^¹~D±¬vžãô¤*² Kl™ÅVư2ÛGêÓ¡eCèÁXœpÉsyé„ = O%0ÚlMßsư’YlÅ[þd=©ÊyŽè2®CÇz±ŸÝ8âÄ6àJ9! !A² .lç E)Æ ¼èEbˆ‘Œ!®¹ÃÚ3/‰&’éËjþÍö>•Ïq/¶`†%ó`ñÌÅ K¼ØÂ¹lîg» ¬æ_>¤/ÑD2/Cûkî‘ÛÄC/ºp/\(ÆR4Þˆ !A²"S)PЇþØP–›&ÓŸFç#j²„©la}¢sƒ"ç¨$ „ÈvØS‹:ÿgïÎãtªû?Ž?gÆž(Ò†¢¢…!»û¾Œ­}ÕOi‘J{IETª»’RJÝÑ^÷]ö}7vB©(¥ˆe 3óûc–è֢̘ß×ãq=†ëœëœïùžïu®÷ùžÏçý‘(Ñ3ÞÿÑwÞõ’w½¤€Bêj®¡6j£”²:ꦣn~±ÕLãL1Â4£mµùˆê¿tOåÎz¹Ê}:y@Uôry¦zîNð¶ótQY=×èéyweËþ¹FOÅh‰&x;S÷u‚Sôö–JêH–äuxUï#ÒÚ­¨bh­±¶êjáhE3–ýäGS4ÅH3?àË%JTSŒcóóö½‚Hšh!J”xÓí°ý€ë$Øi¢Lô‘H‘¢ÕÐX; µq¦JZ¹X+K’d‘™¦i²áÖXqDôaº§ò|õ2,ÃS¹¯k3m3EŠgÝîó\èfyÉZ+³U¿”VÎ…n–,Ù³nÏÔD¹†.ÐÃ+ ;ÆëôvågíVFyMÒ¾—ÕÔ%*cÙ—–f|/—™ÿ§ÖŽ;l7Ç,õ5ÒD dò N ø}B¸E pE2Œ3ê/­Ÿ,Ùs=ã~íUÖDYè&ÞÉ’ÔÐÀ=ž4Ö—ÆúÒ=žT]=‘ûü`çV²ÚSù 4D^ùÝê™C²Íi¯CÁ­ž‘W~# ñ……™ÒG²÷q”(ÕÕs'ó¥qiß·šH–d– ÑMceµSÙ3î·ÄÜ¿ì}ž~Mhšv‡‡0“–»ÓȌĜ¿*’ËwÖæyÃ<¯°"êj¡‘¶h­Œò®q—kÜe‹M¦mŠfg»m¹²OÓ=•Ïs£nžÖÎu¢ÕÑÓ¥™âª0H]$Vœ­Ì6&[ôCŒVbÅÙn«AzdÊ>N­w”uŽD žs§ÿz1W[»¥Ç§}ÇŽÙÇU%ý;6ù}ÇÆåQOi¦•H‘G|a¡@ ˆä@ࢪJ8Þj_[ዼ½í¶ë}c½/R”ªb5ÖNcí”Q^{µ×щæ›f²¦á;krU¿¦{*/1#CĽj^¦ˆ¸-6zÍÃnñ”º˜o’½ó=Ÿn¯yØéö#DdÜ„äSÀjË3í&$;PRµÕH[55Ø/Yv&n²á‹—t«®ð…Õ¾VÖ骪a¹á¢‘4×L6þo;Y’fX`†¹[å5ÖN#mTUW¬fb5ó€ç|i©©/™SH÷T¾Mí\ç.ÔÒ\_i¥·÷=çl±bïBwx'‹lÖ~ Ý¡š¶&ù¯÷=wH·]Tq=¼ªžö`¸Áú»-WY»í÷ß(-î?$Iæ™fª‘&eAÜÿ$ã]ëF͵"98lׄ@ ål<ò?a†xJG Å:Þ=:ã=¿ØêL•Ü ‡wÍ1Ý÷ñЦ:dZ,oV’žÊ{íñ±Aà ÷+¡ôa;ÞJ»Âýà#/Ú{K›çfïã iªƒG½b†ï½gŽ.z8S%¿ØjŒ÷Ü­£Ç먡W=•%‰±!.98ü„™ä@ ËÅÌñªªa—]¦™œ¥ûÞj³á†n˜¼ò©¡¾Fi“K)ëB]¨³ÝÌ6É#L5Ҿ˱ý=Õ‡>7?âìy“¼á±CfQ¶ÐÓ¼¯‹tñ´‡]|X޳‹§TØ4ï[hÂ!Ùf”<{‘¢,5+Ó-ö²‚”ÔH´£‰ü d,[guF8Ò|Óí9L!4ÓM¶Ë®ŒÐ¬6„‹g Dr »IOÆ™n²»[;öHo¢x=êVåTÔH[M´­¦†â4'EŠå™b„ÉFøÜâ— •ٞʃܩ¦V¸ÈhÍ™Hý«TÓLÙe»AîÍmÞe—é&k!N3­¼•Vd$‘äZÒ+iM2.[µk¥O­ô©—=¦¸ã3 ˜ÔÕ\ÕTPÍÍ2Ól+}*Þ(óMÈ1Ü3ÓSy£µÞô¨k=æfϹNå,KâË#Ÿ›Óâßô¨Öþãmæïã ©¡™:â”SQ]1ûÐfoŠ‘¦iS6¥`¬â´Dr Dr »‰¥&`¼ÑÙ¶›lð¡!>4D~ÔÒHcíœé\g‹q¶í\'Q‚E¦Š7R¼QÖç·ŒtOåô$´¾>8$Ihè§…ÿSÚYYšÄw¡;”v–µ¾ð~ÿXX¦'; òdÇÌä$eÄŠSGU5”oŸ0ŠÅæøÂ'&n®)vKÈöÇ3!ÍV°¡&¢DR@ Dr ­H/5›nñ”Ø-ÁtcL7F„圫Ž6bÄ9[ µµT[KwxÁª´æx£,/9›þ¨ÈSù(ŽáQ+-ú[ÛÜ+Ñ ºyÂxW¸ß$o’YÝ?bßd½tûG³×åTu•û5q~Žñ>Ž%Z¬:âÄŠsšŠË’%ûÌ\ñF™e¤•>ÉqaBé‘奦³Í Ñ@ ˆä@ w’j‘®™AŠ+,¶Âb¯yØ1JˆM(54sšŠNSÑ•îµÍfsŒo¤¹ÆÙfs¶;–tOå«< Ž‹ÕÐÖ¿õò®ý-ŸÕI|‡"Y/R”KÜãÿô–G^¼ç d[ïã"Š©¥…:Ú¨­¥"Še,Ûn«ù&¤ ãQ‡Ü'úp0Î(奅¸ ’ ’ÜKó4‘<ÑØ\q<[l4ÚëF{]^ùTRWmÄj£´rš»\s—K–d™øŒYæUÙ$9ŠTOåGýŸk­wžn:ë«–8O¸Êz«z{Y•Äw(’õNrš{½¡¢:i7 ÏzEw‰Ù,á4ÓÂ(âD‹Ý¯ÔúZ+Í2Ò,#-5ó°¹QdŒu‹;µç!÷…‹h Dr û8IIDÛa»ÙfäºãÛ#ÑB“-4ÙsîPZ9±Ú¨£JꪬžÊê¹ÑãÖ[“&˜GZdêae‰ t›9FºÛk*ªã%Ÿè6c 9¨meEß¡HÖké]õWÈÑ6ZçIW[db¶KùPUô®8')³ß8[lZ†0^ke®¾nÌ6ÃÛUíd%}Ÿƒí ’Ài®˜b¢Ývçúã]k¥w=ã]Ï(¬¨š‰'Fk')ã7¹ÀMìÌxD>Ûh£Xd¢ëUr«5t‰»¼*F[ý\oëA<ºÏì$¾’¬WT wxYÀTïzÖ~ñóa/%”£µ:i¡;û´ùÙñFg8ªl·õˆ¹nì¶ÛµÑA3­üÛ+áb‘ä6‘œj1>‡Æ#ÿ¶ÛjŠLñ‘ÎV=c–¹œsÕÓ^=í¥H±Ò'f)ÞHŸ[ %‹Keÿâg¸T¼áº ŽÎã)Íý‹ç.3“øþI²^-qîòªc`»-žs“ÉÞ:,c"}ÔÙg¤{§Ç¾§ÏŽqg”6:h!.ˆä@ ˆä@ w‘_~4MÉcŽè¾H‘l¹y–›ç=3fÓ“ÿÊ«¢¼*®ö Ÿm0û0Í Nö–ef¸Çëªhì#Œò²Aî”`ÇŸ~>³’øþN²^Géâiq®!Âb“ýK§Lwßø-û>QˆÕÚ±ŽÏX–þDaV6x¢ÝH·‚k¤©üòO¢ ’#„õ¥°Ï,³>üøïÇFßn°ágÄ¢Æî‹ÚZ'­u²G¢¥ffÌ2gE,êFkÝ£™ ÜæjãU4ö¸Ž>7÷O?¨“øþN²ÞÙjén¨’ÊI”`ˆû}¨–ÍÌ–V.c¶¸’ºòÊ—±,=6}V6‰MÏ®|ï;ŸY¦‚h1ꙚMbÇ ’À?¦©–82C-†D ækޱú¹9ÃÕ 6ÍÕ šÆªi¬›~ÖZ)> \ R$û@? ŒwŸaNWY3½í1CõùÃ2͇2‰ï`“õ¢äÑQO—¹O”<¾¶Äc®´&“Eöu9©“ær’N²$KÌ0+ºœdwÆ¥‚hÍ´ "9È""C™ON÷G>\¬ò©ažÐU}qŽ÷Ë÷–m6+­œKÜî9“Œ´Á#Þ×Z'Ç(‘)mYãS7«åOˆéJzN¼ÒÎüÃÏ} Ÿµ¾ÈHâû»¬|l·ÒÎrÔY¼¹û1)))û½ö¥´3='Þ•)Ò;žp³Z™&QBœNõ¾Q6xÞ$—º]iål³Ùxoéår­ïFõ óDÈC$ï{- ™O˜I2™²NWÞY~¶Ù<³C‡üM¶Ùl‚·MðvF¥µØ}*­5r¡F.”,Ùçæ› •ÖöØíÝÍ5ʽÞp¦Yä%wñ;ÕéE_ ¥­y4õßåŸ#2ßþËSg§#DhëF7xR~…ü`'\eÙ!¶Ü·òblZåÅÈ}æ\Ò+/ÎÊæ•sóÌö³ÍÊ;KY§ç˜Š@N&Ì$™L³4ë·i&I báþØþEÝuíBeõs³9ÆÚ+Qµ\«×,ò¢îöš†.qô>ÕÙþ ËÌp½ÊÆy]~…t3À£F)椮ŸžÄWPa]<}ÐûëâiIÛ™æ}Å›GˆˆˆÐ¹sg)))vïÞí‚ .PÌI5J7äWÈ8¯»^åC&VLC—¸Ûk^´Àë¹NÔ²W¢9ÆzÚÍ.PÖ•¢ ÔÝ3‚@>D$I2Õ$Ð\ëÐ!@f’L&=9„Zdë­ñ¡>4@…2ʪàt±NWUs$K²ÂB Œ3ß_˜÷·EÜNÛ<éjsŒt›Ajje°¥úëb†ÿgý¿›Äw d½«®ºÊàÁƒíÞ½ÛùçŸoû˜B[ª¨ãlõÓï¶áàfP¢œ¥¦šZ©®…òªíWén™x«}fVšóH‚a f2ãŒrž‹4ÕÂKž‘ä\ (¨¾Æ’%gØ82—;Íð±>eE«¡¥Zª¨®³Ôt–š®ô _l¶Øä4Ñ<ÖOÖôþføÐgâÝåU5µÒËÆyÝ·Úi[Æz'‰ï@Éz—]v™×^{ÍîÝ»]Üær'_¬…N`ž1žÒÙfëÿVß•PJ -U×B÷›yß+ÑÓÌ7Ö|c­¶, ¶,f‚1’%«¯±‚ ÚeWè”@ ˆä@ gÒ íÇl¹6Ú:ä0°Ú2«-ó^Zœne ÕÔJ -ì õ]¨¾ 3Ö]d¢ùÆZfú_¶$Ûl½ûÅeÄ·ÐIe ÿ'ø`+ñý¶²ÞE]dèСÜTÿ~—.|Æ‰ÊØmçÆEÿùPI}5´TUSeEï·ü;_¥‰â1>1Õî0[|XÙhƒEæ«®–ú‡§S@É@Î%=}’q¡3²»í4ÏhóŒ'9M5ÍÕÐRM”­¬h¸Ýn;-1Õ"Í3ÆZ_üá¶S¤n Å&én¨3ÕÐÏTïzÒ¿õ²ÇîƒJâûme½¶çÅyë­·ìÜš •á®øöi"}i¾Çu´Ö—©J;KM­TÕԹʿOùç]¶[l’ùÆZ`¼õV…A“͘hœêji!.ˆä@ ˆä@ çÒXs0>M”²ë­2Ò # ’G>çˆQ] 5´tºsÕÔZM­uÑÏÖX`¬E&Zd¢¿Sýo­/u›áQ|©{ÕÐ2ãø¯Vâûme½Ùï&Jø"åWæûíe"òPæ>÷¬¡kž/DDDp;G)ªª¦ªjª†–NTf?aÿ•Åi³Åã,7ûoû8²†ñFë®§&i×–@ Dr ãH·jJDÈÞì•h©i–šfˆŠ9Q•4aY]s'*£.Úè"É^ËÅ›oœE&Xaá~ì’ìõºžæ¥»¡NWÙ@ó3ªÝýYßo“õ"DZÿ|^_ßOr…ÊQa(EjýïqDˆT^5Õ4S] ÄŠÚçR¿ÕF Œ7?MðoöC8ù9ˆEæÛhC†µäŠ?y‚H²é¡éÉ6œÅf?˜d˜I†eÏªš©¡…sÄŠV_´ú®ñè~Âsñ>ÂóssÝ Š.žÖ&êj·ëæ‚⧘^âa;Žk£Jñ³}tÜnÛŽ‹pz¡Ò~þ´‘¿Ì#fúSìIMÖƒ™`å©3¿£¼lÐÊ;%ÔÞ‘ÑÖbNÔÔ•‚¾è>U’ìµÔt Œ³ð‚>³HO¾Üÿi!.ˆä@ ˆä@ çŠäœóI‘ìKó}i¾·õÝ/„¡zZC‹£â´/­@‰‹l?n¶_Ž‹§øŠ·Ñ)Çuqò±7ŠŒLMª»LK{¥³Î‰õ†Xݶ´lôvNøÎà„¥ ;ÆÏ~ô”Îæ%|*i Æ>¡!~ ·øÁšŒ™â? äL&—!’Ÿÿ¾Û@ ˆä@à°q”Âj©#IRɹ¶šáC3|¨@^®©QÒ€[¿ûÃÏ$'óæ|öütš|?U‘°©´¯Ú­øOMlÝX‚ŸË)Vq¢SÚ÷UäÔ¥ª_þ”;cݸ§|8¶œ—·½àLÕõñ‘*š(¨pƶwÛ铃H2 äl&'I’Úê8Ja;l‘ä i*Ÿ|f›ég›C‡äbz_Ì=í¿óË.¾ÝÈÚŸ"íø©¤<›¢ù©®£7Ö•°é»7Ÿ,%)¯ï}åGß:GŒ úÎ.ù?ξÄs.V¤Òg´ïçØ³§)sÞ£nm]Ð%S;ûfÔ6–ÁþvuK®.óI/q£®Fšé£Ð)@É@ΠyZ¨E°hÊÝÔ<ƒ;Û’”LÓ‡™÷$cmÚk´ã~S ãdg8ÙR×LÉȤDض¤…KÚ:¦ÜeÚ?#”jñ‚“›¾hj|Y½†ÿbæºà 8‚g”uµDr Dr s8CyqƒÇÜà±×þM9¸ï³ªÜEdÞµºV¹Ü7ßãѯž8èmDˆŒÇ­ub½7}ûßîû-Ûº2Æ’§>vT©Ï”i÷„bßÖ¸ÞW×ðÓ¢vÖ|ÜÝÖ•1Ù¢ß åà1S<¶9ï>ך@ I×ùÐ@æP"Ü…æjN¿¸—£J-·cÝ9¾~¯÷A}6eŸWáS—ªÙ7F¹+îsB½7¸þŽu|6ð ñ·¯´nÜÍ’ :®ÚpÕûĪڳ¡â•Ç‘NÊÄB Ï@ “ ¿á@&ð•ê¨o€û<ó'¥‡9šgŸfÑxàróöüÃõ˨¨¶¶b´s–š"Òæ'ŠUš¨òÝÈSp›Ÿ?mä§Eq¿#ª“}ažøÃÍ~}ªÿÙ©[KnjÁ±gOsìÙÓ|ò ÌsSÛÈÝÜ¡»‡U5ÕÕ³Þ°ÊË–¹F_g«mDËÍqlƒUé'OÁm~œu©O+iÇ1`OZÕ»í~ö¹9öHt¶Ú:ëëËôÛ¶Êú÷žÕö¦Fº¿eýÎ=•wºqU="#ÂyÊí´y@¦f’L`Љ%ª)ƱЇ‹\Dï‹9§Ë×Ñë½_ß?Z15µV[[Õµp”¢Ë~ö£¹FšgŒòj¸÷‚Då/íEDŠo>¾ËçÖ7%_š@Þ-¼¾¶Äé*;S ïyÊ—æ«©•ÚÚ8QYçéæ¼„nvŒØjðØ‘ŠÖ^‡öó ¹!Ùæí|¼0œ«ÜÊ±Š©)F¢DSL da&9ÈvØn®Y¢Di¢Eè\¾nWä¸=å]ä.O™ê}Ük¨.v”¢VYêm}uSÛ¥N6LçGÞª÷ «”¿¬§ä”S_½ÍWCŸôQÊ€Œ}|ä"íò‹7=.u¯ Ün¨>.v²[Ôö–¾VYê(EÕÙs…Š“æØ=65y°w³2J…„®\K-D‰2Ǭà‘‘ä<Òƒ‘œ{¸ V„¨(&ª¯ËW_âK×yR% $K²ÈuÓQY]Töšû}a®:ÎórþÙ®¼÷_J5{ÙîÄH=UWÒ˜glöƒ¡údìc¨>6ûAEu}ãswib£u*ªãeKÔužÏÍ5Äý®WÙ•ÊzA7 M°vêU’ «ý÷Kþ×ë¾t½'E«'RT8¹„¦i×”j‘äh‘ÜL+‘á«–c)¤ˆú.r7´¸…ÊGTWJyÛl2ÑP¸Ø…J讹<ïGk@~…Üêe}ŠÔ°÷yJTiÓ/š=”Ï9ó†Wõ°Ó¶Œýí´Í«z€ë<îKóÝà\ñ>VØ1zùÀí^–?Ítík|äy÷j®ÝÎrFÌ8ˆÇ7Z)å]ì.Ϙî?º×¸H!E‰ͱ?Ú‘šiDr Dr sYá «}­„ãUU#tHâetp‹Ç÷ðž¦:Ú:ç )ÉQJ·éïµ3ª¸Ø þå*Ó½¿ŸÐ…2¢=o¾ Nj¨æ£1Šž1Ï×?Ó#Åé+z(¡´ïßÿ³ÿñþm…J(í2Ým³I/çyÎM%ˆsæ++z¿Ïí´Íýã¿–’Âñõ†èY(Ö{ž²Î E×LGzÏlô„ñ:¸Å‰Ê„žƒ¨ª†Ž·Ú×V„òã@É@Ne²ñ ¹Ö¡3²1"¥–«=j%†Z­«çTÕL¤(KM3ØÝ.øª£'‡'‰ŒLöÀÍŸÈ—7éÛŠÐFWÏ™§Rùmjô­å¨W™÷±÷óËú².v·)žw‹ÿë×–"9mYŠ‹ÝíDe¥H1Ü@7©éËêÌÓNW~µ³Xþã—Q¸µÎö²»ur¦NÎô’»-5M¤(Õ4s³ç ³ÚË–¸Æ£ÎV+Þ.=I¿–LJ»¶ ’IˆKξäWH¬îðŠw|ï9s\¦‡ÓT²ÃVÓ¼ç ]äxwièý´Ù^ï¦:[œSŠÞ—ì¿Í"Šëé¿n6@©šcU}¨¾GÿläB÷bÃV®ó„| ˜ì-Ÿ›ó»íûÜ“½%Ÿ®ók5¿Õ–骆Q˧€nèí¿ŠìS7îÅ ©olö«Ü:+¼ï)whèÇ{\GÓ¼g‡­NSÉåzxÞïùÞ^QG‡ŒŽ@ö!Ä#YG°€ 2‘i&ÛeWÆ#Ò¡FÖaå8%ÕÒFmmUÑD>2–ý`µ9F˜c„¥¦Û›æUü[öpõ Ä÷åÎv|8'Õ+9Z÷æÀž™ IDAT8¥œÐêI•®¾WddŠ—'Ðupª#ƹià"»l7ؽÚÞÁ.2B#Ÿ˜vÛé×[`œ;½"V{/©æ1WZjš‹øêGÎ8¶Uÿ×î›M4ÌDÃä‘O%õÅh+F['*«•ÎZé,Q‚Å&™m„9FúÉwaFÒC·vÙeºÉ¡CL&Ì$™HBÚÙ¾É6¬#B„3TÕQ/,ð¦µn5H-qòÊçss ÑÃõ¢]å4Ýj‘‰¿+Ó™÷OO-(òÚÍ®ÍÛË&9.¢¤â¯pnç{DD¤xàmnx)U GŠr“gÁÛûK‚ó'ßyÛcà&ÏþCÅ º^eŸš¥„Rž2ÉÕ‘’g¿Ùä?b¯D‹L4À­®tškE{UŸ›#¯|j‰s›AÞ¶Ö@ \¥—rªîâÈÒ“€§§Ý|Ì%Ì$™ÌDcµ§…8o I+ph) š‰§¬ŠN³ÏMË 7ÇHs´åÌì÷z—Õó:§Ô=.ÙeÅ;‰Ž¹¥–êu–IÜËu/òÆ´_×s½²¢ý`µôûËûù@?­]«¬hq®7‹û-ßà[wjè*½\æ>Wx@e ˜z©Þ®Ó<šsJ¦Æ*ÿÖøÔŸzÛcŽq¼ÚÚ¨­êš+¯šòª¹ÊCV™m•OÍ2Ê|$Ø_&“^eo¢q¡3 ’œÏc@MD‰’$)tÊ!æ$eĈSGU4Ü/Œb±9VúÄlÃ-1E¢„C²Ïê{.ðÝ 7*×·…2íž¶3úENÿŶ]\ð$—þºnÅ]íað¢;ª ‰¼è½ý×Õ6Í{¶Ù´ß:Iöz̓šè>ÃTTÇ“;—™0£ºóš}í¦æÜôÚÁãŒ5ÄXCäSÀ¹‰ÑN9çª*FE1Ú¹N¢‹L5ËHñFYŸf8tD‰ÒP0ÞèÐ!@É@Î'ݪ©¼³Ôc¶™¡Sþ!‘¢D‹+NŒ8§©˜±,Y²åæŠ7J¼‘VúDŠ”C¶ïü 颿V®“øñÃÛ©Óá¿*œþ‹ï6ÓúQ–~³ÿg:ꩈâ›d–zŸ³|d±Iªh¢£ž¸õ€ë-5Í Îu—WÅjï¨ñÃ¥4­èªz)î—-ÿ`²7Q‚yƘgŒÊ9WmÄŠs¶jk©¶–îô‚U>o”YFY&^r¸1üǤ—¸O·– A$¹‚qF)ï,-Ä‘ü7)¢˜šZ¨£ZZ*¢XÆ²í¶šo‚ÙF‰7Ê3¥ eDëá§8G¢/»Ó¤w?Òô *”æÍ¬ýé·Ÿ©¨®’ì5Àm{ßÜæ%‹µÓÕ(ƒ­ñé×K÷TnëF]¾{Úæeͯ4Î] OòÀèõ‡¤R¤Xa±{ÍÃŽQBqbÅ©¡™ÓTtšŠ®t¯m6›c¬YFškœm6‡Áü7Hµ®@É@®b¢±nq§æâ<ä¾Ð!‘ÓT“&¾¢Åî—¸¶ÎÊ´Çû#-5Óž?I¶û'DˆçF×{Z>|k¹¾.µÆ2ö0bAêë@ܤ¿(y zFJÑOÕ+Æ©Å9¥¥Mý{j1Î(XÚÖ¯k¹÷†Ìfãöý·³Æ§†è<Ýܤ¿»5ýC;Ü@ËÌ0xâušTçšÓëš§„^<¤3ë°ÅF£¼n”×å•O%uÕÑFm”VNs—kîrÉ’,oVÚÍ̪ßúßÉŒ ‘äf›a‡í*ˆv’’Ö+­’OU4TG1✴O5¸=-6M¼‘fi•YÒ¦"Š»Ý«b´c 6Èmvÿ&Qí˜Bœrì¯ø”bT=¶”êÅzÉ_ì* ‹~ïÙ?ôZçø*ë<^…Þmø`1/NgÖª_ת&®PEutøÓÐÕ–yvÏÝš¤™¤›ªkî)ÿ'®ùP±G¢…&[h²çÜ¡´r‚¹’º*«§²zºzÜzkÒÂ2FZdê!‹Ïmœ¬¤ ¢í°Ýl3B‡A$¹‡Ýv›b¢6:h®•{%tJ%”£µ˜´Gõö)`ñ³ fmvšƒÂv[³´mûzo·EךéÃýÖ)—ö•yçÚ ßÔWª ܺŸùf3ßnfíÏ©¿ÝÌ7›x~Ë&ENgmýVZWàŠ©¯%ß1hÃæ±m÷&¯yЭºQ?óýSaÙ©ánRøhõ 'Øò?žÊ™ÍZ+½ãïxFaEÕÐL¬8±Z;I¸Én’`§ù&˜e”ÙFÛn$3H·œb¢Ýv‡ ‚HrãJÉqG´HN-]=-é«rÎÍðÜMuMŸ-þ‚–mÎl¢äq¥^.qŸHQ>3Ë.·Á·ÿ³nïvÜÓ‚_vñí¦_Ep±Ÿª°¹³Õ›’tÛÜÙº­IöüAþÚÅlZÞR»å©á××¥s,•Kòâ¥<Ñ!U(šþ’ÕëoTV´ Ýá-}w›'C»ªìMâ¡éŸJRYo©¨Ž§Lò¶Ç¼¡·${³¤_·ÛjŠLñ‘ÎNuÒÆA=íÕÓ^Š+}bVÚ8øü0ƒìBˆG‚Hr¹HNµ‚k¤©üòQ3Bé3ˆ1âÄhíXÇg,KŸAœMfwŠ{½¥‚:’%yÛ#†ýެY–;›¥Î7íϼթ理׌ðƒÂÔØêƒtwøf3÷§÷(Î?—ëSÿ ºÖ§kýd‹¾ª/ßô]ñÉÆ'ýûw “tªOž(þ3Ÿõ[ð;žÊ}ç 3I‘l¹y–›g°žOê¤=Q(¯Šòª¸Úƒ~¶A¼ÑâÓ…ÃI~ù5J‹?O·“ A$¹Šõ¾ó™e*ˆ£ž©&æêã-•‹›‹šW¾}úbÙi±¨‹³Q,j]¸Í+ ;ÆOÖy•–ýNHB¼¼Ö)µêÞ¿Æý*á:O(¨°iÞÏ(%ýwHLâ…©¯ '¥Šä+kRõŒ-œq™ò¿œàýøZ:ÍüÎ7¿1ˆŒàºF©ÿ~yŸ&ÈSùeK<íZ3~J’•lôán°| ¨š›››§“8ì‘h©™³Ìk³(6ýp£ž£ö™e¾!(@É@ne¼Q*ˆÖTË\'’Ó] bÓŸ—R.cY²$KÌo”ÙÙÐÕ`_ïc˜ícÏüIr[ïvœsË×Ókø¯ïŸ­¶Æ.—(Á`÷²6~¶ž›ÞåÞR…òÍõò©PòG [ ÷u³£?K1p:ã?'9…fÑ”-ÁêLXö¿Ûû­§r/e°HJÌj%˜c¬9ÆzÚÍNSQ¬8uÒ\Nªi¬šÆºégmšËɬ,p994Ó!Ô""9ÈåŒ3Êíºk!ÎîÊñÇsŒ=jh¦°¢˶Ùlnš?î¼lì[^UWº_Mçgxú›´}Ã,®~„=©ïGˆt‹çEˆðž'ý`õ!oïöÝ©‰|ƒf$zô´k]S—UÞ×6:QÛh.wr}Ú,òà)©¢ù@ìç©ìiq®sœâÞð¨/-Ê6çh•O­ò©ažPD1µÒü²kk©´r.u»KÝžá—^È$³ü²³’‘Ì3ÛÏ6+ï,ežã*g¥WZ‹M{ ~–"Eî'fÒ zd÷Jk‘¢\á×è-¼Æ{ÏP¤zÿfÑÜÿ)¯ºÖzÛã™~ }V½å´U_(ùÁ3VÆ´Ö¢áoý"~MØ{}úoc_Oå«< …‹ÕÓÖ+zæ_Ùîn³Ùo›àíŒÊ‹é…LNSQ#jäBÉ’}n~†ÅÜ¡®¼˜”uºòÎò³Íæ™. @É@î%I’i&éà"͵ö’ç³}›‹*¦Žfêi©¼JNP5cY¢‹M5ËH³²ÞšqNvš¼!Z)R¼ïYƒtÿK±Ñ¿fQHÓœ&ëž%! »í4Xw=¶¿éè #¼QFï¶»Ýßî· {ÎjË<æÿlµÞEºé¢¯Xqú¸Ê÷VeËó˜Æ³Ä uw’2iamTÕPµTPËuúøÁ"_Zj†±f™`k¨ü—ný6Õ$I¡´w Dr Ûg”.ÒD‹l)’#E©¤¦úZ©«… ª‰Ú§ÒÝtñ¾òY†wqÂaŽ_=Xâ\£›þ 9ÚFëôuµ1>ü÷Â, £žŠ9Ñ23Lñv–Ïok«‹hõ$̹×Þ¸>Î95uÙË™3˜(A·™e¤û½¦’:Þð‰þn3Òln×[ãC|h€ ©¡™:✡‚zbUPÕù:I’ä3 Í4Î4c,3/[ŠÐ‘QL0F²dõ5V@A vö6¨”zZª«…Ú+ªXƲ=Í7Í cÍ0ÖŠ? GÈ®£„{¼¬ž`’w=íF¿øù/oãü*©aý&ìfQR9Ü,E²Ýž¥õS¤xÑ혧Ѷ÷¤Åwùyûöþ óMÔQ%w{QS—èáUuµõ¸ësLœo‚føØ ƒò¢Õ×R=-USW%5URSWÚj³Ù&›iœÆú!­Ìᤠ‚êk,Yr°~ ‚HŽ 6Ú`‘ùª«¥Æ‡e–(¿ª«¯ž–b5U^ô~Ë¿ñ•™ÆšnŒ¹¦æ¸Ùâß#Nw¯*æÛmÑÏM&xëà7‰(ÒjŸdÐÕ3òÊo´W¬°0Ëo……Æ¢µk”¯,–û§6Ü¿øYO—ši¸» P_Å諳ø8³¹Â2+,óŠ'PH- Õ×J=-ê -]¨¥ 3Ö7Ñ cÍ7ÝîÃ`QX_c´À\mÎ@ ˆä@àÈ`’qª«¥…¸,ɧ9K}­Ähª¦† îSþy§íf›”¯9ÞÚlƒz°p”›=­ëEˆ°Ðd}u²ÁÚ¿µ½ÿ,ä®ÜÚŒwç§Î&×ÔJ-qvØêU=Û±¾ª‡ÇÔS²Ü R86ÍÎbÜçÿl»ã½å3<èuÕ4ö¤>ö²çÝi—9r\$ØišÑ¦ J;MÍÕ×RŒ&Ê‹V^´Nn·ËNóLo¢éÆXå‹,icº«ÅDãÂ3"98ro´{õÔXóLÛÇÑŠŠÑT¬¦êi©¤2ËR¤Xn±ÆšiœOÌÎuþ²ç¨åAC•R.ÍÚí~ïéÿÊÏ[ÍÓ㸧¯]C­>yµÛsæa[c(ÂVmª­ˆ¨½6~{ŠGëú:ÿ\$ÃkuÓÌ%nÓÅ£:¸A5õÑÑgææø±²Ö*ïäƒä•O1êj¡ž–Îv®Zk µûôó5¦k¶‰âMôK&Uÿk’vmŸ&ä@ÉÀÁ"óm´!ÃâiÅ!˜Š©‚jb5SW UÅŠÚç+¾ÙF³Œ7ÃXñ&úɹ²o£äÑIOÝ'J_YâaW²&½>¦MeÎ9™·ÚŸë¸Ú›îcÿõÜa;æGsM}4¶ \±Ë®Ô.:ÙIEX¿íŸï#E²wô3Ïx½ SNeƒÌô†Ç Ñç€e»s"{$šgšy¦é§‡ãœ(VSõµTGs%•q™..ÓE’½‰7Ó8³Lð™…’ÿÁMX:é‘é¡Y@ ˆä@àˆ!=çrÿ§…¸¿-’ÓÀë¥ý€S"cY’½æ›n¦qâáxvægzÀPg«!Y²7=áU½ìù§ºû°‡«‡߃6-ùtá<¯~É^{²üxë”ãÆ&\XƒüyR¥ìCÏÕbî%ŠV|Ûñ•GèT›Çƺ}®ò©kÕrÞ.w·«=¨¶–zëè[_æº1õ“ 7ÌpÃ2nDëìs#ZC}5Ôw»G3nD§ÿÃÑôP‹ô$ß@ Dr pD1ɸ ‘ü¼§ÿÒgòÊçÜß< ŽØ'‹ì;k2fŠggâ£àìF„ܨkZRÖÖxÄU–˜‘)û›·šYãZªßj¬“¯¹Èâ>ßú§¹Ð_\¯p®Œ¥K#*Ÿ’vC”̈ŠœÄøO?qtÊÇ̺Éñ•G¸.–'&ü~Õ½¿Ã» ÔÝ,£ôô†³ÕðºE^p·ÿþIµÂœ~s»Ì|ËÌ7H_G+*VS1i3Í%•ÑÖÚºBŠŸû$#¤iñA„4…xä@ ˆä@àˆÉI’ÔRÇQ Ûaû×KO*ª—–TTHáŒeéIE³³8©(;QÜIº{Uí´Â c¼îY·Úa[¦íó,ÕäýøC;+WWüäÏõnϽdîqV(I×&©¹HÁÔ÷~ÜÊ«Óyy*ßüôëºÏº]/–(»©¬²ÅW’¾±Ä W©ì6ÏŠÓÉ]¨£¾:Ûd}®{¿Øjœó!~MŽMKŽ=Gç¨â÷e$ÇNÿ“䨣V[I’L "9"98I/5£®Fšé#ØÏžªnš=Õ¾ìkOµà0ÙSe¸ÀÝ)ê8[ýäI]LK,™E„·z†=…¼8¤™Ûz|îÎ|¸pïäCA¾<œ_SÿÌ_ߟþ%/Næ? H<@(ðZ+}2P™øëœÒ¶Ç!Kà;;ló¨«Í2Ò=‰ÑÊPKýKS3ù\d7VùÂ*_xÝ3ò+ Æol›h¯‰öHµYœq›ÅFšÊ'ŸÙfú9T ‚H™Â8£Ä¨ë| \F¡ƒ¼òe¬³Õfs²Y¡ƒÃÍQЏճZéæãñ,š½læ2•Õ³Éz­~]RšÛÅÄ{øvßlJý»vóþÿÿ~ {þbQ·Sãú†t®Ï ESßÛ¶‹añ©!Ÿ}÷çÛ¢¶s¦+×Sûè$'I9$ |¿ÇTZ&^¯ŠÑJ_åuý3yV?»²[‚™Æ›)5 |ß‚=1;ÕNu³+ÝlD Í4ÃXõÕθ6 ’#– ÆxÐcš:_çKA’$KÍ3Ó8Ó±Ô<ÉÙ°dîᢲzð†•‘`§îöQÅÁPȃô°Ã6½>fÑ7¼Ó55$¢BÉ6)™ ¿ðÓV¶ïdÏ"“)€cóQ:¢¤][ζäD*”I­ìK¾eДT¼ý ì°Í³ÛžUmY;Å*ÿǵµózx|æ&n²Þ]âœçF7{RœNªj¨O&Ƈç~°Îû^ñ¾WD‰­¦û”~¯­±Ú+¾Ïµ!‘±|f©þúºS»lÔÝ]¦ikxÌú?ä•_g½]æn‘"}n¾G²ØQ¡£îNPÚíßHu»xw>sî Æ©T.Iù9µ'ñ…9ªQy8©hêë€D|/_Ä÷*!%…Å_qï‡LXþ÷Û;Ú¿-ŒF³ÊÿÑá”r¶<Óû(EŠÿhIz¥9 0Õ[ž4ø;äT’$ùÄlŸ˜íY=UL#môô”|JxM_ŸZ¾ô@ÉÀ‘KНxÑe®r²R.qÞ óNSу†9CeIözÝ£^ÏboÞ“•u…»¥Hñ´[2Š’ÈCûsxçª!¶¦¾’’Ù°›Ÿv³=‰=‘DFQ @ª.ÿd‰?•¶-ÿ\'£J$ïµeÀ‰<7— ;þÎøJ62Ï@Í’(•XÁÉvùÞê,é¯o}éz±®ÑÓUîs¥{ÕÒRïCèY[Øn«K]à %|gWs±CH Dr øË|o6o–ÖÚyÞ+nrMø‘D„H»Íõ•Oë¬ô°Ž–†*o]=!ŸÆyÓgæd¼ß» ÷Ôç—¾ý™o¶ðíVÖnMý›þÿï·±ç,oã¥×¡Åt¯KƒS¹¿·×fÈbžžÍš-×îÖ±©3í;¿­­«‹<àâ,ë³${ ÖS¼QzªœÊ†˜oû½û«æž1á¯h­ŸlÔFcß…¼ƒ@ ˆä@ Ê×VºD[#Mv…N6øÁCî;¢ûäx¥õðºjK‘âc/yÁìÈò¶TÕHcÙe»îÍx¿f):KÜô5æm“‚±_¥¾bJ¥Šå¶å¹¹&]ªóö§<1“ÏþBìsN¤ù™ìØáÛ¹—h¬¤ªYdJ–ößgæê¤Š[<­½ëuó´:â<¬“ ÖÑã¼—¾®ÐÉN;]¬­¯­ Ä@ ›º È,0×åΓ(Ñíºëê¶#¶/š¹Ü¿-UMc›ýè^m=¥ËaÈ‘¢ÜîYð†ÇlL›ñ-‡×.HM°{zæ¡È¿eö:Ú¿Cô‹ M QíX‰e7òñ¥©"ú¸©.ü{~Š!»‚Û=+RT–÷ã.;üKwkk³UÓØ0K5wù;λºÍºK”èrçYpž ’Ádã3B-úêçbWQÇ´c=ä=½©°cÌð‘ÿmöa´Ãjïz§‹ö½ÕÞÖ/ãýÞM8çx–o ×¤ÌmÃg¹ê¿”{žæ±k/íÎ$¾3S;Ñò ûÔ]L嘂\U#5 pÀLÞÖÏ÷V;]´ö®?lýo”+E›î#…ã!oêãG;öˆë»ÂcúI‘¢«kL6^ "9üïySwˆa€!k~DwuMýÛRM\b§_<®³Î³ÅÆÃÖ¦¢Š»ÞÃà9wHL+ܲo˜ÅÕ’Eùƒk¶pËÊ>Ë£3Ø’·<æ ÝÀ%ˆJSË×Ô¢p~ÆÉòH”à9w€ë=¬h†ÙXÖ³ÅFݧ¯ÎvúES—j©šc½±æ"B„ûÜὬ‘þõ÷ŒÇå“Ï[þ«ºZ¹öXó) ›þú¯„R–™åjçeÈaoÛ5z*ª¸&™ž^1 Â,þŒ ;x`2§<Ã=Xÿ 瞘ê°qU%òDrcÝÔu_œõëç¦ûÈ“UÜ5zöþiˆ«œk©YŽWJãݦ¿| äâ›ÁZÞò_ùäÓÏãê.x@É@à`è­‡7½® BÞ5ÂéÊåºc<˹3ÔEn•d¯—õp³¾·ê°·í4¯«${õß'><+Ã,þŒ_y2>uf¹ËÈÔ™æ!méÓŒ3Žã«Ÿñ·µþn“d¯óuušŠ‡½Ÿ¿·JW ÒC’½.v«Ç u¶ssÝx?]9ï¡BÞôºÞz„ ] Dr 8XR¤¸ÅµFî8%Œ4ÙÉJå’ O¤Îîñž¹Z»P¼Ý ¶¡Ë6ÕoÓ_”<þc`†¯ïá ³ø3v'ñÒBžOs¦».6õï‹3Iþ“à*Ÿú¢äq[6™ÅL–ä ¹Nm³|(Î…Þ7×µî™K~¦J*e¤ÉŽSÂhÃÝìÚ`ó‘þ.I’\ã2óÌv²R>0ZEsô1¨´!&ºËòÈë-ôÒÑ ‹²Mëë º&¶Údˆ>ïŸ_!5Ì¢ÿ¬Ãfñg YÂÎŽ+ÂÎD†üŽYÂ}lµIuMÔ×!Û´ÿK‹<¨£7 G^w{Âë&:Ié=æ‹(꣕TÊ<³]í2I¡Ô| Dr øgì²ÓZùÌ2DûÐÊ‘ÇÒÊ%>¶D-üä]ÄyØÍìÊ6mL‘Nu±xÙƒ¶Ú”±¬@ÞÔ«æ–ÄìÙ¿[Xµ ¬ú-¿Ó­[mò²A7ý²U p‚]ú¸Ùõâüäµ42Ü­]’#Ç|A…üÇDûÌ2çke—á‘Ûlu¡Ö¾·NM1†x[Ôaðºý»VĆêçEk²áÚ«dº1Ù®­—¹ÃÉÊúÚ2{y¿e£¾Hý{oJgà ýc rÚ‰Há´‚óÚ÷c/ûÚ2'+ë²4׋ìÄtc´UÉdÃq¬g¼ãICV$ÇŒûÿgïÎâ,÷?Ž¿g†Õ÷W\SI\r+Nz,3ív¬~©¥¥¦‰K‹æ’Xf¥e¦•…˜––šË©¬¨¬CZ™‡,4 *EeQPÜu–ßÏhf.€0€}^×5×°Ì<ópß4}xüÞßÛ‚…¬¥7r˜CÜÃdpZoh" É"R’În_}œc綯6ý¥;nùÓ™@>!†  ‡3<ËXÆ3“eØÚíRêÐáÎ_屿ÔGì*°à_åo¬Gv‡Jp<*™`d‡K?ÖŽWy €á)¼ìãn…ߎA›:0éfןoÝ*ðBHz^¾>}¯‚•;Àj‡°ŸÇßpùc¥p÷™ “s Êïÿ¬ð*!<@/“@{ºò ;Ì#åæµÝ´ˆB²ˆ”±ò¶}uMêʧ<˼©L8«¹‹ì$²ÜåÆB½-û¡ÿ2è¼ÖG=œÁh—•}›C»Ú—?î*^â(É´¡ wð`¹Ÿ¯DDÂY7•™ÍÂø”šÔ)ÓóÒvÓ" É"RN”—í«{ÒŸOÙÍ-‘Á)&1˜i #‹Œr?†•ña¬óŸðØNn!Ûs¹rŸ}X9ö=þÞî 7½ÿ\ _ýÆ_¶¥HÏ…•»Ád‚ñXêv IDAT].ü\² c:c™Kå ÐA"‹ ¦0Œ'L§¸… >c7=é_&ç£í¦E’E¤œ)Ëí«½ðæiÞd _P›úüÄ· ¤_²¾ÂŒßHž¡õ‰a+_³¶HÏ-íE|7úÁ§#aÏ“0ÌY6±êghÿ \Û.ÿüÐàpÀð€Ë·ƒøšµÄ°•ZÔg$ÏT˜ùÛÈz‚èÀO|Kmê³”/x†7ñÂÛeç í¦E’E¤*«í«ÛБÙÁPÆc¥€W˜ÆHúp„ä 3viÅ=LÀŽ×y¢ÈÛŸ¿ˆoÃðËdøb$„ ‚·Àáæfд¸rŸ è×¾?L„ È)€7ÿ­^„ák öHáŽw"W»/×îìïÑë<;÷0Æ.ücëj¥’ÌCôa>Ó°RÀýŒç#vÐ–Ž¥þÚÚnZäÚå¦!©øÎn_Î&ºq#²‘~Ü\*˜13‚'yŒçqǃýÄñ$÷óÑnÜãUÜñ$œ·ùŸ‹uŒ…[aïqøh8ø×3n#;¤eÁñ,ÈÊ‚|0ÛÀ ¨a†Æ¦†äYs¨ 4¨i<'=B#aÑVã¹Å±d'ÜÞº6¸òcãg>g9A<Ìc¼Ê“ ¨0siÇÎÛ¼L$¼Âû´¤ð¯ñ4Ëy;öMm7-¢,"ÀÙí«¿bë¹í«ƒèS¢[àÖ§1/ñÝéke>SÊÕ¶Ò…u#ý¹‰‘Åi–\Å?çÛ`Ã/à7ºúB‡zк64­õ} Fe¨ì7£ …ï¥Ê}M)x˜S¨ 8¬Óþ _']ÝÏ™klàQÈ}g–0ƒ[¸—›ø7ÒŸmåpWÄËù•hî¦ S™ÏPÆ1…yô¤ÓxÔüWm7-¢,"ÈÙí«7³íÜöÕ0¨D®nõç>ž% jpœ#„0²\n+]îxð°‚çI¿ŠÝÿ¼,0°9¬ësÑ¿\8û÷ƒ HˇãVȲCÌîàåiéÆ È9Ú–Dûfü-ÐÉý æ,ùVbtÑí,³Ø‘Z¸Ç§sŒ<ÏD^áÿË6S@~…šß\rxŽ |ǼÈrºÓ›pb˜E0K ^^ÛM‹($‹Htvûê"Ïm_}¶§rqTÁ‡§ %ˆø†pžæár¹­ta`wp'_ñ1°èªŽ5»;Lí ™y”‰Y” ÉY”‰™Æ}Ê(¸Ì¿øÿÀanÂDÓ*0¦-ŒjjAØ?`^7X‹c!öTáÎÍ· µ2ú&¿»§ð?Ó,âFnâñ+“XZˆ¶xåÑ÷|É0‡·¹… ^e½ÀlÆ»óж›ùûÐÂ=‘kPIm_Ý™@>!†  ‡3<ËXÆ3°Bd_Lÿ!ìª69éV&w›ú„Ãõëá__@ð÷0w'¬Þ [S \P„’ØÄ,ÙMÞ‡!›áûTðñ€qíà—{aË0¸x\áü¡öàf†ð}Z„šf+¬g Á„àKã ;ß'9F0™ÅXr8CN ,Öñ´Ý´ˆB²ˆTpW³}µî<ÎV²…†ø±‡í ¢3ëy«ÂËtP‰*|ÅDòu±ãe·‚Å vAÔÑ’?×|;¬Û½>ƒë?€Åq‘=}aí­t?Ìé M«\äÍݣ͖cMe$_óP‰*LgA…Ÿ÷u¼Å]tfÛiˆ«ÙÂÌÁ ÷BCÛM‹($‹È5¢8ÛWûÑš5Dòˆs1Û[Ìe($°·ÂG ·Ñ{É&‹—˜|UÇšÝÚÕ„¸“0ËY)öŒÿ4|‚ÿgÔ*×ó†`ÿ¿ú56Â1ÀmÍ Yu8˜_,Þk¾Äd²É¢÷Èm~þØË`Yâü—•±Ì`‘øÑúŠÏÕvÓ" É"r)ÊöÕ÷ñØI{ºr˜†Ó‹×¹ª’„òÂf:ëØsUÎ/³±r]Øõ+«–ÄAÇàáð~¼Qs|gSø²?Ü×ÜÊcœW‘—Eƒ½˜m{SI&Œ9ÌdîxTøß+¼JЋÃ$О®|ÂNóÈ%Ÿ£í¦E’Eäu¥í«kR‡P>åY–àMeÂYÍ]t`'‘×ÌŒ`ÍiÃ~c ‹}œÒ*³¨å¼Eäxàhü>L‚Ãg`Í?á¾–Å[°w1+XÈ~£9mÁ¤kæ÷a'‘ÑpVãMef³„0>¥&uþô8m7-¢,"׸Km_Ý“þ|Ênn!ˆ N1‰ÁLcX±Wÿ—Gç/Ö{G¯ª¥™«Ë, ãX.Ì‹†Ð_ŒÏCºoÁÞÅÏ < TüE|Ê"ƒ) ã “Á)n!ˆÏØMOúÚnZD!YDþ.ܾú ¾eﲄ/¨M}~â[Ò/K lySR‹õʲ̢0ÞÝg\=nçÜ]oi m‚x­-â»ÐFÖD~â[jSŸ¥|Á|Þå ¾ÕvÓ" É"òwpvûê(¶áKCFñ ÞØx™Œ¤GJpG²ò¢$ë ja”Y¼]:Ý,®Vj6ütL8•]ü{s­-âûËØ‘ÌXðCx4ÔvÓ" É"òwqvûêù<;P7¦ò8Ó™E-j_S?kI.ÖÀXÊù;§÷¹‰.ñy­-â;ˇjLb:1ìgƒ¨ƒ™5¼Ç8Fj»i…dù;Éà4sy–áÜËÏDQ‹ÚLãbId!‹iNËkâç,©Åzgmˆ7J-ëd”^”7¾U {#p8 †nkX²Ç¿ÖñÕÇ—ç˜Ç¯$ñ,/RúD³“ÑÜÇSŒb5+´Ý´ˆB²ˆüÝØ±ó)r ÝéOO6Ž'^Œ"˜ŸùU|ô—.II.Ö;+ê(,Øi”\¬èktº(OÎî°w°Ã˜ëJöø×Ê"¾´bKÙÃAg*Uñá;63¾ôä6ð•WˆˆB²ˆÀleéÁõ¬ä ( ˆAlæG¾ä{î s{»(©ÅzšµÍèlÑ®&̾±|ü¬u*Á´î0¾³ñùœ|AMÀ·RɾVE^Ä׉.¬ä~æ7b4î¸ó Ò‹®чoKð÷DD’Eäò;¿2‘‡i ˜Ë)Nr7³–O‰"ŽyO<ËýÏQ’‹õ.”kƒFÙÅäÎe[vØVÿ ’ÇÂK=¡a%ú)¬ÿ “Œ«Êµ*ù×­h‹øzsálb Û¹‹{( €wYÆ ´a8÷²‹ú_D’EäÊŽr„çÁŸ¦<Å$“H+®cËØC“™A j–Ës/ñÅzQ–eUÜalGˆ~þ7îog„áÏöCÿaý¯Æ{K7?úº?¶ª.)aŸ ƒø?¾çg>%‚r+™dð/Óžf<Êö³Oÿ±‹ˆB²ˆÝ²XÌkt¤%#B ;©G}žaq$ñ¯Ñ˜¦åêœKz±Þ¥¸ºì¿6„öÃã ì6èPŽž¹?B‹¥´¾:øÇÔ_†ƒ™Ð¬jÉ/àƒò»ˆÏ /Fò?óﲞŽtæ(Gx–§hKžaGHÕÜ"¢,"WÏŠ•XGOn` ·±™ÿâM%‚yŒhâYÎZ:rC™Ÿgi,Ö»W”]xX`pØ2~ã:|†|MÞ‚­x‘ÍíX漚\Ò ø ü-â;ÛÆmy%4§%ˆçqÆÒžf,ä%uª‘"qÓˆHQ|Ç&¾cþ´g“¹—¡ÜÍ`îf0ßó ¯ñ2ßQ&»“•Öb½K9[v1õØt$e5)’³ŒûÄ HÊ„”,(°î¸M}`LÕêU6¾–‘«caq4Ä/ÜqÞÝÏuþc_j ·û=»ˆ¯÷2<Æÿ¹|ÎëãË8gc©ŠÑìä5æñ)©K…ˆ($‹ˆkŲ‡`âžf,2‚1ôäzr ±ìáMð!kÉ/Å«¹ç+ÍÅz—3kìLƒuÀßük]üq6¤fAb&¤fBn>XìàÔµ€Ÿ¹5V[bê}£Þ & –Ä9« hç–šm,àäg,à{1¦äþ—˜LOúŸ[Äé¢-hÅcLaÃÏ-&ýŽÍ¼Ê<ÌûÀØ dW2Lû¾Nººó[¶×É]Ji3ų‹ø&ó"3YDJµÌ¥]x‚i13fìØù„y•yêR!"%J5É"R"2É`¯Ðæó±ì¡ yžùüJ2Ï3Ÿ†¥T·êªÅz—Sɾfhcn¸Í þí³¡ÖQ0%É@*XBJ*ìMßÒ ñ4X3}ÉMîNÊ!0€N9ðŸëá…¶P÷*ºîy™;ä[KïgwÅ">µqWÓ•d)Qù䳆÷XËJn¡/3•žÜ£ês," É""vìl$œþôäVzÎÜqg8£ø‘_X˧ÜÄÍç_–‹õ\Yfq%™V˜o\Y g`y<×Zú@||–ìúó:»ˆ¯U˜Î‚s_W7©HÔÝBDÊ•üÄ0î¦9-™À$†ò wÄñ3Q|ÉËt±^Y”Y\IžÞJ€ÊfXÐF·2¾ö;ØesNçïÄ÷/Пþjã&" É""WëñLbsx†G˜ÈÃŒãºÑšnTR8Ås¼È>~g?ûˆg/ñìå Y¥vNe]fq%Ë“áùvP» d[K¿íÛù*S…–´vÞZÑŠë°r wªð”³4FmÜDD!YD¤„œà8s™Å«Ìc(Ò‹[È=4¦1¹ÿ/O%…xö²Ÿ}ìwÞïãw8@þUÖ.j3,,ã2‹KI/€v¸8p²äÛ¾yàÍiÅu´ -i}îÞ—y¼È>æ?láÖðžºTˆˆB²ˆHIÊ!›wã¨Mó®Z¶¦…3¬µ ¾4À—ÜÌ?ÿô|6’H8wÅùlŽg/‡IÆŽýÊ'aÂXÉa*ŸcTÝš;{'77Cuw#8…3 i|îŠðùãÜ?,X.ú¼\r˜ìûÓdz—ãÓ/°ˆ($‹ˆ”¶ãã8Çø‘ÈK¼ xÍhA3Zpý/ðö_&àm8O¶ÇZÃú¤òw5yd+¨ädz 60²1,{ù½üuû¹óµ¸H˜¼nÜ@7ãÁ¿ÌÀÞàÚøÄqøúql‹¹·TêŸ £ª;ŒomaR[u¼=°7E>D§ýÃ(¨9Šæ•ˆ¬÷ Ö#/þùýÜáÒ^ü("¢,"RAœ!‹vÃο|ï/õ϶Ötøi&íû £æuoñÏä¹ùäè?=§DêŸÏsap€Wú´ù…V×mÄâ‘€ýdGòb§Ó=ñpX°'N„v“Ékú2_±©NXDD!YD¤ä\´þù$¼ü»‰)mï~ ó" ©­íUÕ?azxÉ:as•ÜÛ-À½Å\LnÙXö$ù—‡Ø•RÏy5øQâÙGZòoüتÕù¹U .Ss)"¢,"RÊžùÅÁ¿@;Ÿ3ø]ÿÓbþø^qêŸÓ€z@ÿûËk™«Çbó–JÍ>Æd²á~J®Ï«±ž||ìGòùþ¯'X+Á8?߯ÿ¢9QH)e¹6ñüÐ&_%ÿÑí¢8õÏ]›wÃl?u®NØ\g}ý·Ó«ñiL€ÕkÀ¼XˆM?rÅs M„`?ÞB~/z;8…d)²¨“°àw˜Ú6Ý IÙx’Î@r¶qŸxÆøzJØ/]ÿìØoì}‹©;·7€é×C¯zÆ÷²­°|?,ˆƒ„"¬©‹Ë„ˆcp{Ë·ƒ…d‘5ëØyÖÝ þÕŒÛÅØ– Çs + Àl/;Ôc;¿–-H}Œç¤çCèï°è7ã¹Å±$ÉÉ]«k®DD’ED\$×ë“áÇO k5èP ZW…¦• ¾7Ôð„Êž`q_oãvQ¦8’Bc°[á˽ R¯rç\+`‡æJDD!YDÄE¼Ì0°¬k}Á7¬@¦ófäTÒìpÜY&(p³¼< †´hÜê´ ùû­4΃qí!ô,:iŬ'Ýȸߑ¡¹QHq‘ÙMajcÈ,€¤\H̃¤åïü|=¡©³wr{T·hÎDD’EDJYT,H6:[¬hctº(OjdœÛÑ3PÙ#ëhÎDD’ED\`ÖAˆ;í*ÃìfåãœêxÀ´f0ÞÙyI’q\Woò"" É"".k‡¿e“—mÙE`uXÝ’{mßzÀÐhx!âs¡¥ÜYCs&"¢,"âeYvQÅcCôð¿np¿¯Ñù³cÐ'¬O56 K3\Wó%"¢,"â"®.»ð¯¡máp/k ªÂÑ|˜{Zl… ]ðÕq8Ûºyù1ȲAßjÐÎ[ó%"¢,"â®(»ð0Ãàú°¥+ürŒk >nðý)²š|!ñ˜û×ç¦Û`å 0ãëi¾DDŠÊMC "R$æ@RÞ!úl&ã$ì"¼ÜQÛ¨wˆÉ„%‡`uŠQ>Qq9qn¯f´ƒ[xDó%"¢,"â¹vXþ{šxW›8o½ ‰'4õ_häiÜ/v »kî¬ùvXwÂ’!2ýêÎoIš’»VÖ\‰ˆ($‹ˆ¸š(p~lò€lÀÝy³8ßqÏ¿?ÿc“óùù@&î<ÆÕr8ÏM[T‹ˆ($‹ˆ¸Š— V…u .ÿ8›åAb$@r$Y æÈ ØÅgCúsGe¸ßǸÅäÁ’tX Yö¢ŸßXç®{ÛÏh®DD’ED\dv]˜Z2mF­q¢3ü&;Ãp¢3§X¯°p¯zM¸¹A‡¡©;Œ©£ªAO«óêÀê Xœ±ù…;·vÞF ¸,,?®¹QHqnÞ0¹–q•¸O"Då”Ìq ä8Ì>ƒª@puèé 㪷ïs ,6dAþe‚÷ø:FÇÊêl!"RTê“,"R ^&XÑÐèB±àDÉäóå;`]&ôJ†ëŒ«Èv#0¯õ…¤æ0§¶qåùBÕ-Fë7zLó%"¢,"â³ëB;OˆËƒYi¥ÿz±ù0> €à£F­r= ̨ û›AxCèWù7õ‘µ-¬#N­àDDD!YD¤T_f1â0亰sD––œ†Ž‰ðdx?¬¸³2|Ùî«jÔÑ×5¦«È""Å¢šd‘"8¿Ìâåã¥SfQX‘9Æí‰c0²L¬kêÁu• ¥'ÄçÁgéš3‘âЕd‘"pu™Ea³Á¼“zÊøülÛ·°4£E²ˆˆ($‹ˆ”š²,³(Œw3Àf†z^pFmßDD’ED\aXÌðú‰²-³¸”T$:ßÕ÷d©í›ˆˆB²ˆˆ+˜Î»•CÕ-àëm|ÜÈ®7x…dØa”Z$æCR$;ïÏ~žR…Ø¡ÏÜîÓëC¯*Æ×²í°ü,8 ù…?¿w3๚,àKÕæ""" É""®0ë(ìÌ…uM²¯‹?Îæ€4+/€,ØÀl/;Ô°74„Ö-Hô‡ÆžÆsÒmz ¥Ï-ªTç¾AUŒ|/žÒ|‰ˆ($‹ˆ¸@®Ö§Ãg «tð†ÖÐÔê{@ Tv3¶³öu7nOÑ)°7…Æž`·Á—'atÊÕ_ý]–a„ä.žš+…dñ2Á@/XWý¼/:€|çíl6AšŽYf(0ƒÙ^¨á-5€F-Hþv+sá_@\-͆EÙf/þùa‡|»æJDD!YDÄEfûÀÔ*iƒ$$:ï“/ø<Å—9Žã×Ã45™¸Ý¦W†^Rž¨Ës`A6$ñÊòX碽íyš+…dèæ“«€ ès¢ò¯þ˜à«|ãv£»–ïô„ •`l%X› óÎ@l!j”Ûy@_oȲÃòLÍ—ˆHQ¨œˆH1x™`E ° ²J& _h[ L‡ö'`U®ñµa^°§|ZÝÑ—3ÞÇè–±2 ÒUn!"¢,"RÚfû@;7ˆ³Â¬ŒÒ}­X+ ? ­ŽÃ›Ù〠Oø¡&|Wúyaø|ÕÍ0¼Šqe:4Có%"¢,"RÊÎ/³qÊèpá 6˜˜ ͎Ü3î0ê–¿¬;kÁ}^Æ•m€‘U¡Š"r ._s&"¢,"RŠ\Qfq%iv˜™MŽÁÔ,HµCG7XW †{‹M‚ öÂtYDD!YD¤´¹²ÌâJ20ÿŒqeyl†q¥y¹ ÂF IDATºªq–Z¯'"¢,"RªyůŸ)›2‹+YžÙf¨íÙjû&"¢,"â&þÚF¢IwÀçùÈSÛ7…dØc”Z,È4:[¬¨itº(OFV…Jf8^•ì0Ò[s&"¢,"â³NC\´s‡ÙÕÊÇ9yšà‘ª0ÑÙöm™³9Ø[oò"" É"".ë€'²‹Ée\vQÕ SªÁÁF°¤øY`ä1x&âmÐÒwzjÎDD’ED\ ¬Ë.êZà…Ô^®¾ˆÎ‡ÁÇ`e&X°ã±Á*¹QHq•²(»ðsƒ7jWŽCª õ¶äBÿ£Ð9ÖŸ1®pƒÑ.Ë}=ŒÍODDD!YD¤Ô¹²ìÂßVÖ†} a‚x› <nJ…¯ràÂ}MÒ°2×èX7^W“ED’ED\åü²‹/ëÀ7uá0º ôð„ªWY†q£'|Zö4„aUŒ¯­Ê‚ö‡a`lË»üóCáy¸—ÚÁ‰ˆ•þNDä*Ì: {òaUmèmÞ^|ϴžã1{ ŒÛ¾£nøbLÀíÞ0½ôr+Ûaìž· ¬…?·8+DäÃíF;¸…Ùš/…dÈuÀêløæ0´w‡¸ÞÝø¸;4w3nÏ+y°: Í Y6°ÛÀÛ´iÍšp¨!4p7—n‡ÐLX”i¶âß’#$wÕ»½ˆˆB²ˆˆ«eÛ!5<¬m†#&øÝ ­Ý¡©Ôt“°€›Ù„ÝÏ;@N*ü–JwpØ!ú LË€¯ ®>ÄcM‘ˆˆB²ˆˆ«xÝaÝåÇYÁf…T;$: Õ¹f°¸êºA×Ö-¡aSvGlÆß á1°$V[nE5ÚY²±£@s%"¢,"â"³½`ª'd: ɉvã>ùüÏb‡ËåTÇ‘}t0™hj†1î0Ê:˜!Ì æ9Œ ¼8bí…;7_3yõÏïæi®DD’ED\ ›&{màúœ([É7Ñ!y0;¹A°ô´À8wãö½ Âòaƒò/sœ‡<7ù ùÆUl)<µ€)/`E%£ýÛ‚¼’ ÈçËÖY¡W6\@†ÃÌk½!© Ìñ„¦æ‹¿¹Ÿ-µXš«ùQHqÙ^ÐÎ qv˜å‚k‡ñ¹Ðð çBŒê™`†ì¯ áÞÐÏí7õÛ< ™Úàë|Í—ˆˆB²ˆH);¿ÌbD6¸òBm––@Ç3ðlxßÙsùN7øÒîså1ΫÈËrA•"" É""¥Êe…iƒr¡qLσÃXã÷¹kÁžˆˆB²ˆˆ ¹ºÌ¢0Ž9`^>„:Ë*B¼Œ{áZ°'"¢,"RÚʲ̢0Þu–^´sî¢{"" É""¥n»Qfñz—Y\Jª~L&8eׂ=…dW0w+¯,Î{«¦KDD!YDÄ6ä¥y¥å¯º»ƒ¨á€Û,š3…d‘Re3:ZX0:\x•³ó;»Ã^œp[[‹ˆˆB²ˆH©›•q6hgÙÞåãœê˜aš7ŒwžÏœ£Ú"È |Mš3…d‘R–‹ÑÙ†Ñé¢,Ë.Ý`uH®/U‚†&š ëó Üj\U~HW“ED’ED\¡,Ë.ª˜`¬DWƒÿUƒû=ÁÍŸåCÿ # Û¥ÆãG»é^DD!YDÄE\]váoÐÊp¸„U†npÔss Å)Ê„¯ þØ‚úk´C3³ð‰ˆ($‹ˆ¸ˆ+Ê.<€Áž°Å~©ã¼ÀÇßÀ,hr B²!ñ"»êÙeÎ6pZÀ'"Rtn‘â9[v1Õ6ù@’ݬIvH¶C’íÏSìPPÈã65Ã/å õœ—22°:çBl!72y·žóøc_ªCs&"¢,"â³r`§ ÖU1J"ü/qEÙ¤:Ctªrí`q€ê:ÿÖàׄðwÿcO+,É3rVCnªÃXÀ7ÈÍXÀ÷¢vàQHq…\`}>ü÷41W›XŒ›˜¡µók5ÍÐÈy»¨#ûàè>ÜÁá€]0-¾¾Êó–!¹‹ŠëDD’ED\­àë€6v¸ÞíMÐΞç?ȘÁj‚43d™Àno4mà ›²í'X¡“þc‚P ,²AZ1ÏË Àù*µQHq/à3¬ºÈ»©8à€=Üö9ŒÍ>þôØô™LÜn‚éèe‚3úè#Þ~ûmªT©R¨×Ђ=…d‘ £[·nìÚµ‹Q£F‘““sîªñÑ£GÿòØ£Gž»ºœ““èQ£Øµkݺu»ìkhÁžˆˆB²ˆH…`±X˜9s&‘‘‘´lÙ’èèhºtéBhh(Ç¥“¬Ãá 44”.]ºMË–-‰ŒŒdæÌ™X,–‹>G öDD’EDÊ=???¶lÙÂóÏ?Ùlæ•W^¡GÄÅÅúqqqôèуW^y³ÙÌóÏ?Ï–-[ðóó;÷˜:À4Œw–ZhÁžˆˆB²ˆH¹4tèP¢££ $%%…¾}û2eÊòòòŠ|¬¼¼<¦L™Bß¾}III!00èèhž½í6V› Ù /™ !0Ô®{""%ÁMC "RrªU«ÆâÅ‹:t(6l`̘1œ8q⪽yófnlßžONQ?1+&L`>sÀb ¡{""%AW’EDJÈÍ7ßLLL C‡%++‹‡~˜»ï¾»D²?j‚=é'é´l)ÄÄà¨[žšÁ‘­‘ÌÿÇÍ|¥€,"¢,"R^¸»»3gξýö[š6mJTT:uâwÞ¹ªãzƒM°Å¿˜aœ |€ï0Äþ•«4†7ÝÄ·ß~Ëœ9spwwׄˆˆ($‹ˆ”­Ö­[ÉŒ°0ÌÄ_wÑ7ÞÈÿÅÇóp3Ð(Jtm Ì1A’Öš § 2€Å¸Þ½°Î¿îßO`` /¼ð3fÌ 22’Ö­[kbDD®’j’EDŠiÔ¨Q¼öÚkT±ÙàÐ!L@KçíB6Œ¶l‰@ì¼Or~íÐÍã€;Lp¶É[ °Ä«u‘ãZ­Vž~úi¾úê+Þÿ}ºvíÊÏ?ÿÌã?~ÕW²ED’ED¤ÐjÕªÅÒ¥KÏm½fÍžòñ¡zFM&Î[cç}SŒ>9o—:°³…[Æ•â0Dòœ"##éСùEƒo¿ý6wÜqG‰-QH‘KêÓ§ï½÷ 4àôéÓŒ7Ž5kÖÆUáÝ—xž;Ðà¼Ð|aˆ®üä€íÀr+ƹ>}šû￟/¾ø‚Å‹3hÐ zôèÁƒ>ȦM›4y"" É""%ËÓÓ“¹sçòÄO`2™Øºu+Æ #11±PÏ/À(«H¶^êA%ÔßxÍš5DFF²jÕ*n¾ùf"""xõÕW™1cF±ú4‹ˆüiឈÈøûûŤI“°Z­„„„лwïB䲘˜HïÞ½ Ájµ2iÒ$¢¢¢ð÷÷×„Šˆ($‹ˆŸÉdbüøñlß¾€€âãã dîܹØl¶rþ6›¹sçH||<lß¾ñãÇc2™4Á"" É""ES¯^=>ÿüsÞ|óM¼½½yçwèÔ©Û·o¯p?ËöíÛÏõmöööæÍ7ßäóÏ?§^½zšh…d‘Â0`»wïæŽ;îàĉÜ}÷Ý<üðÃdeeUØŸéÂï¸ãvïÞÍ€4á"" É""—V©R%/^Lxx8uëÖeÓ¦M°aÆkægܰalÚ´‰ºuëÎâÅ‹©T©’~DD’EDþ¬S§NìØ±ƒàà`òóó™øà–/_NÕªUõ‹#" É""תnݺ±k×.FŒAvv6ãÆ#((ˆ´´4 ŽSZZAAAŒ7ŽììlFŒÁ®]»èÖ­›GD’ED®%‹…™3gI‹-ˆŽŽ¦k×®„……]Ó‹óŠËápF×®]‰ŽŽ¦E‹DFF2sæL,‹HD’ED*:???¶lÙÂóÏ?Ùlæ•W^¡GÄÅÅip® ..Ž=zðÊ+¯`6›yþùçÙ²e ~~~QH©¨xàbbb äСCôíÛ—)S¦——§Á)¤¼¼<¦L™Bß¾}9tèÄÄÄðÀhpDD!YD¤"©^½:k×®eÕªUøøøðá‡Ò¡C6oÞ¬Á)¦Í›7Ó¡C>üðC|||Xµjk×®¥zõêQH)ïzöìILL ƒ&33“‘#Grï½÷ròäI ÎU:yò$÷Þ{/#GŽ$33“ÁƒCÏž=58"¢,"R¹»»3gξùæš4iBTT;wfÅŠœ¶bÅ :wîLTTMš4á›o¾aΜ9¸»»kpDD!YD¤¼hݺ5‘‘‘̘1€^xÀÀ@âãã58¥$>>žÀÀ@^xáf̘Add$­[·ÖàˆˆB²ˆHY=z4;wî¤k×®$$$ЫW/ž~úi¬V«§”Y­Vž~úizõêEBB]»veçÎŒ=Zƒ#" É""e¡víÚ|üñÇ,]º”Ê•+³zõj:tè@dd¤ÇÅ"##éС«W¯¦råÊ,]º”?þ˜ÚµkkpDD!YDÄUúôéÃîÝ»¹ë®»HOOgÈ! 6ŒŒŒ NÉÈÈ`ذa 2„ôôtîºë.vïÞMŸ>}48"¢,"Rš<==Y°`øúú²uëV:vìȺuë48åĺuëèØ±#[·nÅ××—ˆˆ,X€§§§GD’EDJš¿¿?QQQLš4 «ÕJHH½{÷&11QƒSÎ$&&Ò»woBBB°Z­Lš4‰¨¨(üýý58"¢,"RL&'NdÇŽ°wï^™;w.6›MTNÙl6æÎK`` {÷î% €;v0qâDL&“HD’EDŠ«~ýúlܸ‘E‹áååŲeËèܹ3Û·o×àTÛ·o§sçÎ,[¶ ///-ZÄÆ©_¿¾GD’EDŠjÀ€ìÞ½›~ýúqâÄ þýï3fÌΜ9£Á©`Μ9Ø1cø÷¿ÿ͉'èׯ»wïfÀ€QH)ŒJ•*±xñbÂÃéS§›6m" €O>ùDƒSÁ}òÉ'°iÓ&êÔ©Cxx8‹/¦R¥JQH¹”Î;³cÇ‚ƒƒÉÏÏgòäÉôíÛ—”” Î5"%%…¾}û2yòdòóó fÇŽtîÜYƒ#" É""z#2›™:u*Û¶m£mÛ¶ÄÆÆÒ­[7.\ˆÃáÐ]c .¤[·nÄÆÆÒ¶m[¶mÛöÿíÝ{PÔõ÷ñÏâj„IdÞOÞбÒ܆ËÐÈA†qPKKKÇK‰¨Éhy·p òÖEGMQKr4¼–Ê0feV‡Kˆ‹»êcy‚LÄKj(D@»ÏÏÄ£Ù9§‹(—÷ëÏuÆ?>3ºo–ý}¿š;w®<}úèÈ‘#JNN–Ñhd D2€æÃ××W6›M)))òððЊ+ªÓ§O3~×éÓ§ª+VÈÃÃC)))²ÙlòõõeD2€¦oìØ±*))QXX˜.\¸ èèhÍ›7O555Œƒÿª¦¦FóæÍStt´.\¸ °°0•””hìØ±Œ€HÐ4ùøøhûöíÚºu«¼½½µgÏ™Ífåææ2þ”ÜÜ\™ÍfíÙ³GÞÞÞÚºu«¶oß.Æ@$h:,‹‡F­›7ojÒ¤I5j”®]»Æ8øK®]»¦Q£FiÒ¤Iºyó¦F-‡Ã!‹ÅÂ8ˆd[ëÖ­µtéR:tH=zôPaa¡üýý•žžÎ8¸'ÒÓÓåïï¯ÂÂBõèÑC‡ÒÒ¥KÕºukÆ@$h|ž|òIhþüùr¹\JMMUDD„JKK÷Tii©"""”šš*—Ë¥ùóç«  @O>ù$ã ’4“'OÖ±cÇ4hÐ ={V‹E‹/V]]ã AÔÕÕiñâŲX,:{ö¬ ¤cÇŽiòäÉŒ€Hð`uèÐA{÷îÕÆÕ¶m[mÛ¶Mf³YùùùŒƒû"??_f³YÛ¶mSÛ¶mµqãFíÝ»W:t`D2€û/&&FN§SÇ×74fÌ7NŒƒûª¢¢BãÆÓ˜1ctãÆ >\N§S111Œ€HpxzzjåÊ•ÊÎÎV×®]e³Ùd6›µcÇÆÁµcÇ™ÍfÙl6uíÚUÙÙÙZ¹r¥<==‘  á<óÌ3***ÒÌ™3UWW§ (**JçÎc4 çÎSTT”,X ºº:Íœ9SEEEzæ™g‘ àÞ2 š1c†Ž=ªêÌ™3 Ó²eËär¹ŠËåÒ²e˦3gÎhàÀ:zô¨f̘!ƒÁÀ@ˆd_—.]tàÀ­^½ZžžžÚ´i“T\\Ì8hÔŠ‹‹ M›6ÉÓÓS«W¯ÖÔ¥KÆ@$øëâããåt:««W¯jĈJHHPee%ã I¨¬¬TBB‚FŒ¡«W¯*66VN§SñññŒ€Hðçxyy)--Mû÷ïWÇŽeµZe2™´oß>ÆA“´oß>™L&Y­VuìØQû÷ïWZZš¼¼¼‘ à Ýn×”)ST]]­Y³f)66V/^d4i/^Tll¬fÍš¥êêjM™2Ev»]Œ€Hðþ3ððÐܹsë¯÷=uꔂƒƒµjÕ*¹ÝnB³àv»µjÕ*ëÔ©SõשÏ;W¼% ’ܦ{÷îÊÉÉÑòåËÕºuk­Y³F:qâã Y:qℵf͵nÝZË—/WNNŽºwïÎ8ˆdÒ /¼ ‡Ã¡ÈÈH•——+..NIIIª®®f4kÕÕÕJJJR\\œÊËË)‡Ã¡^xqÉ@Kåíí­O?ýT;wîÔc=¦ÌÌL™L&egg3Z”ììl™L&effê±ÇÓÎ;õé§ŸÊÛÛ›q"@Kª’’?^UUUJLLÔ°aÃtåÊÆA‹tåÊ 6L‰‰‰ªªªÒøñãURR¢ÐÐPƈdÍÑhTrr²>,___Ùív 4H6l`@Ò† 4hÐ ÙívùúúêðáÃJNN–Ñhd€HÐùúúÊf³)%%EZ±b…BCCõÕW_1p›¯¾úJ¡¡¡Z±b…<<<”’’"›Í&___ƈdÍɯ¿: Óùóç­y󿩦¦†q€ßQSS£yóæ)::ZçÏŸWXXXýW”Éš¸ß>„´k×.™Ífåææ2ðäææÊl6k×®]w=ì €HÐY,–úã¬***4a½øâ‹º~ý:ãÂõë×õâ‹/j„ ª¨¨¨?6Ñb±0@$h*Z·n­¥K—êСCêÞ½»  -[¶0ð7lÙ²E*,,T÷îÝuèÐ!-]ºT­[·f€HИýzÅîüùóår¹”ššªˆˆ•––2p”––*""B©©©r¹\š?~ýUîˆdД)Sêt+++“ÅbÑâÅ‹UWWÇ8À=TWW§Å‹Ëb±¨¬¬¬þȸ)S¦0@$h,:vì¨ýû÷+--M^^^Ú²e‹üýý•ŸŸÏ8@ÊÏÏ—¿¿¿¶lÙ"///¥¥¥iÿþýêØ±#ãD2€)&&FN§SñññºqãÆhx·?{ãÆ ÅÇÇËét*&&†q"Àýæéé©•+W*;;[]ºt‘Íf«?¦ Àý÷ëñŠ6›M]ºtQvv¶V®\)OOOƈd÷ÃÀUTT¤™3gª®®N ,PTT”Î;Ç8ÀtîÜ9EEEiÁ‚ª««ÓÌ™3UTT¤2@$h(ƒáŽ7ݯ¿þZ¡¡¡Z¶l™\.€ËåÒ²e˪¯¿þúŽj D2€{©koÊþåIDAT×®wüúvÆ бcÇh„Ž;¦€€mذᎯGuíÚ•q"À½/‡Ã¡˜˜]¹rEÆ Sbb¢ªªªhĪªª”˜˜¨aÆéÊ•+Љ‰‘ÃáP||<ãD2€¿ê·GJY­V™Ífeff2ЄdffÊl6ËjµÞud#"ÀŸpûåÕÕÕš5k–bccuñâEÆš ‹/*66V³fÍRuuõ—ÿ ’ü¯w\s{âÄ kÕªUr»Ý 4an·[«V­Rpp°Nœ8qÇ5ò¼D2€ßÕ£G:tHK—.•Ñh¼ãÍ@óqû¿F£QK—.Õ¡C‡Ô£Gƈd·{á…äp8d±XT^^~ǯe4?·ª¼¼\‹E‡C/¼ðãD2ooo}úé§Ú¹s§|||”™™)“É$«ÕÊ8@ `µZe2™”™™)íܹSŸ~ú©¼½½ ’–),,L%%%?~ü]GEh9~{´ãøñãURR¢°°0ƈd å0JII‘Íf“¯¯ï—h¹n¿$È××W6›M)))2ŒÉ@óÖ§O9rDÉÉÉòðð¸ãúZ¸ýºy%''ëÈ‘#êÓ§ãD2Ð<?^v»]!!!:þ¼¢¢¢´`ÁÕÖÖ2€zµµµZ°`¢¢¢tþüy…„„Èn·küøñŒÉ@óñØcÝñ0ή]»d6›e³ÙÀd³Ùd6›µk×®;ò}ì±Ç ’¦-22²þX§ŠŠ M˜0A/¾ø¢®_¿Î8þ§ëׯëÅ_Ô„ TQQQ\ddd$ãD2Ðô´iÓFË—/WNNŽºwï®üü|ùûûkË–-ŒàOÛ²e‹üýý•ŸŸ¯îÝ»+''GË—/W›6m ’¦á©§žRAAæÎ+—˥ŋËb±¨¬¬Œqüeeee²X,Z¼x±\.—æÎ«‚‚=õÔSŒÉ@ã6eÊ”ú#ÝÊÊÊôì³Ï*55UuuuŒào«««Sjjªž}öY•••Õ7eÊÆˆd ñ騱£öï߯´´4yyyÕÿj´  €qÜsõ_áòòòRZZšöï߯Ž;2@$Cll¬œN§âããïzÈÊoŽ—ÓéTll,ãD2ðàxzzjõêÕ:pà€ºté¢ÜÜÜúãšà~ùõXÉÜÜ\uéÒEÐêÕ«åééÉ8‘ Ü_Tqq±f̘¡ÚÚZÍ›7OÑÑÑ:þ<ã¸ïΟ?¯èèhÍ›7Oµµµš1c†Š‹‹5pà@ƈd á Íœ9SEEE0`@ý²+V¬Ëåb ŒËåÒŠ+꯺0`€ŠŠŠ4sæL ˆd atíÚUÙÙÙZ¹r¥<==µaÃÈn·3€FÃn·+ @6l§§§V®\©ììluíÚ•q"¸·†.§Ó©˜˜]¹rEÆ Sbb¢ªªª@£SUU¥ÄÄD 6LW®\QLLŒœN§†Î8‘ ü}mÛ¶ÕÆµwï^uèÐAÙÙÙ2™LÊÌÌd^ff¦L&“²³³Õ¡CíÝ»W7nTÛ¶m ’¿&00Pv»]“'OVuuµ’’’§òòrÆÐd”——+..NIIIª®®ÖäÉ“e·ÛÈ8‘ ü‰š?¾òóóÕ¯_?8qBAAAZ³fÜn7hrÜn·Ö¬Y£   8qBýúõS~~¾æÏŸ/R ’ÿ¡G:tè–.]*£Ñ¨U«V)88X'OždMÞÉ“'¬U«VÉh4jéÒ¥:tèzôèÁ8‘ ü¾Ñ£GËápÈb±èâÅ‹ŠÕ¬Y³T]]Í8šêêjÍš5K±±±ºxñ¢,‹‡FÍ8‘ üÞÞÞÚºu«¶oß.íÛ·O&“IV«•q4[V«U&“Iûöí“¶oß®­[·ÊÛÛ›q"-]XX˜‡ÆŽ«ÊÊJ%$$hĈºzõ*ãhö®^½ª#F(!!A•••;v¬‡ÂÂÂD2 %2JII‘ÍfS¯^½tìØ1 4H›6mb-ΦM›4hÐ ;vL½zõ’ÍfSJJŠŒF#ã€HZŠ>}úèÈ‘#JNN–‡‡‡–-[V+´T_ýµBCCµlÙ2yxx(99YGŽQŸ>}D2ÐÜMœ8Q%%% ѹsç¥ ¨¶¶–q´xµµµZ°`¢¢¢tîÜ9…„„¨¤¤D'NdÉ@sÔ¾}{íÞ½[›7oV»ví´cÇ™ÍfÙl6ƀ߰Ùl2›ÍÚ±c‡Úµk§Í›7k÷îÝjß¾=ã€Hš‹ÈÈH99R7nœÆŒ£7n0ü7nÜИ1c4nÜ8UTThäÈ‘r8ŠŒŒdÉ@SÖ¦M-_¾\999zâ‰'”ŸŸ/mÛ¶qàÚ¶m›üýý•ŸŸ¯'žxB999Z¾|¹Ú´iÃ8 ’¦æé§ŸVAAæÎ+—˥ŋËb±¨¬¬ŒqàO*++“ÅbÑâÅ‹år¹4wî\èé§ŸfÉ@S`04uêT+ @¥¥¥ŠˆˆPjjªêêêþ¢ºº:¥¦¦*""B¥¥¥ Pqq±¦N*ƒÁÀ@ ’ƪS§NÊÌÌÔºuëäåå¥ôôtùûû«°°qà),,”¿¿¿ÒÓÓååå¥uëÖ)33S:ubÉ@c+§Ó©¡C‡êÚµk5j”&Mš¤›7o2Üc7oÞÔ¤I“4jÔ(]»vMC‡•ÓéTll,ã€HOOO­^½ZPçΕ››+???íÙ³‡q íÙ³G~~~ÊÍÍUçÎuàÀ­^½ZžžžŒ"xPL&“Š‹‹5cÆ ÕÖÖjÞ¼yŠŽŽÖùóçî“óçÏ+::ZóæÍSmm­f̘¡ââb™L&Æ‘ ÜOƒA¯¿þºŠŠŠ4`À>}Z¡¡¡Z±b…\.À}ær¹´bÅ …††êôéÓ0`€ŠŠŠôúë¯óPˆdà~èÖ­›¬V«>øàµiÓFëׯW`` ìv;ãÀf·Û¨õë׫M›6úàƒdµZÕ­[7Æ‘ 4”áÇËét*::ZW®\Q||¼¦M›¦ªª*Æ€F¢ªªJÓ¦MS||¼®\¹¢èèh9N >œq@$÷RÛ¶mµqãFíÝ»W?þ¸²³³e2™”••Å8ÐHeeeÉd2);;[?þ¸öîÝ«7ªmÛ¶Œ"ø»‚‚‚d·Û5yòdUWW+))Iqqq*//ghäÊË˧¤¤$UWWkòäɲÛí bÉÀ_ѪU+-\¸PyyyêׯŸœN§µf͹Ýn€&ÂívkÍš5 ”ÓéT¿~ý”——§… ªU«V "ø£zöì©ÜÜ\½ûî»2úðìS§N14Q§NRpp°>üðCF½ûî»ÊÍÍUÏž=D2ð¿Œ=ZÇWDD„.^¼¨˜˜½ñÆúù矚¸ŸþYo¼ñ†bbbtñâEEDDèøñã=z4ã€H~···¶nݪíÛ·ËÇÇGûöí“ÉdRNNã@3“““#“ɤ}ûöÉÇÇGÛ·o×Ö­[åííÍ8 ’_…‡‡ËáphìØ±ª¬¬TBB‚FŒ¡«W¯24SW¯^Õˆ#” ÊÊJ;V‡CáááŒ"-›ÑhÔÛo¿-›Í¦^½zéèÑ£ ЦM›ZˆM›6) @GU¯^½d³ÙôöÛoËh42ˆd´<}ûöU^^žÞ|óMIÒ’%K®3gÎ0´0gΜQxx¸–,Y"IzóÍ7•——§¾}û2ˆd´'N”ÝnWpp°Î;§¨¨(-Z´HµµµŒ-Tmm­-Z¤¨¨(;wNÁÁÁ²Ûíš8q"ã€HFóÖ¾}{íÞ½[›7oV»ví´cÇ™Íf>|˜q’¤Ã‡Ël6kÇŽj×®6oެݻw«}ûöŒ"ÍÏàÁƒåp84räHUTThܸq3fŒnܸÁ8€;ܸqCcƌѸqãTQQ¡‘#GÊáphðàÁŒ"ÍÃC=¤÷Þ{OV«UO<ñ„òòòd6›µmÛ6ÆüWÛ¶m“ÙlV^^žžxâ Y­V½÷Þ{z衇D2š®þýû«°°P³gÏ–ËåÒ[o½%‹Å¢³gÏ2à9{ö¬,‹Þzë-¹\.Íž=[………êß¿?ã€HFÓb04uêT=zT~~~*--Uxx¸ÞyçýòË/ øS~ùå½óÎ; Wii©üüütôèQM:Uƒ@$£ñëÔ©“233µnÝ:yyy)==]þþþ***bÀßRTT$¥§§ËËËKëÖ­Sff¦:uêÄ8 ’ÑxÅÅÅÉétjèСºvíšF¥I“&éæÍ›Œ¸'nÞ¼©I“&iÔ¨Qºv횆*§Ó©¸¸8Æ‘ŒÆåá‡ÖÚµk•••¥Î;ëàÁƒ2›ÍÚ³gãÄž={d6›uðàAuîÜYYYYZ»v­~øaÆ‘ŒÏl6«¸¸XÓ§OWMMæÌ™£˜˜]¸pq êÂ… Љ‰Ñœ9sTSS£éÓ§«¸¸Xf³™q@$ãÁ0 zýõ×õå—_ªÿþ:}ú´BCCõþûïËår1à¾p¹\zÿý÷ªÓ§O«ÿþúòË/õúë¯óPˆdÜ_ݺu“ÕjÕ| 6mÚhýúõ TII ㈒’jýúõjÓ¦>øàY­VuëÖq@$£á=÷Üsr:ŠŽŽÖåË—¯iÓ¦©ªªŠqTUU•¦M›¦øøx]¾|YÑÑÑr:zî¹çD2Æ#<¢?þXŸþ¹üq8p@&“IYYYŒhT²²²d2™tàÀ=þøãúüóÏõñÇë‘Gaɸw‚‚‚TRR¢W^yE?ýô“^{í5 :T—.]b@£téÒ% :T¯½öš~úé'½òÊ+*))QPPã€HÆßÓªU+-\¸PyyyêÛ·¯œN§‚‚‚ôÑGÉív3 Qs»Ýúè£$§Ó©¾}û*//O .T«V­D2þ¼ž={*77Wï¾û®ŒF£>üðCëÔ©SŒhRN:¥àà`}øá‡2z÷Ýw•››«ž={2ˆdüq/½ô’‡"""ôý÷ß+&&Fo¼ñ†~þùgÆ4I?ÿü³Þxã ÅÄÄèûï¿WDD„‡^zé%Æ‘ŒÿîÑGÕgŸ}¦Ï>ûL>ú¨¾øâ ™L&åää0 YÈÉÉ‘ÉdÒ_|q×û@$ã.áááõ?QߺuK¯¾úªžþyýðÃŒhV~øá=ÿüózõÕWuëÖ­úß †‡‡3ˆdü?F£Qo¿ý¶l6›zöì©£GjРAúä“OЬ}òÉ'4hŽ=ªž={Êf³éí·ß–ÑhdÉ-Ù¯Où¾ùæ›’¤%K–(<<\gΜa@‹pæÌ…‡‡kÉ’%’¤7ß|³þT'Éh~=/288Xß}÷"##µhÑ"ÕÖÖ2 E©­­Õ¢E‹©ï¾ûNÁÁÁõ÷€HF ñÛ›‡222d6›uäÈÆ´hGŽ‘ÙlVFFÆ]7Í‚HF36xðàú;ìüñG½üòËzùå—õã?2Ò]ïÏ=÷œœN§Ì8D2š›‡zHï½÷ž¬V«ºu림¼<ùùù)##ƒqøòóóS^^žºuë&«Õª÷Þ{O=ôãÉhú÷ï¯ÂÂBÍž=[.—Ko½õ–,‹Îž=Ë8ügÏž•ÅbÑ[o½%—Ë¥Ù³g«°°Pýû÷g"M•Á`ÐôéÓU\\,???}óÍ7 ×;ï¼£_~ù…ø~ùå½óÎ; ×7ß|#???kúôé2 D$£)éܹ³²²²´víZ=üðÃúä“Oäïﯢ¢"Æà/(**’¿¿¿>ùä=üðÃZ»v­²²²Ô¹sgÆ!’ÑÄÅÅÉét*..î®…À_÷ÛioÏ‘ŒFêöŸj;u꤃ÊÏÏO_|ñãp}ñÅòóóÓÁƒÕ©S§;~{ "Ì!C4}útÕÔÔhΜ9Љ‰Ñ… €páÂÅÄÄhΜ9ª©©ÑôéÓ5dȆiF¸œ¼™Ø·oŸ–,Y¢Ý»wëøñã @s¹\zÿý÷•““£Q£Fiß¾}ŒB$£1Z´h#pŸ?~œ¨š!¾nÉ‘ É‘ IRzzºÜn·Ž;¦V­ZÕ¿ÞªU+;vLn·[ééé @øòË/åv»õÊ+¯Üõg£G–ÛíVqq1CɸߦOŸ®S§N) @3gά}Ö¬Y ÐÉ“'5mÚ4† ¬^½Z’”pןM˜0A’´aÆ"’q¿UUUiÔ¨Qª¬¬Tjjªzõê¥Þ½{+%%E·nÝÒÈ‘#õÓO?1 `×®]*//Wpp°ÌfsýëÿøÇ?ôÏþS7oÞÔöíÛŠHƃpúôi%&&ÊËËKiiiZ¿~½¼¼¼” ¯¿þšh µµµJKK“$M™2¥þõqãÆÉÃÃCºuëCÉxP222ôí·ßjÈ!2dˆÊÊÊ´k×.† ¥¥¥©¦¦F/¿ü²Ú¶m+I?~¼$¾jA$ã[´h‘z÷î-«Õ*«Õ*___-\¸ah`—.]ÒÎ;åíí­Ñ£G+$$DO=õ”Š‹‹URRÂ@D2”%''ëÖ­[JHHPBB‚*++•œœ¬ ýúß”)Sx`HFcàíí­ŒŒ F-\¸Pß}÷¾ûî;-\¸PF£Qòööf(Pqq± ¤ñãÇ«¢¢‚öˆdú¨þõµk×*??_½{÷Öºuë €öë§ÉžžžÊÈÈPee%£41F&h>ÆŽ«±cÇÞõºËåRxx8pŸËívË`0ÜñÁš>I¸GÒÒÒäv»õïÿ[ƒAŸþ¹Nž<É0MŸ$Üc?þø£þõ¯)11‘1ˆd€–-11‘0n&øº@$D2@$D2@$D2@$D2@$D2@$D2@$D2@$D2@$ ’" ’" ’" ’" ’" ’" ’" ’" ’É‘ É‘ É‘ É‘ É‘ É‘ É‘ É‘ Ɉd€Hˆd€Hˆd€Hˆd€Hˆd€Hˆd€Hˆd€Hˆd€HˆdD2@$D2@$D2@$D2@$D2@$D2@$D2@$D2@$D2" ’" ’" ’" ’" ’" ’" ’" ’" ’É‘ É‘ É‘ É‘ É‘ É‘ É‘ É‘ Ɉd€Hˆd€Hˆd€Hˆd€Hˆd€Hˆd€Hˆd€Hˆd€HˆdD2@$D2@$D2@$D2@$D2@$D2@$D2Ðlÿî_ðÍ™S¬€f…O’€ßøKŸ$§oZÍr ’5qr«€H¾]é¿ÿ« Yã;É‘ É‘ É‘ ÉÀ}s×9É}û `É’äÓÁGn·›E@$K’½Ä®êêjÖ@‹öí·ßJ’ ’øø¸ÍÿëæÎg»šfˆIEND®B`‚xnec2c-3.4/doc/images/excitation.png000066400000000000000000001134231257141547200174450ustar00rootroot00000000000000‰PNG  IHDR¯œ÷gIsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEØ73 ü¤tEXtCommentCreated with GIMPW IDATxÚìÝyXTÕÀñï0‚‚‹¹ä’" &¨.¹”æB¹c™ûžK.äöK+5ËÔ\ËÔ\2#÷%Ó,wIIÅ4wq—Eeæ÷Ç2l3ƒ ˆïçyzž¸÷žsÏ}ï9÷¾÷ÌQqåR0Ù;8kB!„¢]¹¬°wpF£Ñ†­ª¬’VFrW!„BQ° EjRªH]¦JŸ¸¦OZ#£#%bB!„¢@”²*•6¡ªP(4¡a¡Š´ä55qMLLä~è}‰–B!„(PQQQ¼^ñu’ÔI¨”*  Ðym 4,…‰DK!„B¸;wïP±BEeªô¯ (L:+W,]aÔú ê—§å…B!DÁçd…!' ÅÎÖN£3óš~ÖuùËùß”ÿ¼“[wn±bé  'å…x‘–-Y–ãúCæë~ó«þ¶ߌ’Õ1\>{Žk7îþ8š§ jL‹YPÆÆŽÊoØS·VUéœyx.ÛÎÆ`n]ººÕÿ/ìþ ÿëÑ+ëLÏnždþŒ.™#ë!øáS¬ª5ƧµÓKuþ3Æ1pÃNFÄSΫ ÞuÊHGª s²¼(?©YƒËß Ë1'LK^cžÄdšy¸yç¦Nrkb’ò_Êÿ+L:IoÆ:ž·¼…A~÷Ëôõ/ý~)ƒ† z®: ©§ Ç[ÂÃ+ü±õ añjÝåñOxpû:n_çÍÚƒ¤óåYÕp"ç·ëuî& œÞiÇå•ëyð0˜]§kоžîŒHàN‚>ÅĬíÞqÒ[a=ÿ©í®óŽ3'ý ?®m‘;“( :'»yç& =£Á²„e¶åo‡‡¦•W(RÛ ÝçÓÄDmys ½×5UƃÈv@£@£Ñ V«Q«Õ:L_.»:Ò)11 s & bcc)iURoy!^„!ÇšýåÕXȪž}œ%'…³mã%%cYÉ ¯ÎT°+‹™I2±Ñ‘„޹ͥóAr=xÎó¬“FŸäöS5JóªÔ·±0¾ÿ›”æÝ÷ê³zÿÜûw—záXÒL[wäEv»(¨ÿÞ»”6U¾´ç?uŸÖõ©j~šñ·9û$‰7­Ì¤“‰Â3ÞSrªÔœ,5§Ê˜Ë’“eL\õ•_ýÓêÛ6â“9–½snmÚˆ‰òY⚺13ËÒ¼áô&M8 o‡þ³GIÉX”«Ç‡=HŸêX•¶Åª´-ÕßÔ)clûº¶nDÀ© ܈B£,†]¥j4lÞ³{A9Ìýˆh0-Áë.´hꊙ"oÊ{Ž cbÔ-üãú04*ÊØ”§æ› ¾vF½ @i'÷¯õ9)þšm]®òÇÙpoÚOµ>m(ÆSöo>L’FƒK;Ü^+®wœåæüÓa#†q3èç.ö(š$µ&­¯Gw§ÒÜ8Á•³Q¸5¶“ ¤(t‰kj"Ù»ï´ÉDcs²Œ‰«¾òƼQцbJ“týȸ8³tÎ Ž»†RÑ@.¢à“×”œ,«¼jõO« ÊÉô%®úÊ :(ËòóçÎϹ|Ê;®¡Û·açý^–‰«!9¡J·Öl•C¦­0Q输`’ýô±!SÌÈ[¢P^1RŒU5º´qfõAü¹õu8G¬ZƒK‡®T³z6œŽ¦Ìr5ù NV¦©Ã›JÕiV©z¶õë[¦Q?áÔ!Î_½EdLêägÿ*^RÂ]ƒëÉ¸îø­XÞêÔŒò)Á—°®@³NoôÃ.boŸÝäÐÃǧ2ÅRþ*£ÇÛüõïJ’î>ŽM ó¹i_ãÎoQ¾¸öœ”«é »/h—wz‹ò%´Ë+Ôjb÷Ô‰÷3µ#·å=G†Äñø­'Yù´ã7äÚ‘¤MmÍ”ýí£ u'D†¢Ö€BYœâÄòD­&42§ÒfÆ×kÀù76¦{tÀ©¤iýȸ8*ÍRf¾“"äÞ$ Oòúœ9™¾ÄÕœ.§ÛœËë~9+½ÇOb°.YRgæ5»q§Êj&«)æ¡#†òÃÂtÖñ“)YeÙC>¢s ç-ÌvŠYf^EA=v´ÞmÊÖlI•=ÿrï_þTŪð–C÷öÂS…:%Í1¤GgÕï³Zvþ÷ ø_‹Êîop=×=Li¯½…JEúYAmB˜œô(S=õÊ×ÙU©Û‘^s%Wâ’8ÿ$™%õ'<¹iŸS‰bÏb¯zö¥ÐZ–é–§–Ñ$çYycÏ‘!qÔwü†\;i×[¥îþŒìÿɉü¾-€ê-»àÅ?¬þë AÛ§îÐ(kª?Ë3öüS×RæYÞóŒã³R]îM¢P$¯)yÔ¨1£ˆŒŠLKUJæådOžæ¸r¶år,Ÿ–$g3c«wÿ龜•^ê;°åJ—Ñ{]{ö…­ Sµé³ìÔFŽødDZâ™>qMŸegz¿!›SËÏþfvŽå…x‘ éw6ò4‰âáÊŽÞ aó¿÷éÖèÙ;¶*%ÕÇ$ášÅ !ûÍj™ˆvF×ë½Ô­fG1S%šäX¾›³Ä¨z2®³Niïõ5Ïži“â®kDZªl¦zL3e@ ƒãè^³WNEpjÇqÜ{6Ö›àç¦}Ù½K™q¹&›6ç¶¼±çÈ8ê;~Cb^ÖTIh‚šðädÊgók†ôÿ ?¶–¤ÆâµtpµFAœY±alù#˜\ôÖaìù76¦ÊlŽÃØ8ªµ?-¦4µ–{“(ÉkJN5îü,×:áS½9™¾_ ˜0iBŽåbccslc¶å Ä5õU­[§%°‰ûöé½&é$¯YMEgLÿìØ @‰×fŠMN±ÒÇ ÍÚb´–ˆ{ÇX¹>ž^oR¹\YL•â¢sïfÁgOáýငÎò~ìyË ñ"Íž5;Û§Y:ší~ûIÒ€}«îT±0ªÐ½UuVì¾Âþ_·c?¼VJUÛv¦ú5\¼É®õk2Õ×"ã8I÷·£…ŠsOÙºl‘ÎþšW³bçÕ(öþ¶’½z.9Õ“qûÚaóÃ:ÂïŸå×ågu·1µ¦mûÌc;‡±ªo›˜—çÞï²þ·ÝÜ9ËÖ³9Ö“—í3tynËsŽ cõöm)³x=²8~Cc^ÝÞŠ#'ŸróÌcLZ”7ºÿ''†³yëiZw§ªÅ³ØÄ¢*Ý[;ðÓ΋œÞº™º#{c“ÃëÆžÿ¼Š©±q||æ%ªË½Iš –çÍÉô%¾ùZ"wíÔnŸ’¸š¤Lž&îÛ‡ÂÄDçW½¿óŠ"sF~ëέ\=äUy! ÓÓî™­~„Ä%aaãFG7Û´wmÝ:⸈Àðü~?ËàNuQšYÓyÈ@Îù‡ ÿ®ö0ŠD”X¿V™ºšfû“UMßóäîö"bžfZ_»KOÿñ§/Ý&.IAIëò¸4z‹ÃÛ×UOÆ¿U%*Ó{ÈÞw„K×Yq+ÊWuÀ³e*•05j¬2Ž-Ê׿£á¯sîØq.\!4"’ø5f%°.Wê5kåKû ]žÛòÆœ#CãhZ¢ }uaÏîÃ\¾ù€DŠÒ¶pñhÆþ-« йµGM8éÏ£sGQ´êltÿ?»m#a‰É/ïÁ{um2}ç˦î{xœZDÀ½06n;ËÐnoæÙùÏ«˜Ç£çP³¼6 ^AçdÏ[þNxXžå„ @£ÑhÐh4$©“tV~óÕ7Fídü¤ñyZ^!D^IÆoÎ\Bâ“hêÊA¦ŽìOSêâÕ¶'?lJ[oïà¬óÑzÆÿÏø±ûƒ€IiËk¹áõv'ÆÏñ#*­19בU!ýØÝ×:®8Ö®OënCXs Dg›Ôrçÿ\Í€nÞ¸º¸RÓÅï^¾øß{®˜~þ–6vc…ê,< {gêxNÊÔŽ“›Ó¥u j:¹Ò EæmÉœ”?8¾•ὺàîZ'7š¿×‡ï·Ÿ“Q$„BˆW'yíøõ/´«hIÌíMŒÜv€[ǰáv –¯·cÝLïg‰ëÕ ´ôÁæãj&/Yǹ ãlY4ŽxÿÙÖŸ~fôÊ¥àL3¥ûwZ1wÅ:Nž9MðÉýÌè̦§ÓeÒ!ƒëH/,p­Íàl²'›púðšrž/w`^`x¦í{-ú!³Vx2€åã=9°“á=f?WLNiÀ¡iê,?øn½)#I!„/„Ðh4bbb°²²Ê³ÁùÂV|øaÞyëcB••ùýÐ<>nÚ™är,?°&ÖæiÛ-l݈ù×£òû?Œs,ã~sý…-{GTÕùïÌv½ud\þMó†,»ÃÔCÇùèµâÄ>ðÃ¥Ét,+öãôþ±:å¾ò?A7; ’“"p¨Õ…‰ŠËÿ1*ÎéÛ¥QGÒº^S®?5aÓÉã¸W¡N¸Oúo™l†ÀÔ-aªS^§½¡~¸4žŽe…>œ>à Àì–,¹ÍÂy·Œöœ¨ŸÞıλ˜—nFбïe4 !„"ÏÙ;8£Ñh ÃÎÖÎøw^Ø£ówß#¹zù¼AIjvÌmšðÛ‚h:d ;÷ 6.‰~Ë~ÖI\Vߊ` }©< FBd0sg,æï£g¹I¢:9m:þZ®ê\w?€Ž¶iË,lÚÓ‰½¿«³}úíLTeµÉgrÒó=‘(K1³KUº¯¹ÂôM!¬ÿ¨:ŽÌàqR2¥ß‘–¸f× ë”ö>Øh“W¿»OÑÐ-SÙ§‘þY¶£zZ¬\¶@FB!²¤/ÌŠ*·;Jeì³óø–ö£g3Ksb‰åêµhöZ¾ìÛ®ýYy#šVc¿ÃØY™ƒ& {GW4Í 9i¦ ´3Ïê­3Òå/C¸ðýøè[¶}@ý‰r—§4í`ÐY*š) *sõòy¾"„B‘*·\¹þµ¼JZ¢C¶ÑãëØ¯ÅÖµ‹ø¤IÏêÃÆæûèRÕ*m»^•,Yp#ŠeW£ç`øì«B¡È2õ»©É=àm,•ÚììÉÝuFÕ‘Q·×гüN [ÃãèYNû1|\øŠ¿Öå…u³R™àT†çw²òj'æßˆB©*ÃTO»,·×ioDJ{í:¥­ÿ°B ߌfé¥H¾¨]¶@ú‰B!Da+91”Oz|Éu2í¿G¥åX0»=ÉêX¾è1މÏ>Êï½x¥”&¬î;–=çn‘¨N""$˜Å“{æ¸síL¡¨î·ø}^·`ÚæīՄ^>ʘžóª#£þ³{¢R(X4rׯÿø& F-A¡PÒûÛ>/4¶ïÍhÀ¼¡£IJÖ`]o¯™f=kªÓÞ‘KP(tÙ;m}ßEÃ(¡4aóà‰ø_ E­NäѽëìÛº†á>md$ !„¢h$¯©?Å”ñ¿T}{q0<žÒö½˜õvE*´ø’þ5JáOßÍiÛ–ªáÃÞ­ xïM5Ÿ÷³ÞCf¢h8>Ç6ÌãM9«bôi쮳oß KðiîÊÞép©Ý€n£ÀeÔr£êÈÈÖm.Díäüߤ®^ØŸT“Ï–üÎhw›zrËÖò¥q©b<¹ @›É^Ùnû}W Ævo«G{6>°aÈ ?&{–K[_ºf/ö­ŸÍ»µŸàûÁ»89»ÑªËP~9B›±?ÊHB!Ä aô¯ :°'W/׊‚qi¥mgžCeQƒÓ§¶`n¢Èôpò-!„âÅ24§Ìøk&º¢K…ÿQío˶ûtV¦ÄU!„âe£’M+Zz0óv æ%ËÓcòj¦}è AB!„$¯¢pê·7€~l'¯ !„âe"¯ !„BI^…B!„äU!„BHò*„B!„$¯B!„BHò*„B!$yB!„B’W!„B!$yB!„’¼ !„BQ¸Šöøñü¶nÇŽŸ ""kkk4¨O÷®Ôww“³$^ Ò…ñ$„È:óªV«ùü‹éLœ4…ví½9vì8ÑÑ1;vœví:0~ÂÿørÚW¨Õêëç鎽ƒ3SÏ?ÌrýÃóÓ±wp¦Žç$£ÛhïàŒ½ƒ³Þe…Ñ©mËèÓÅ›7]ëQ£¦ µ\êÓ°É;´ïÔSz~!ìÇ/ªZÿ‹èçÆì£0µ;?ô©_{g6…Çë,?4 öÎx~°Wgy\øVìœqtnFŒZ#ãIÆS®ÆSêŽÎnx¾Ý‰‰sÖó$CÒW¯!û•þ-ŠLò:{Îw„…Ep.(ˆR©R%ÌĮ̀T©$88˜˜3w~Žõ X€=_d¹Þÿ«}8 ê÷ÊœØë|éê;2ÞcØóOÿ;Æí¿0õãîTT†IÏ/„ýX¼Ú¸Û°)@w|®z@äe?åa[(e?K¥BƓȕ+—‚¹r)ˆ6ÒË9– ?~A×/ŽJÿ’¼fåÂ9pŒÍ[¶`ii™å6–––lÞ²…#G¸xéR¶uUé2¥BAøÉ™„&&ë¬KN cúÉp %ã;W~eNìÌoµ ûÔ›bmi†ÒÔ»ªŽ´õéÏvKÏ/„ýøÅÞ¬‚‹øÍøå;>ÇA®ÚÏÕçÒ–©ãoð÷£§<|¿ýœÞøžŒIàñsùëèYB£rÜÞXd÷ÑPÆå©'«ñãÔáxº»QÃÑ%m}Ô•ƒLÙŸ¦8:ÕÅ«mO~Ø”'Ç]Ðý8;†ôc}ýÎÞÁ™ó®f@7o\]\©éâw/_üïÇél«/¾YÇs›ò^ Ýþ˜C΋¡mÕ7–r+»þhHì íw†Œs}ã £²5£T(x|eUÚ²è[«Pk4¨Šk¿ž°òzTÚºåW"êegTÛ&7®½ƒ3O†ëÎtü {g\š|^`ãPÆSÁŽ'SKm‚™%ÏÏ­ôoQ$’×#GÒ²eË´¿ Àáljåðáà 0 m]«V­øçŸœ?Æè:V{SøJwVq×Ì㸎í¤Û‘ÑzÐ Î&{²ù@§o )çùrpæ†çø”Ó÷þVÌ]±Ž“gN|r?³:³éÇét™tèYB0‡Žã—p·ô»üáÀÞ_¿âÑÚ™öõ0è'Z~ô?ë³ö¯Ãœ?ù7ƒêF2wœ¾[oæ…ƒ=¸¸s%Ãz÷À«~=Ü›¶¥Ï¨©l:|-×±P( ÿøfÇ¢u¸÷ý‚Ã'¹|ñ¬öFpu-½G°ù¸šÉKÖq.è8[#ÞFžwA÷ãœÒõéµè?†ÌZIàÉ–÷ä|ÀN†÷˜ýìFk@|3 =:‹Näm{vþÀ^¿¯ˆ^?ò¹û£¾¶êKyM_{Œ9>CÆyNã +J {:ÛXø$˜}‘ÚÙ¨››ÎàñYc‚~»™2KusO±(Û†F%ÍŒjÛ Oë°oÚß:åvO;@=ß~6e<ìxJˆÑ&Ù¦%jçù¹•þ-ŠDò­­mÚß§NÒYŸþo;;;Â#Âs¬¯B‹‰X(Mx|e>ã´/ò'Å]bΕǘ(‹ó¿åu¶_1n I Ãޤºµeª2záP45«Æ­Îõqù|9ïÆµ)iaŠÊ¼$^]µOy7ÿœólßÖ“¬ÑðñâO´û¶®Æ¸Å3ÕµbÔ2â“5Lù~Žå¬PY”¥Û$í{^»¾ú:Çv4õ#;–|Æ;îÕ13Q Ñhx|?ÿ]߿þœËX( Ž…¦gܪZë”X=l.’Ôô^5Öu«`¦4Åžå—'Ç]Ðý8'†ôc}>]1÷ªÖ¨TxvŸ À“{ŠoFË'lB£Ñ0|ÁÞ(kEÙjŒ^0ô¹û£¾¶¾húÚcÌñ2ÎsÙ>„·z €µg´_>=¼ûCšC¡Pðàöu ‡g´ç³B«žF_ƒ*µžJi•’‡fs!.)åZy¯/¿»OÑ0óÏÂ<ô×Ûžš-|ø¾…ê„(®\¸@àÑ,ÿ~-7ãÕì›? zýl|,†?ï´+kžiÙê[1 ´/•m¹ç=î‚ìÇ91¤ë“þ™¨Êjo;ÉIFÅ7£¡Úóÿ¾Mæóÿ<çE_[_4}í1ôø ç9ƒì¼ÑÛü®qiÅ%4˰úA,f–uñ°u¦II3üC×­Í+µŸ-T7ú¤,V‰/=léŸ/·ÝÂϧ![gŸ¬¡¼çgT*¦,°q(ãéŧŒÉ§…µ'~¾u³Ü6»Ù\CØW½‹"¼z6jÄÞ½{éÕ«—öiuùrH`` nnn,[¶,mÛ={öàåÕHoïLòàóž;9ûÝð‹ß<í{I'¶|!Çôm×þ¬¼M«±ßá÷ASì¬ÌA“„½£+MæŸúÐ÷|ê'ôƒÎRÑL™ëv)ÍJâèÚG׆´ilNƒNKIŠ=ŸGì‰Ùw®\~A4¯Ž» úqN íÇ91UÓƒò–±ç¥ Ûš›öz|ÆŽscÆUåÁ”PþÊÃà_ˆ ¿ÅÃ$5ÖU? GR:Ê/¡±z„ÒÔ†_·ÊUÛOé ï,&há2ðùŠj¯]§xè8”ñôâÛzåR0õSî^=Ã\ßÑl»p„9ÁøÌ¥lžó«Þ¿EÞ)°×úöíÅ·ßÎ"6Vû”Z£F 8@tt4 F íÏ_ÅÆÆ2{ölúöÑ1³©7;S%Oî®bßíý¬¸û¥©-ÿ«—ùé¼ÛkÚ/l öÂ{\øí,èk]ô\t²¾pøÝÔ>¥Ïð¶vPOî®Ë¼ïrÚ}ïxøì÷îbC·fÚîà %Xz)2Ïâ^ÆIû.±™UC£c¡R(Ð$'ð8ÝÓnêv†êUIû âeW£²Ý&?ŽûEõãìÓŸ‡!ñͨ³vFg[D\Žç5?΋1ïPç7CÏÐqž« ²ª,Ê—àiävíÖžƒÊ]pü  »ÿ›C‘O)U}x¦Ÿ2´m%«¡y)sâ¶±"h5[Ãã0/ÝŒáU­ tÊx*˜ñ¤P£¢C¾ñ[Š¥Ò„-c—åOÂñŠ÷oQ’ךŽ4jÔN;“å6ÑÑÑtêØ‘Æ^pp¨aÐÀ˜Rß&™OGýd»“(«Ê|˜ýg÷D¥P°hä"®=Œ'þñMŒZ‚B¡¤÷·}rÜCÊ+þ¡ºßJõy]{¡›¶ùñj5¡—2¦gæß"ì÷u7L ŒþÇñÄ=ºÎœ—f¾/F ¥ ›OÄÿR(ju"î]gßÖ5 ÷i“c½Ú÷a梟9x<˜û¢IJ†§ÑaìYó%­|Ç‹®)IîÔ Úã{rš/úÍ6ê¼÷^<ŠRJV÷Ëžs·HT'ÌâÉ=ó下B?~†Ä7£3:¡P(X8b×Å÷èóFþ§ýÑØ±T "Ÿ¡ã<·ZuÓþ¤ßW .ðV³rÚ‡óïðßíëE5‡fžu4¼m&Œâ MúÎÓ&ƒ?ѹ!Ä8”ñT°ãIUÜ™ÉuÊò3ó/=Η˜¾Êý[ä`ܘO(WΖZµœXºt)·nÝ"!![·n±téRœkÕ¢\9[ÆŒip“Zðøœvàµ™Ø ËílÝFðçÒIÔN>ÌûMàêÕ‰ýI5ùlÉïŒvÏù=ªYc¼)gUŒ>ÝuÞõñݰŸæ®ì>—Ú è6ú\F-ÏTÞÎc,[¾ŒíÝ-¼ãÑ€]ÇcÙcnÊ“ó³79J×ìžõ³y·ö|?x'g7ZuÊ/Ch3öÇÛX¿r1þýsã?îO //œj¹P¿yïcâ¼ß˜×µšÑ±˜øÛw´÷¨É¡pumH÷Ñ‹©>t©Qç¼T ön]À{oªù¼gœÝð2EÃñyrÜE¥ç–!ñͨ\ã lœ>ÛÐm´iÔ€]?Ţ˂LÛåÇyÉn,åäy¿4’CÏÐqž[•ß×^Ã"#0QZða9íLž…M'J«”$Åhg‡dø !cÛV½ÇdŠ™(HˆL@aRŒÏ{¼‘ïç[ÆSáOµø¬kF­Ê—˜¾êý[ä  Ñh4ÄÄÄ`ee¥÷ç5ØCß#¹zù|ž5âø‰@Ö­ßȱ޵ jÿ kw·z¯Ä‰xúx?Î †c^º9AÇIÏ| I?BÆ“Âp†æ”öÎh4ÂÂð³µ+¸/l¥WßÝúîn¯Ô ó1‹ñC? ¾cEâB/³lò4ÚLúTzóKêUìÇBÈxB¼h* AÁ˜ÙÎŽY“û3ð¿»h̬¨îT—‰óÑÿÝÊ!„BI^ ç6}XݦB!„Â&!„B!É«B!„’¼ !„BI^…B!„äU!„BI^…B!„$¯B!„BHò*„B!„$¯B!„B’W!„B! •BñÏÃ?~‚ßÖmàØñDDD`mmMƒõñéÞ•úînr–ÄKAú±2ž„Eÿ#Lš<™E‹ÀÎÎŽÐÐPvíÚÅø ÿã­fM˜uÇ)Ý}§°‹¡ç³ r›Â·}m`öœï ‹à\P¤R¥J˜™™Q©R%Hpp0„1gî|¹¢¿$¸Û°) Lgùú GD^öÓ½©l ”ýˆ—2qÍ~|bådšuÁ‘¤|³r#'ÏäÄáß™3±.½2}éú_ºúΣŒ÷öüÀçŽq`û/Lý¸;•a2ØŠ(O2ž qùâ9Ο>Êž-?1º‡7-äýf­Yð×MD¯€›y½ðßEŽãßQ¼xñ,·±´´dó–-4lØ€‹—.áèàP ÁzžÜ šã WØ{‡ë«ÏAû×µ3)ñ7øûÑSžF%(6‰Úŵ]ïÜêëÔâñRo^÷ãÇ—~âï·aåЗ?ŒA•’Ï›•©@£wºÐè.¯L_šùí>¦~Ø”ÒJís¶]UGÚVu¤­OlEŒ'OÆP(Í(mW•æï÷£i›V |«#‹Fu¡ò¾¼_¾x‘¹oç÷1¼Œ1*°™×U«Öàëûi¶¨TÅ‹gìØq¬Zµ&Wû±wpÆÞÁ™ó®f@7o\]\©éâw/_üïÇéluå SGö§©‡ŽNuñjÛ“¶eª+½s›ò^‹&Ôtrųul:e;ßÊð^]pw­‹ƒ“ÍßëÃ÷ÛÏ媭éÛU› RÙšƒQ*<¾²*mYô­U¨5T) ëÊëQië–_‰`¨—n¼&¥›c-7¼ÞîÄø9~D©5Ln\{g&ž ×)vò3ìœqiò¹Q±/,ýx×xm¬:|Û/íF«¯oë[žúw²ú?Nާ»5]ô®+è~{2&€ÇÎ寣g JÈqûƒ~ ìîkWk×§u·!¬9’ç13äZ‘ßý®¨’ñTxÆÓ󌯓›Ó¥u j:¹Ò Eæm ÎÕ=ÑJóÊÌü®Éê'Ì·7ÛØÄ‡2uD?šxxàXÓ…7µ¦ï˜ì®fò’uœ :ΖEãˆ÷Ÿ‘m¡GgÑiâ<°mÏÎØë÷ÑëGfÚîaÐO´üè&Ögí_‡9òoÕdî8|·Þ4º­éŸ’®\ .TOMJ {:ÛXø$˜}‘ÚÙÖ››ÎàñYc‚~»™2 {sO±(Û†F%ÍtêÙ¿ÓŠ¹+ÖqòÌi‚OîgÖ@g6ý8.“0èÓºì›ö·N¹ÝÓPÏ·_®b_ÐýxÕ5mbß³jIÃf†¿j±cÑ:Üû~Áá\¾xVïº‚î· {pqçJ†õîWýz¸7mKŸQSÙtøšîCKà"ZšÁÙdO6àôá 4å<_îÀ¼Àð<™!׊üîwE•Œ§Â1ž22f| ý-šo~ýƒSG¶ÓÑ.”Å|ø: 4ßLJuÝ)õ¯Èv›݆±v÷¿ ˜»†³Á§8ôûrú6¯Æî¹ƒŒÊŒI~Ü×õÕilŸÖ×–SphÚŸ:Ûž¡Õwöâfð ,yˆˆÀÖÖÖ míìì®ý}ºb îU­Q©,ðì>€'÷6¦­_=l.’Ôô^5Öu«`¦4Åžå—mË'lB£Ñ0|ÁÞ(kEÙjŒ^04Óv+F-#>YÔïGáXÎ •EYºMÒ¾¯µë«¯nk~K}ÒÊøŸ¡º¶z €µgj;öî{ i: …BÁƒCÚŽþðŒ6¶ZõÌT‡Ï—ñn\›’¦¨ÌKâÕU;“zóÏ9Tj=•Ò*%/ÌæB\IqøúÂ#”ªÒLo]1W±/è~¯àõbJ[ 4¸­šž}p«je‰¬Öt¿m4êGv,ùŒwÜ«cf¢@£Ñðø~þ»62¾†ÿ|ùY[Ç­!I£aøÂ‘T·¶À¢LUF/ŠF£fÕ¸Õy3C®ùÝïŠ*O…c`þ¯»ŒãFÆ$?îë†Õ©Ì³ñY¡Ù¼a¡âñåï8«½ïªî3ít8 “:V~a׊{çÕÚÚš°°0*V¬¨wÛÐÐPl¬mžkm-žeìª²Ú LrÒ³Îz+Fûda_Êà:7†Æð¾Í³º-lÚÓu¶ó»û€ 3ÿ¼ËÓH£ÛšßôýÚ€>oôö¿k\Zq Mã2¬~‹™e]|ßÂuBW.\ ðè–¿–›ñjöÍŸ½~`ÝýØLmH‹±÷7có,f†\+ò»ßU2ž ÇxÊȨñ•q;ë”íl|óu|¨ã¯§Üªe»Mçò%X{'†QÞfŒEIªT}w/zïO2Å ãÏ“¼:ŸÕ©È»9J…²3»T¥ûš+LßÂúªóàÈ '%SúÔ-aZô“WÏFØ»w/½zõÒ»íž={ðòjô\û3Õ™9±ßjOµ?t–ŠfÊBÝÖ¼`Uy0%”¿ò0øâÂoñ0IuÕèQ£‡N„òKh,ǃ¡4µáã×­tÊÛµ?+oDÓjìwø}Ð;+sÐ$aïèŠF£IÛ®ñ”ÎðÎb‚.Ÿ¯øaáyíÌï¯\Ǿ ûqï7J2%ø!kC¢™âXÚøi³ì9t¥¬Ö¦~«4+‰£kC]Ò¦±9 :-%)ö|ÞTžË˜åå˜2žŠÌx*Àñ~ê'ÊÖê“í6×/F5s){žávD×.œæÚ…ÓìÙÆéýSóí˜óã|æªÎú´!êŒôEùË.|¿>ú–m_Pb‡z­(°×úöíÅ·ßÎ"666Çíbcc™={6}ûôÊ×öôªd À²«Q—él§}êÙñìé¸ð™¶û°B –^ŠÌÃÁ_x“ZUY”/ÁÓÈ#ìÚ­Gå®N8~ ýXg÷ïs(ò)¥ªÏôY~7µO½³¼­M\'w×eÚOɪCh^Êœ¸°m¬ZÍÖð8ÌK7cxU«|}~öã¶ßôA©Pðû§+Qkô„‰c÷c¢,θ9­²ÝÎÜÖÏæ.åÀѹpê0~ÐÎ?¹¿Ý¨1nlL â¾þ<}:»¶˜•j̧2ÄEìdåգ̿…RU†©žv¯FòZÓÑFÒ©cGbbb²Ü&::šN;ÒØ«5òµ=½¢”Ò„Õ}DzçÜ-ÕID„³xrÏlË ˜Ñ …BÁ‹¸þ(ž¸G7˜7ò‡ÌäEÃ(¡4aóà‰ø_ E­NäѽëìÛº†á>mrÕ^‡”ÀüCã åM¨U7í»/_-¸À[ÍÊ`Óàþ[ò¶ ÍÇ÷l·wû´m»¦\<§nÐÆéaÈi¾è7;ï‰î·^íû0sÑÏ<ÌýGÑ$%ÃÓè0ö¬ùRÛÇ|Ç¥mÛvOT ‹F.âÚÃxâßdÁ¨%(JzÛ'Ocfȵ"¿û]Q%ã©pŒ§Œ _©t¶¹…BA×™½ó<šäD"ÃBØ¿u¶êÌ‘è|¡\9[jÕrbéҥܺu‹„„nݺÅÒ¥Kq®U‹rål3zd¾·¥T ön]À{oªù¼gœÝð2EÃñÙ–)×x§Ä6tm5 E×O±è² ó´f/ö­ŸÍ»µŸàûÁ»89»ÑªËP~9B›±?檽³ÆxSΪ}»ü.êó~Ë•ßo @dd&J >,§½@XØt¢´JIRŒö‰vˆWæ§5ß KðiîÊÞép©Ý€n£ÀeÔò,÷S½ÇdŠ™(HˆL@aRŒÏ{¼‘ï±Ïï~ìÞ÷+®ŸOCÅEÆ}ÔWçºÔójÇÇ_,ã¶©}ÚvûŽö594c®® é>z1Õ‡.ͳsXÐý¶~åbüûç:ÆÜŸ^^8Õr¡~ó.,ÞÇÄy¿1¯ë³÷ÚlÝFðçÒIÔN>ÌûMàêÕ‰ýI5ùlÉïŒv·ÉÓ˜r­xý®¨’ñTðã)#CÇWªï»Z0¶{k\=Ú³ñ Cfø1Ù³\žÆ¢†cmjÖñ åûý˜ëwÇN#Øzð/Fµ®’c¹%C½8»m Ý[·À©æ›x]†gÛY¹a¬QcÜØ˜ä×}='ÏÓ§sjKÙZ¾4.UŒ'7¢h3Ùë…_'€F£Ñƒ•••ÞŸg8t`}Žäêå¼{?æø‰@Ö­ßȱ޵ jÿ kw·zr5/éÇBÈxz•½Lÿ«x>—VúÐvæ9T58}j æ&¹{åÁМÒÞÁFCXxv¶v÷…-'Bw7ê»»Io/5éÇBÈx¢¨S'DáTû3uí>•ëÄõy¨ä4!„B}V´ô`æíÌK–§ÇäÕLûС@Ú!É«B!ž›¼.PôõÛ@¿BÐ9B!„âe!É«B!„äU!„BI^…B!Ä++W_ØZ¹lDN!„BþäµïÀ‘5!„Bñr$¯yù/k !„Ba yçU!„BHò*„B!„$¯B!„B’W!„B!$yB!„B’W!„B!É«B!„’¼ !„B!É«B!„äU!„BI^…B!„äU!„BHò*„B!„$¯B!„BC•_Û;8gZVÌŠÊ5\ðî9Œ¡ï×5ªž+—‚sÝcʆÛÏ÷+Öã"ˆ{‘$™˜RÖ¶]1÷ªÖ¨TxvŸ À“{sݼx5¯Ó¿÷ãÖ¤Ñ0|áHª[[`Q¦*£E£Q³jÜê|ikV±1¶B!„/;£¿°uèÀ¿ûÉÕËç³Ý>ýGàfV¼^£cf cØûodÚ¶]YsƒÛÑÑÖâY®*«Mð’“rˆ*æJ®Æ%q멚êæ9'°ëîÇfjƒ…M{`:±÷7có¼­YÅÆØvd¥zZ¬\¶@F‚B!^8}ydž$¯©;J¥o‡Æ|ÙÊwMS™êl«xîàõ~£$S‚²6$š)Ž¥óôÄäE[UŠüé4W/Ÿ×9ŸB!„/Bn'ÏrýSYÆfÉA¡P Ñh Ú¶í7}ø¢ÃwüþéJ&o2‡d±ÛkÅY~'†­áqô,W€¸ð­K¾·5¯Ûñ2œK!„B(âÿ–CÊÇÿþ¡qz·-íПµ¼‰¹øíGÏãÔµP“ÕÌûMàêÕ‰ýI5ùlÉïŒv·y!mͯv!„Bf @£Ñhˆ‰‰ÁÊÊJï;ª‡ìÉÕ˵B!„B›SÚ;8£Ñh ÃÎÖ®hϼ !„Bˆ¢E’W!„B!É«B!„’¼ !„BI^…B!„äU!„BI^…B!„$¯B!„BHò*„B!„$¯B!„B’W!„B!$yB!„B’W!„BQ´© jÇöÎF—¹r)XΘBÈu[!ÉkÁÐh4o«P( º¨*LÌYyì(Kšé¬Oˆ:B½ƒˆOÖäû5µ-E颭~z·ºíˆQ'c¢´äïÓG¨RLY ñȪ¾œöQTÎÇ‹è㹉U~Å÷yúÜ«’DDŸÎËëöË>>‹âµ>;7w.dð׿ríA4jFï1ŸÚ¶Œùk~çÌåÛÄ®7„wËšsg%"ŸfÚöÜæ…¼×¢ 5\ñl݃›NgYg^Æ#ãÿºÎÐsŸºþüŸ«ÐÍWWjºxàÝËÿûq:õE]9ÈÔ‘ýiêá£S]¼Úöä‡íAºû<¾•ὺàîZ'7š¿×‡ï·Ÿ+ð>®/ŽöÎ$«ñãÔáxº»QÃÑ%Ëm+ÏÛçâÙ:¢M<­» aÍLñL}]$»ûQz'cøpì\þ:z–Ш„Ùr“¯ub|í²Y–Ù¿ÓŠ¹+ÖqòÌi‚OîgÖ@g6ý8.“¥mÓñë_hWÑ’˜Û›¹í&7¶ŽaÃí,_oǺ™ÞµÏ÷_kVî<Àß+zr÷Ò ¦èÀÒÛNøíñç¯et˜O?š©œ!ïŽåÅ~²rõç$k4Ôª9Ä&™¹?_ÓÙ.ôè,:Mü‘¶íÙùO{ý¾"zýÈ|ogúY¿Œ³€9­3ôܧêµè?†ÌZIàÉ–÷ä|ÀN†÷xÖ¶¨«hé=‚ÍÇÕL^²ŽsAÇÙ²hñþ3ž% A?Ñò£ÿ˜XŸµæüÉ¿T7’¹ã|ðÝz³@û¸¾XìX´÷¾_pøD —/žÍr_y1V ís3º cíî0w gƒOqè÷åôm^Ýs0pJ#MûS§ÜáÚ§aýó¥_榼¡}#7ç)·q( žç\ ý-šo~ýƒSG¶ÓÑ.”Å|ø: Ôè˜sm{™®)a‹h=hg“=Ù| €Ó‡7Дó|9¸óÃêsé-ì ÀÅ+Ö»^õëáÞ´-}FMeÓák¹jƒ±÷Á¬®UùOcŽÛà¾0‡Žã—p·ô»üáÀÞ_¿âÑÚy>fŒ=n}}ר>óÊ'¯ `Ì·ï¢Nzĸyg9=o’Ô´•ýÉöùr"ÞkSÒ•yI¼º~ÀÍ?ç< ”²4ßl˜M3%{§ãrä}~e±Š,\ÿ%¥•†…ò‹/|°±PQ±~¿´eŸ}Ñ • G©P¶=‹’Æ}Q%÷ûÉHÃ쟯¡01ã]ªPµëLM\ûy>éß°\>a†á FðFY ,ÊVcô‚¡/¨¹cȹOõéŠ)¸WµF¥²À³ûdžÜÛ˜¶~õ°¹YÔïGáXÎ •EYºMšÀ®¯¾.Ð>nMÏ>¸UµÎ±7>ÿX1¼Ïm¹÷…BMɘ)•XÙ¼NÓ0ÿ×]ThöoX¨x|ù;Φ|ì©N¸Ï´Óá(LTLêX9_úenÊçMßÈú<å6…Áóœ‹á GRÝÚ‹2Uµ`(M2¿MXmt̹¶½L×”ã֤Ѥ‹SUF/ŠF£fÕ¸Õ¹>gFýÈŽ%ŸñŽ{uÌLh4ßÁ×FÆ÷ïÀðŸ/ç² ÊçºVåw<:n÷³bÂz’5>^ü‰6>ÖÕ·x`žc[_ßÍo*Š »†ShYæ¬Ç(Â1/Óœé í²Ü6!2˜¹3ó÷Ñ³Ü $Qœ¶N¯û¤dnÓ„ß|@Ó!kèܹ±qIô[ö3M¬Í n[ã’ÅÒn𩚦,S˜˜“ h’³ø¨AaÜsF®÷“AÌíŸ8ù”2ŸâZÂÓ.øÚ—æ«K‡Yz'†Á-Ø Àû6iå-lÚÓó½¹a̹èhûì¸LTÚNMrÒ³ ã­ílŸ}©l÷éw÷ #ºeZ÷4Ò¿Àû¸>íÊÖןg¬Óç:—/ÁÚ;1Œêô6c,JR¥ê¸¸{Ñ{xê”)†BYŠ™]ªÒ}ͦo aýGÕypd“’)ýÆê¦ÔŸ×ý27åóªodužr‡ÂàyÎEú1ka­½Å>ØøsC¯m/Û5eÝýØÌqJ9®Øû€±¹>o5[øð} Ô Q\¹pÀ£XþýZnÆ«Ù7ôúÙø6qÌêZõ"®Ñ†·¡ûYÿ@ŸNéâSÜ®#ðM^ôõÝÿ³wßÑQ”mÇ¿³é!¡’¥ ˆEADT¤IE¤‰€Š ˆÒJDðADŠ ¾šÀ#(½JG HÝ÷„HL»!!›ä÷9'çÀÌ=í¾¯krídvFÅk†.¾ºòÖ{õYóêj.M'Çå6m˜Ð¦óþФÉàXÔ¡~¾ž`&P> 8ÍGÂ\ý;ñò¹»'7¸Á±ã—áñûíÞµ´öÃõ–iv?†ÆŒ¿'ÛÙ1a W§¼ÿøÔ'¿ñ»è=¥~†‡*Óú#{7#åÕÏ …fÒb¿îÛC w§ŒñtOvFsÅ‘˜þõt\ÇÍbÍæÝœ¾|ãîâøŸ»X½ö"»Ö Jÿ¡¸,ìߟ̀—&ðíÛ¨9ü™,‹ËŒ,Ÿi±q›qÊH?8ƒ¬4­‘¼³î.nEùýÀÞäûVŽÞÏá)ææÂ™uc‰Jú" ~‰ŸÄ¾½}O÷31ñ ‡ç92ööè\2ñjàìc×nÛ¦cñ|Ì:á”1îè½Õ·“Ñ\q4æ<‹Õà­É³X¿ùwþܹ‘%Ÿ&^Q»~þŸ?‰¹¨Ï…ˆ¾üóŽmfÊ_×pq-Ĩº~NuÎr$622N9¥2ÓŠK·œ‹.—tÕª•Ã}nï¹-§SÚ&=9 E?%—÷ý­3}< öLŒEßÚïCfü¼×çèôŽÛÞí´½/±¾ Ižv#lE¶ž2ã÷²Š×ÛušÅ‹¯¶ïäÀöxYnßíL æÑ˶cµvd3ƒ:MIÕÎÆkíßãºÕF‹ S2ß}LØ›õï¶Â…x[–K›¤äµ$qÃOîâÝî³¼/íùS1VŠVƒ"®)CÅâZ˜7«ÅsŠ1{.Ðsl+ Ã`Ú«¡œ¸Cô•¿ø¸ÿ§÷d¼ý=?)n ‹¶{ž½co¯.ÓPÀÅÂünƒY½÷oâ­ \>¹Ÿé#;%·éú2ù\,,ë=œM‡Ã°Zã¹rîkW, _»fÙãwêG{ÝM®8sM»Ž`Éê­œ»z‹wŠJ,2|J¼bÙgÇ> ÀÇ}’`3)òÈÜïæ\W©‰ŒŽSNè‡ÌÚ?”ãá1Ä\=ÅÔþ30 ƒ6ãº8ÜçöžÛrÚ9¥ÇÄN¸FÊ~0Ãp¡Ë„®Þïz-º2.ô ~ݺŸóW"I°AläEV/x€&C‡8¼™ñ{0«ûÓ‘ã¶w;Ý?h‹Å0˜:ðSN^!úÊ &½2+[Ï?™ñ{YÅë]ºdí³fLOªV®EÛŸRuÀœTí¾Ú™_/ÅP°|gÆ?Q€âÞ£G…D_ÞDû¡Ë²l‡õ-êTdÃØž׿ÅÓ)×wV–÷ÍêÑ¿ðÄð:iί;¼ëÇ$~cù¾úoð͘Š…}K³GkѨÍëxµžzOÆqü –ÜçëA×ú5R=’ãvóì{{¨ÐŽ5+¦òìÃVÞéñAAÕiÙgFíaÉm VìÌÚ¯'òTåë íðAÕiÒº/ =I³Á3³5ÆïÔöº›\q4æfô­ÇžogðbÓFV|˜–}gS·yGæ-Iy¯^áJC©_ÀƒëIW~›¬çtç"Gb#£ã”ú!3}ÒÆ‹Á/6%¸N ¾¹P”>c1²î}÷¹½ç¶œvN)VýU~œ5‚ʶ<÷X-‚ëµb]BEÞš±Š5Šfx¿k–òà÷3ì•4ªWÀJU©Ù°5Ó×D3üã¯ø¸ÍCïCfüÌêþtä¸íÝŽ_Á,ÿ°7ÅÎ.çÉ:µhÔf>í'']ÙtÍ–óOfü^¾ë ”€iš&QQQøúúÞñqÖ¯¦[H޹»{VôŽl¹—ÏkGóq{qõªÀ®Ëñ´êû!§œ·óÒk[%ºŽ Zýð,Ø}„æèc±·¦¼ù¬á‹—.âWÌ/û¾°¥“ŠˆÜ+Ö¸klÚœøÌȧ_Ÿg ×»í·Eî½–¯ŽgXßÔ (AtØf @³¯çÙ>qUXˆHn6·qÆŽÂ3ÿ´9ŸÑýÕy¸DršqOû1~dBžÅt÷¥\`5†O ¥ÇS¥òlŸ¨x‘\­ûš-tW7ä©~ÐbÉM‚šue~³®êˆ[XÔ""""¢âUDDDDDÅ«ˆˆˆˆ¨xqrúÂÖ¼ÙSÕs""""âüÅk·þê5ÉÅëݾYKDDDD$£tÏ«ˆˆˆˆ¨xQñ*""""*^EDDDDT¼Šˆˆˆˆ¨x¯"""""*^EDDDDT¼ŠˆˆˆˆŠW¯"""""*^EDDDDÅ«ˆˆˆˆˆŠWG¸fÕŠËû¥;ÿèáýYºÝ[ןִÌXof­;3úÖÃË—RªÒ²ÓËô}®Z®ÜìèwÉÅÅkV©òOßš¶xÎÞÊ„ƒ™ôzGÄ|Ç´v©ƒDDD$×Éu· =¼ÿžÌ÷z{i1,n”¬X— `í¤Ù"""¢â5+,Ú‚òþATkô6V3i¢iex£Ú”÷¢éë+R´¿vôWFõïAƒ:u¬F½æøtå¾äùåýƒRüYýßÿþ÷ŸÜ/l‘<= Ruê=ÑŠa“q-ygÒ_GZë<ùë"B^lIp•`*פiÛ>,X2E››Ëøq>=Û¶$¸j0«Ö¡eç¡l:¡¾ô,ü$ñQ;2tŒåýƒ°Y¯0sT?êÖ¨N…€ª­ãÖõl]4™gÖ§b¥GhТ Ÿo8΢‰Ãy¢^*=BãV}øñ¯ÈTÇpaë úunMàjøV§á³]ùdåÞTÛHwLí\ÇíŽ7æâvF½ÚÇêÔ! bU~´)Ýå‡mëŒ!""’׋×ç?XÈÓ%|ˆ:½”þߞ௃Xr: ŸŸfñ¸–ÿ®Ç–иå«,ÛjeäŒÅìÝ·•å¡CˆÙ4ö¶ë¿õªhZWI×ýàË之ٱ{ûw¬c|HKgŽ¡õˆ v¯ãV·‡Ò´×XöØê²lývm\Bð^ïgøxû¥Tí;‡¤Ïøylß±…9Ãêr`Ëôk?1C}sù'Ü|qøoú.t15º½ËÆmÛ9rhO†Ö0ô÷"Ìûa=¿ÌíÄÙÃÛÓófdÑêMü<»'÷mäõ—Rgø¾ÏhüÒ›l¯É—?oäÀŽ_èU-‚ÉCÚ1tÅ)»ÆÃÞu¤w¼c۾̗?ýNÏÉ Ø³'VÍ¡[Çøir/1DDD²™˜¦i…¯¯o¦ý Ü‘/lÅ\ÚÈ“ÿy…0—R¬Úð1¯4x“¶û˜³~%ñLn7­é£L9q>«þÇ€‚én7Ã_Ø2­”¨Š«W9î^yÇuü{ú‡ k3ûL£6lå¥û½¸qaUƒO‰îìZ78ÅrïoÚF[?/l —ñ¯ÔÃâÊ‘ƒ»ïØ·Éûb&pæÐV& ÄwÇ®Ñì½U„¶+ëÐ1Þ\ç¤ÍÛyö–>Ïh?}¶uðÀf½Š`=fmÝA£˜¶*ÖÀf¸qäàÎäe'6®ÃŒ¿#™öûvž*”¸ÖØSTy Ï‚³ïOî8ö®#½ã­\±2±&|¼ôgšW.Ž¡ó„ˆˆH¶)ï„iš\¼t¿b~ŽakÃúÕ)þß-¤?ÇŽ°«H½Ï¢ñÕÔ4è³€^hÏèºÏþ"Eá 0ÿï(BÊȔΈ‹ØÏä±ÓùeóÎ^Š ÞjKžg9ž¡u.>€ç‹y%Oó*ÚÃóK€Á)ÚßÚÎâZ8±.´%8üÁÝË—+TaÐø—yù¹²>Ƨ {fJ?ÕÏï‘xL.ÿ|Èh4ͰxbL[\Še½À«µ«§Z_lÄ&»úÄÑu¤u¼/ã0jKwÆjÉ}¾t­_#Ŷ‡.™A»†Á¬Ó“ª•kÑvà§T0Ç¡uü[±ê¯òã¬T¶mä¹Çj\¯ë*òÖŒU ¬Qôž°#ǘ•ë°GÁŠYûõDžª|¡ž"0¨:MZ÷eá¯'i6x¦]ãáÈ:ngFßzìùv/6mD`ŇiÙw6u›wdÞ’Á:cˆˆˆd3‡Ÿ6°aýê Ý\+""""âhMùï§ XÔu""""’S¨x¯"""""*^EDDDDÅ«ˆˆˆˆˆŠW¯""""¢âUDDDDDÅ«ˆˆˆˆˆŠWÉ#\ign}G}zîô ÛÌÜŸ-ù}Í8<,iÏ¿ûâ Û•¬·óÛÙLY°ŠÝGN›€›»¾ Q¬˜ß-[˜§ú‘8W®Šˆ¨xÍ6ÿ>É;ÃÉ?êÌJBæwá‹n-’eN,J›‘?ðÌ›ÓYݪ.=l\>s’m[6ñíÒ¯ÕAÊUI¢Ûî ÐÛß'„ð[D¬:C²Ì¸ kÕ±E|ÜqqóįLÍÛõ`æ’ŸÔAÊUÉéÅë…-#(ïDyÿ *U§Þ­6i׬fŠvûW„ò\ãǨLݦ홺tWòrö˜5¥5Ö„p…ÌM·ÝíÖ™Öô›Ó¶.šÌ3 ëS±Ò#4hÑ…Ï7gÑÄáüøWdšÛÛ±t:­›6¢b`0µµæã婯N_غ‚~[S#¸þÕiølW>Y¹7Í}±Y¯0sT?êÖ¨N…€ªÊŒ{lGTOæçÍ{»—~üÛ1¶ŽÄÿÝÆ¤#±vàÇùôlÛ’àªÁT¬Z‡–‡²é|tŠvwÊ+åªrUDT¼æ8ë~ðeòÜÅìØ½‹ý;Ö1>$ˆ¥3ÇÐzĆä6a[&ñü°œ-øßoÚšÿ¾Ï•/_uh;<þ&ÃjûqiW(ÃWŸM·­a­{èïE˜÷Ãz~™Û‰³‡·1¦ç3Ì:È¢Õ›øyvNîÛÈë/MLsÙ¾_Eòá¿gço+yÞ/Œéo´ãƒ-aÉóÃ÷}Fã—Þd{|M¾üy#vüB¯jLÒŽ¡+N¥Zßw¡‹©Ñí]6nÛΑC{”÷Ø´Þu8ôÃ<^îÒžz5¡Fƒæt0Š¥§hkïØf$þ3“ŽÆZçЃô?í;¶0gX]lù~íÿYç­· =¼ßîÛ†”«""*^Z»÷†Ó²~eò{¹áꙟzmÞàÔ“’ÛÌ}ãkl¦É+Ó_£\/¼Š<Äé!o«ë§QÜÃ…åƒ_áDŒ5–.­÷ÝwÛQÔË•5»'O{ëÝ)êåJ©GûábD_\™æ²ý¦õO<¦B¥0µ/¦iã«7æÿsìfc3yû“Üç‹«WaÚŽ˜Àÿ½ÿAªõ™ºR½L@2Ë£fòÝŒ·x²F9Ü-¦irõüI6ýß7 ëñ ý¾8âðØf$þ3“ŽÆÚësߦF™"¸ºzQ÷Å‘\?÷M¦ô£rUD$÷s͉;±ŸÉc§óËæ=œ½A¼Õ–<ÏóÏUª¯/Ü U1¯äiÞ~Ï:´=7Ÿj|>ª!OŽXM?±vróÛ\Îqì³@ýü‰Ÿ \ &Ok4ͰxbL[Ú>~þ–cò*Òà K¡,:{€WkWOµllĦTÓž.ì©lÈfµã“Fí°Æ]ã蟲}ózæ|ò%§b¬¬2:áÐØf$þ3“ŽÆÚ­±kq-œXÙ2¥•«""*^Ò„6=˜÷W$MÄ¢ ðóõ3òÁ˜¦™ú÷T&l³lëèþùcÌû~³BêÚ·Ÿîl—4vÌõ–ii‹½nþUô×}{(á~çk4®†’ÁY¸¸ç' ¸6ÁµiVß“Z­f‘pã@†ÇÖ‘¡ÍHL:º?nFfg§rUD$/É‘· ,:ÀÄžO$®Àõ³‹Sµk{Ÿ7ß…Ç$O»¶"Ã]5ðó1øZ`Z÷‘iüB10mq\½å*pô¥ï²¬V\úç .Ñ—·ãí×*yZÇâù˜u8BQžƒ ì €»om‡Ç6sãÿö²"Ö½'U¹*"¢âÕ©µ{ЀÑ˶cµvd3ƒ:MIÕ®ûm±S~ÊÉ«1D_9Á¤Wfex»^E2ÿµêD_^Ÿj^›û …QK÷)üä.Þí>1Ëú ´(ÇÃcˆ¹zŠ©ýg`mÆuIžß-ôeò¹XXÖ{8›‡aµÆsåÜ Ö®X@¿vÍùN¦^‹®Œ ý‚_·îçü•Hly‘Õ Þ ÉÐ!mfÇÿídE¬ù{&^Ü­\‘œ_¼]2ƒv ƒY3¦'U+×¢íÀO©:`Nªv~u³üÃÞ;»œ'ëÔ¢Q›aø´Ÿœte'cwLT™Aˤ+%·þÕG´¨S‘ c{\›N§\ßYYÖŸ´ñbð‹M ®Ó‚o.¥ÏØEŒ¬{_òü‚;³öë‰×(I¶{÷·x÷·2uçöoRÇŠäÀÜ‘ìå”÷¼ZcNÐå«c† ïOk¤QÀI¯¼šÕ™óqVŠHÛb^%qÒâÕŒåå··Ð}~wd› ëW«D”»"¢â5}gí˯±xûµe\°¾¬%Ù§[H‡—éÞk€:ND¹+"y©xÔc¦ÓCh%[é“"Ê]q>NUFžœÆäã¸yòy«2IÁ©®¼®è9€ÀW?§ˆ«®»ŠóõÎh¾üïW©¦wìÐNáqb›þ·…ý¦šT©"õëÕQ‰ä@NS!Æ]û>ëÎbqñaöȇ52âTÞ~k7L1­qㆼýÖˆ»Zï¿ß¬¥7m‰d®ºÖ¿B…Ó*UªÄK»RÌïuˆŠ×ŒsÏ_—ë V¬ ‘ÔòuÓȈSqqqáãÉ ® @ppU>ž<—»ZoZo—3MS.’Y¿ä,«_‡’%KPªT):vìHtôu.†S‰¨xɽ¼¼<™=s: ÔgöÌéxyyªSDrWWš4zœ ÊÓ­[7¬Ö.œ;£ŽÉ©9­.±_áÂ…™;g¦:B$‡ñðpç‰Æc&çÏžÂ4mê¯"""ÎËjµrîÌ)u„H§ÛDDDD$ÇЕW‘ÛÐ+&E”»"¢â5™Þ€"ÎìèáýY²œâ^$g殈äñâU’¼Hq/""’‹×ÿi¢«O’ç(îEDD2‡¾°%"""ƒé_ IDAT"*^EDDDDT¼ŠˆˆˆˆŠW¯"""""*^EDDD$¯É¶— ©[ƒ—¢é¸b#ïV*œj~ø1Ôzn^EŸeïoï;´îòþA@ʇN§5ÍÙÜÜÇ›\Ü<)R¼47kÇ›¯µ!Ÿ‹‘åÛN¯þ½^¾”ªP•–^¦ïsÕ²e¿rÅ}Î看ÊÛÌ?.Ÿ-ù}Í8<,¹ç¸ÿ½ïY},·[vôaZ9r«¬Ø—Üš#÷J¶]yíR€ÕïoIsþ¦÷×àß«{ž”£‡÷sôð>¶­ÿ†ÎA7X2ó]Ú¼»ÙÉöo?Gîâ§Å“ñ¿¾—I¯wäÕ¯N(£÷âÔçåmfˆ:³’ùÕ¹4Gþý#*^“•n=ÃàÒŽq„ÅÛR̳Å_dÌŽK† Ã^(•G‡ÆÀ·ØCô=€+?r¾=´¸Q²b]>X0€µ“>PF)îsý/¶fQÞÞµ@o7~ŸÂo±Šwå™ä¥âÕÝ·&½Kú`MgôÖ‹)æ…ýñ>á V|Kö¤–¯{Šy']DÈ‹- ®L@åš4mÛ‡ëO¦»­[ÿ$PÞ?(ÕŸ.l‘<= Ruê=ÑŠa“qÍšòužûW„ò\ãǨLݦ홺tWÚëÛº‚~[S#¸þÕiølW>Y¹7Cýäæ @BÌÑTóìÝŽ½Ç—Qž…Ÿ >j‡ÃÛ½9ßf½ÂÌQý¨[£:ªÚ5n9‘âÞ17·³uÑdžiXŸŠ•¡A‹.|¾á8‹&ç‰zu¨ô[õáÇ¿"3ûöãíþàÇùôlÛ’àªÁT¬Z‡–‡²é|t¦åÂ;ÿ©Myÿ ÿ–báûGSÞ?ˆ*uG(oï±YSZcMgPÈÜ;¶µ'wÓëÏ{™iíÓ¿ÿŸÖOFâçNÛÉhÚ“eo?^;ú+£ú÷ A:V£^óN|ºrŸÝçæÌˆ¯Y¨ÍàÄŽÞòþO)¦ÿ߸­n•búÅí¡4í5–=¶º,[¿…]—Ѐ¼×û>Þ~)ÝOré}ª[÷ƒ/“ç.fÇî]ìß±Žñ!A,9†Ö#6üSXl™ÄóÃfp¶àS|¿i kþû>W¾|5Õ¶Â÷}Fã—Þd{|M¾üy#vüB¯jLÒŽ¡+N9ÜGqQ»‹Ø|•3¼{ŽïnÄ\þ)©Ð~$ÃÛý.t15º½ËÆmÛ9rh]ã–S)î7ô÷"Ìûa=¿ÌíÄÙÃÛÓófdÑêMü<»'÷mäõ—&¦Z.3ñv:‡¤Ïøylß±…9Ãêr`Ëôk?1Ór!äíGØ0úÇí6ŽM¼Å$ðåÊÛ{ìÇßdXm?.í eøê³·mçhî¦ÕŸ÷*ì½"zógí'½ñt1°¸äsx[ŽÄˆ£}hO>f”=ÇvíØ·|•e[­Œœ±˜½û¶²Ê”×è³ê (èð9/³b&§°·¦,ï„iš\¼t¿b~Ù÷´χPw„3ö—3|Ѳg~þ›Iá A)~,>€ç‹y%Oó*ÚÃóK€ÁŽ_ÙŒØÏä±ÓùeóÎ^Š Þj»¥È8žüï¯/$n»Õ-Ûöö{ø0Åú½À«µ«§ÚVlÄ&‡NÉÇX¤.‹†VËÐvì=¾ŒœÀܽ|y°B™—Ÿ+›áí>]8ç&Ÿâ>sâ>=õó{$þ©ÈåŸ_ ’¦Ol€i‹ËÒc¼[ÇÅâšø Ó–i¹`¸`\ë2¼¸à(c–žäë—Êqá·±\M°Q°ì«é®ÊÛ¬ãæSÏG5äÉ«é1â'ÖNnžª£¹{§þÌÊ<°×鵡I…k>Î\NßdéïGûðNù˜¡"Õc›ÿw!å Ü“ãÍ«9èšÝ;ðäˆ:¼Óéö|´ZfÑlj÷…ÔÞøžlB›Ìû+’&ƒ?bQ‡øùz‚™@ù€`LÓLóRuº—²“üºo%Ü]2´OGïÇ´ÆröØn&È·þƤýWx«ja‡·ãèñÝm‚gt»®FÞJ<Žƒ;pk̤µÏ™}Œ·-bŒô×’¹P¥ÿP\öáÏOfÀKøöƒíÔþŒò6•mýÝ?ŒyßcVHÝ»ÿ…ld¤[¸®›NóWfK>Íù–>õîËòß7™÷êœyÏŠ¸<šƒÙþ’‚¢ ÇÏÍ…ëg?gíéuÌ={·b¼ùHÑTmÛ&]B_q韛¯£/}—x¥äþÖwøåšö/:•ø)ibÏ'ƒ¸~vqêmß—¸íïÂc’§Ý[‘ª]Çâ‰÷ÿÌ:qWýb¸xP¿.š…‹…åƒggh;ö_fˬíÞnÜr:Å=Nƒöcvæ‚{ú¼XˆèË?0ïØf¦üu ×BŒªë§¼Íæ_¡?ƒ¯¦u™©¹ëlczzý§4y1†/Cæ¦.\Ý–½1â }èȱu.éÀìc×2”#Îr¼*^ï´®…y»fQLÓÆëÞÄfšøÕAa×Ô»Öcb'\ ƒÐþ¡!æê)¦˜a¸ÐeB×t·ãŸô§ØMa)¿uØîÁÄ@½l1V+aG63¨Ó”TËwÿ -Ã`êÀO9y5†è+'˜ôʬTíº…¾L> ËzgÓá0¬Öx®œ;ÁÚ è×®™ãŸª¼ƒY¥0×N~Á”ÃWÞŽ½Ç—Ù2k»··ŸxŠ{§‰A{1»sáÙ±Oðqß$ØLŠ<ò÷»¹(o³™WцÌ­:Ñ—×gjî:Û˜>Ý÷b _†Í]A¯Gï»ëmÙ#ÎЇŽ[—é(àba~·Á¬Þû7ñÖ.ŸÜÏô‘ì:~g9^¯v¨3¢)W÷&g͆×J³]±ê¯òã¬T¶mä¹Çj\¯ë*òÖŒU ¬Q4ÝmŒÔ’û|=èZ¿FŠ{¿†.™A»†Á¬Ó“ª•kÑvà§T0'Õò~u³üÃÞ;»œ'ëÔ¢Q›aø´Ÿœô ꟻ/ VìÌÚ¯'òTåë íðAÕiÒº/ =I³Á33Ô?ÞjÀ‚Ÿ;¼{/³eÖvo7n¹âÞ9bÐÞcÌî\(\i(õ xp=éQHÍFÖSÞ:‰Ê!3hY<_¦æ®³éu« [Bã:7¼í£²Ù–½1â }èȱ¨ÐŽ5+¦òìÃVÞéñAAÕiÙgFíav¿³¯³ËÖ§ ät±W×T«ž²ïPE“(îuŒYêð¼v4·W¯ ìÚ¹O‹¡€‘+£O°¨ëì×òÕñüïÀiâ¬&ç3mÐèÄ+ #^Wçˆâ^ǘ¥¬qר´9ñ9O¿>^…«ˆäY®êû{Úñ#{rð,¦»/å«1|J(=žÒ«±‰JÇ–Ó¼òãŒNÈ1íÄy½7ú}Ö¬Y—bÚš5ëxoôû^çÝÆ…â^D¹«Ü•Üšgwbš¦iFFFš€yôðþtæÎšbš¦yÇvé-s›iÒŸ–­Ãªš€ÙkçÅäia;BLÀ¬öƶÓNœ‡=¹ÖÏÍØµ'îï6.÷"Ê]å®ää<³·¦¼¹\ØÅ00sÅ=¯³¿8@—²ù“§(×€£ógç˜v’·Üm\(îE”»Ê]É‹rEñºêr4•ó¹%OsËW€èðU9¦ä-wŠ{å®rWò¢\ñ’‚°x>.ÿ|ÑËpñÀ–cÚ‰sÉêwšßm\(îE”»Ê]É­y–ë‹W?7 çâ¬DZM $%›™ €ÅÝ/Ç´çÒ-¤¿ÃË8òô» ŽˆrW¹+¹5Ïr}ñÚ¢ˆ³ÏE±÷z<õó»c/^…[ä˜vâ\²úÕwwŠ{å®rWrkž¥'GÝóz»gÀöêT€/ŽG$O‹8:€²/…ä˜v’·ØŠ{å®rW$¥ó¨¬ÛÍ‹¿¾Ç öq7 t7÷_ˆ4#/ì7»ù4Ý}ª™û®Çç˜vâ¼騡]rüÝúÓ±C» ?nÇÞ¸PÜ‹(w•»’ó,Ç?*ëߟPyÓ–«w6îYɳ¥÷P·t! •®ËÞ2ϲjïF‚¼]sL;q^o¿5‚Ʀ˜Ö¸qCÞ~kD†×y·q¡¸Qî*w%·æYº5cR5KTT¾¾¾=¼?Ý6¬_M·þ¾×aÃúÕtï5€ÄÂ]Ä9†‘*¢£cèÔ¹»wï!8¸* ¿˜‡——gŠ6åýƒ0M3U~(îE”»"ʳ”yfoMys¹‹—.âWÌ/w<çUä^ðòòdöÌé4hPŸÙ3§§JJQîŠ(ϲ>Ïtý_Ä… fê守dSžéÊ«ˆˆˆˆä*^EDDD$ÇÐm"·‘¯¾守òÌÉŠ×ì|3ƒÈÜé©]Nq/¢ÜQžåÀâU‘¼Hq/¢Ü‘X¼6øO}‚•BÍé:`K7Ïôí©Ö€ð}s³mìòå‚rA”³ÊY嬊×àô›iðê$~[õ ³W­cjÿÇøíÇ3vÍ·G×O?¢¸‡ ˿‰kÚû›8½¤‡KÚŸæ<Š`;-ýô耙|7ã-ž¬Qw‹iš\=’Mÿ÷ ÃzÕø|TCž±š#~bíäæ©Ú”ôpᯘÎÄZ)ã™ú`MüÔëâ^2Ûúªb£v|Ò¨Ö¸kýóO¶o^ÏœO¾äTŒ•µSFCç/R´¿›î­1'’NeëØå%Êå‚(g•³ÊÙ¼.Ç=çõNÁz7Á\¶õGt÷/ÈßßcÖŸWSÍï˜ôç–Eg¢Ò\>òô×ø”|1SŽÕÇ%qxblfªy¦-&q]Òþ‹{~‚kÓ¡Ï0¾ùonÈÔ±¸´ó3 Wêšíc—)” ¢œUÎ*gU¼ª;øù|-0­ûÈTs[Œn À·#¾"täËßÐjLóLÙ›–EŸA·ôbtªyÑWàY¤Å×S(0ñÞwßÚ™ÖSÖ˜“ ¼‹‹7C&5Qè(” ÊQÎ*gEÅkvð*Úù¯U'úòúTóŠUÆÇÝêpiçTZ½1ƒ½'/“`MàÒÉý„¾ñ"íºL½n“ñHÑLÙ—~“:ãn1˜ÔåmÖï9At¼k|4Ç÷l`x—1,îtŸÜ'¹}½]ú¿nÝÏù+‘$Ø 6ò"«¼@“¡CîjL[<O²nÅ\:6yß"óñÊÇßЪx>ŽrA¹ \å¬rVî 0MÓ$** __ß;^úÞ°~5ÝBúsìÈð·{ˆi‹ap£¬<{=Íù‡ÖÃŒ…ßòûžÃ„GÆàå[˜€ª5xþ¥^|Üßáí¥'l×Lû|)›wäÜÅp¥@±û©ôpmÚvíKój~Ém_{¹7:Íù°Ë\‹ºA¼ ¼| Q60˜gڇУy•Tûr;©ßPb`qõÀ·`A(ùÔ~Œv{C‰(” "ÊYå¬8ZS–÷Â4M.^ºˆ_1¿¼]¼ŠˆˆˆHÎ*^uÛ€ˆˆˆˆä*^EDDDDÅ«ˆˆˆˆˆŠWQñ*""""¢âUDDDDDÅ«ˆˆˆˆä5®÷zƒÖ¯V¯K®×à?M÷"Ê]±#Ïœ¾xèÞk€FNr-Ó4Ó|à²â^D¹+¢<3ïúEW®Ù¹ó"ÎÊ0Œ ŨaŠ{守ò,yæôÅ«ˆ³Ó+E”»"â|y¦/l‰ˆˆˆHŽ¡âUÄááátïÙ›ððpu†ˆrWD²!ÏT¼ŠØ)::†Þ¯°aÃ&Bz¿BttŒ:ED¹+"÷8Ïœ¦x:µ†îÍkSÈÛwïBÔnÞ5_Ïôå½8'«ÕÊkƒ†°{÷vïÞÃkƒ†`µZ÷Š{Qî*wEy–yæÔÅkÂ<^¥9˱éD8—Ol¢Ò±å4¯ü8£2mygo'Îë½Ñï³fͺÓÖ¬YÇ{£ßWÜ+îE¹«ÜåY&çÙ˜¦iš‘‘‘&`=¼?ÝŸ¹³¦˜¦iÞ±]zËßÜæM[‡U5³×΋ÉÓÂv„˜€YímæØ»¼³·çaO.¤õs3¶÷Š{Qî*wEy–~žÙ[SÞ\.ìb˜ ˜NqåuöÇèR6ò´åºptþìL[ÞÙÛIÞ¢¸Qî*wEçÅëªËÑTÎç–<Í-_e¢ÃWeÚòÎÞNòŽˆrW¹+â8§xIAX¼ —Þ¼`¸ø`‹ Ë´å½8—¬~§¹â^D¹«ÜåY-^ýÜ,œ‹³i5)”,fB$w¿L[ÞÙÛ‰séÒßáeyºâ^D¹«ÜåY-^[ñbö¹(ö^§~~wâoìÀ«p‹L[ÞÙÛ‰sÉêWß)îE”»Ê]Qž9Î)îyíÕ©,_Hžqt>e_ Ižf†adxygo'y‹â^D¹«ÜɘlTVüõ=f°»Y0 »¹ÿB¤ya¿ÙÍ¿ éîSÍÜw=>Å£þ½¬#Ë;{;qÞÇ€tìÐ.9þný騡]†·£¸Qî*w%/çYŽ~T–«w6îYɳ¥÷P·t! •®ËÞ2ϲjïF‚¼]3mygo'Îëí·FиqÃÓ7nÈÛoPÜ+îE¹«ÜåY&çYzŒ¤j–¨¨(|}}9zxº lX¿šn!ý3|¯Ã†õ«éÞk‰…»ˆs2 #U.DGÇЩs7vïÞCppU~1//ÏmÊûašfªüPÜ‹(wE”g)óÌÞšòær/]į˜ŸsÜó*’xyy2{æt4¨Ïì™ÓS%¥ˆ(wE”gYŸgºþ/â€Â… 3wÎLu„ˆrWD²)ÏtåUDDDDr ¯""""’cè¶‘ÛÈÎW߉ˆrWDyædÅkv¾™AäNîôÔŒ.§¸QîŠ(Ïr`ñªGŽH^¤¸QîŠH,^ü§‰>ÁJž£¸QîŠHæÐ¶DDDDDÅ«ˆˆˆˆˆŠWɳ2tÏë¼ÙSÕs""""âüÅk·þê5ÉÅ«¾u)""""ÙE÷¼ŠˆˆˆˆŠW¯""""¢âUDDDDDÅ«ˆˆˆˆH&±ûiå*TRoI¶3 ƒ£‡÷+6E±)¢Ø”\§w]¼‚“%ÙkÃúÕŠMQlŠ(6%ÅiZtÛ€ˆˆˆˆä*^EDDDDÅ«ˆˆˆˆHfsÍËǩӧ9FBBBºmMÓ$¿þåË“?¿¯"'1M“˜ØX""®qèðQ6ÿ± /b†J—z‡«T¡\Ù2ä÷õÁÛÛ‹EŸ %ï9zy's·ÅÛ=?Ï  Ê«S$Çùaëß,\s «i‚ibš`bP?è<§/¼©xÍ&×"ƒ–-žÅ×7ÿÍ2%1<Í›ašøïØØX:È©3§)m”Ä×Wl^ω¿Nrøè1Öoü WWjÕ¨Î3-žÂËË‹ .°ÿÏ?Y¶ê{l6“G‚+S¹R AñôôPJžoeÎŽ!´}2Ã…Ÿþ˜Á²ƒéUãcð-§’Áj3™¿ú(£{5&Ÿ§VÓ Á6®ÝH`ÜÜÿSñªâ5O´ñ xz{“ÏLJظl6¦ibbbÞüwÒOl\Å‹— !!¿Næ¡Òâãã£Êí…k\;wïeóÖm¸»»R´H!òåóâò¥K2!_>obbc)T ?Wfÿƒœ9{–s¿z•zµkâíí­Ž”<á‡Ã3©\®:-ÏÉëÛèÕüm~Þ·ŸÍ£Kµ1ê qZ'/Fñ`‘|X,¦™xéª@>O~ÝuŠ8›AlÄZ W{ÓT©xÍfÃHú—ÅbÁfÚÀÃbÁf3Á0Á´‡o>_*’À‰SóP)°¹ÝÙóøcÇ ô¥PÁ‚”xàŽ?Á¶Ý[¹xñ"ù  téÒV à¡2¥o1ñõåСÃ.TˆêÕªª#%× ‹:ɦSKÞ>”}‘?p%îeóÕ%,ì«ÍF¡B… ð¯È¾ý{9ù÷i*So/¯ë+ï€O‰–ü¾fÿºõñæ|{Æ+ÙçÒ¥p®^½FÙ2¥É—/înnðÍOÙ2qðÐ!._ºD>_Š+ Àý÷ûaµZ±Y­X­VŽŸ8™fñz3 «»;ùò¤xÉ2<\§í^z‘À¢žÚß»‰­¬ŒË‹{×ñÉܯٴmç.G`q£p±(S®ÿóQ–£r.ë-Ü5Š– :pÕö7ñ§)å]ãa{ ¿B½*/Üv9kì)ªW{š(« ‹‹¿ìúÒ.ŠÉr¦ ‹=Îo/g»¥&HüžƒÍ„Xm`3°ÚàjDäm×wtÃ2>]ø-[vâòµh¼ó! ¸&­^êE›ÇÊك׎ýHûÖopøFÍÏbJ¯º(¯·)^-ÓÀ4-Øl¶¤¢"1°1-˜6«ÍÆ–ß7y-‚Ñщ_ð2M ,˜ªx½)êÌJBæwá‹nÕÉ9T‚5¨¨(L›|ÞÞx{yãééIÙrîTªT‰ÑѸº¸KLL4qqqDÇD†A|||ºë?rh/¦5ŽˆËgÙùÛZfNœÆssæòÊG èÿd©\Ñ‡Ûæ¤ó‡ßòàÝùpÞ;T~¨q×ÂØ»õ7–.œ§ ˶ @Á>IDATŸþ «[4ÕJ7â+ ‰7ãxÈ«“V½FïêÓ0¸ý•ª³kÆeµáêãJBTï®=ÇܧJªS%KÅÄY™¼l?VÃA/5aÈGËo½¢… ØÌÄ‚5Î ‘×cp7â *S&Íõý8¾7ýæl¢Òs¯ðÉâI>˜Ÿˆ¿±è“wÞ£%?†L᳡MÒ¿X²c1/tËÙxƒ£¿âݶ•5P*^Ó)^ ð&.›iKºçÅL¼k1yàþû)\¸0 ññ˜¦‰»»;þù' ñ±·]o ·¿Oá·V«©[@_Üɉ,ƒ¸¸x.]¾ŒŸŸ>¾ùñôðÀÍÍ _ßüXˆ‹'::777"""ˆ‹»Ftt †aÁb¹óŸ— w ú•¡ásÝiЬ !ÿyžÐ­)µv=Ï=³ï—½zø3:~ð-¾þÝø~ê \“ºÃ½Pq}²5>ÙZA–Ó‹€„ë|µw,}_x›¿¢çbÜ1-Ü•õ{¿!°H=JHwùEöðꜾ|Ôn;'| O RÇJ–¹p%š1‹vSÉ¿4OÔ®ˆ‡[â•þÖcÖ¤h7𣕸¸l²aIsŸN¯ŸÅs/OãšéIŸ¾fðSi Òûݬ.HºmÀ°`1 #ñð`1,‰…­%qš‡»ÞÞùðööÆËËWW·t×;kJk¬ á ™{çdÚº‚~[S#¸þÕiølW>Y¹7E›î5¡¼_]ŒNž6µQn4=ùÿÑ¿¦¼A5{k`3¯/ùóûr#:† aaDFE’`MHz&Eâm%111DD\åì¹sýÅï+ÊѳQØl&NEpèt‡OGpäÌUŽžàðé+þû2þ:ÏùË‘\¼Å¡“Ò|ÒÀ—§¯Æ¶/™v¼û>ø"Q•jÞ–y#xnØâÝJ0æ«•ô¨{¿JÅ«ýÅkb‘jüë'±hýççÖiö}Û°ë§QÜÃ…åƒ_áDŒ5Í6sÌ&Æfòö'¸ÏW¯Â´1%ñÊÕû$·«Ø»-ø€Ë{¦k31m±LÜ}€ý ÿ Vo l&ðñö&~_âããØ²u;«¾ÿ‘£GOyÓ$ñX//,.®Üˆ‰åïÓçÙàX,Š.äð6]ú­k·ddçO9p}-ÿÖˆ˜‹˜˜,Ø9’çv%<ágböäÛŒƒg·äVÉæwX»ÉÄ/ŽcXÜy³ubÌ—iónƒã_L!­§õ›ÖŸrE¼ð*TšSûbš6¾zc~†Ûü]Êz¹rõÈG칑ø²kÜyFﺄaqeÄó¥¹ÀäåûYà*í[6$7þº É­ÀÀÄÀf&~AËj3I°™X­I_á6ÁÕÅBl|^î)Ïg§“.•¼ÍyÎÅ£xR\N5¯ó+±š& Ç̦M•B(;éž×[ ØÄZ>ñÏÁ‰È2±˜IÏ|5À4-ÉÏ}Mï ·ró©Æç£òäˆÕôñk'§>¡/:{€WkWO5/6bSò¿ TxOË·\=ºx’SvâQ µØÆö©;aaS潆añ¤…ÔL‹ (þÀýT­R™+W®°kÏ^âââ¸r5‚ØØXÀÄ0,¸¹¹`KH ¿'ù} $¾}+T±ÆœH:á=äpŒd4¶Òs7ë(íé±èþ޵RÎ3ý6.b?“ÇNç—Í{8{)‚x«í–>I}%î驟ÈðMØ ž+úÏ—(½Š¶ôŒÑŒ˜³c(Õ+?J@™jœý“Mßbó‘ï³î‚ïoŒOo‚JÔá÷« qµxPÊ£&ãíGÿ:sî¸î¨ÓŸ±!"–Bþ¯œ/ñ,·|UZ¾ ïÞȬ3Qô.‘òJÖóÅn×"‰ãzãÂR`h†Ú.׺ /.8ʘ¥'ùú¥r\øm,Wl,û*Õò¹)rxkâc0m@¼Õ$ÎjÃÕjÁŒ³q=W‹‰—›§›§›%ùßæÿ·wçáQ•÷Ç¿sΙɬÙwÈ(FXÄ(½E¯^ñ‚†µâ¨ÖK)«k%HÅDж[E‚ˆÕkŸ^´´(¢xe¹·È áÙf23çœûÇLBB€$#xIø}ž'd`ΜaÎû›÷üÎ{ÞÅ0A{”•£¥Õd$5ËŒ(•ƒ¾ Åu:—¡žÓëBw^U[óˆ+Êè9ï±qö=¼ž¶†üë’¤°Îvn4tI^Ï” Ô?nXœ#”Ê* FxW(ôÛ–”t±€ñ¯ßȲfðêƒÏðþ¡ßïüšN¶³ŸàU[:ãR]üöÈ—l­ªåÅ¥tÎ[À#<Îè5 ©©Œa{wú„sîG´=>UÅjÕHNN$::4çëþýp8”-¡ôD)ª¦QVZЦ©DÙm¡uc#pbûkÄ÷ÍosŒD[j÷wæ‰]e,?TÍY±çÜö¹‘?aÙÁjnžº€wßD²ÇfžYÙ “†7¹ò–©/¸`°Í¡ ˜^½‚ÿ©ý+ýº]Gfj6~¾‚b¿w ¥ýÜ7‰¿n‹þéCHu·ÜgïËçVP¾g>={Ío~RŸÿ_Êý^>g¿ÉÓPßœÄ/Y ÷>Ǻß|@ÿYÿ.AÐAÌÑÂ͇xû½ ½y ]œƦšÜ–Ó´õŽ9CCõÎì·ÏÐÝÅdùìP 朹+ÍUcç²ú‰;A¯âù‡±hÃa),I^#Ob•&Ikx V£A]máHüþø‹¼¥›š=7nñOq© ïLœÅæ=ÇÐõå%ØðîülÌmM¶í2<´RÍ–ÇWaó\M~ª Wê½ä¸m¬~b[è‹4¼³âyøýáÄ.ª¦a·;p»Ý¸Ýbãbq¹]8].l6[øâF!ÔñùêZL`M#@åñCl|÷Œ½y8ÿ¨vñðÂBòÂIc[c$ÒØê¾Ýµù˜7â}œ.¶×OX>s(5ÿ|;¦,dûþc ÚŠ£|¾~ Óî¿£aÛ1C·âæ¼³ Ÿ®sì›-üòž—ÚT^ÌÍÃb±ðòÏs Ü‡·ü 'ÿV9B‰® f*¤î„¢µÓ‰¡+]íý)©ÛÅgËÙYû>>£’l÷0 7½ÂØì§°©-/°qâëg)òé$æÌ$AkZ—*Z<å$¢ûŠ(øº´És‹'/f™_E‹&/Åb±0rÞýÍößÚí6w šBÐ0I¸f&©V¹ƒÕÑäôLdn~ßú_ìÚÇ€¬ ¦½XÈ”çWó³gW3iÞ*(XIþÓ+¹ï×+™ºè}þôÁ6n½*™#¯äôëü¤œ,7€Û‘7s);•Ôƒœ8´‹Å3G³à«Rn÷³¯I<ëÿ+{l«Ÿ¼ŒZ^~xÏx@ ë¤Û@«Z¡Nõ… ­¿e´ºÏkcW<¸”¡+nâ½p†|ïûذ*…g¿Á´»ÿÒšž„t²¯Ë%oê+M¶u¥ÜKgûB¾õêtÉûEøêCaê-éܽö ª=ƒü—ày`••U”WT¡(MO°–ð Iíi¡`ᤷ–ãÇ“––ŠÕzæ~s™YW hQxbcIËèÆ5y?çÉûš¯°Õ–‰ôuó9” ‹> ?740°~ÆH߻޵ãžáãœÁ,YVȯ’²*tÅFL|=²N-à1mõR|3æó—‚Xû„FzËùÈïùhú[]f)¹3),pðØ’UÜvý›ÄgôfÔÄE°}¬t¤' ÅÆØì§øòÈz^X9‘ƒÇ““1†O+^§Â_̵Ñcø¯CÃnÄpeêM­Úçú9pˬg|~à¬Á°l*ØkF5üû’‘¦Ž¾•Ýß–ãIËdÒÜÅL˜Òìõ­Ý®±ø¾ÓÈYÅæƒ¡”n{ô)üªS‚“&\ÇüÕ;ùó† îªó ñ>ï˜õ™×²ôÍuL¹Œ²jO0<ƒ†išô‰¿ž^×®Á0 0Lt‹Ži*¨€©XmÿÝo»¶ödiR0þ£O/Å|IÔéŠrjðµ^9SQº$9Ñ ½¡1JUTU9µÊfx·¦©R§KòúÿÄ.§“Nééø|^tàµ7ÿ-€ª(Øíö†[¹¢ê˜EÁáp–Ebb—÷éCyy9^¯`0HP×Q V«•¨¨(b¢=D{<Øíö&-MB´çï@褭ê÷n5ŒP‚Z_§6ž¥¥ñßÏW’)Äw娨(l6†ºÓú®£Fhq"Em¸s ªJC].±,ÉëÅñá5 ÇÇã–Hç¼Ð©¿íi·ÛIJLƒ".ÉïAýŘ´<‰ŽP§×ç¢^ˆÈ!B!„’¼ !„Bqžµ©½ü“Më刉‹’ĦØBbSHòÚ„ <+‰M!±)„Ħ¸„â—V®°%„B!Ä÷MVØB!„í–$¯B!„B’W!„B!$yB!„’¼ !„Bq±k6UVÏ^—ËQB!„ Ó0›'¯¶(¦i^7 ƒrÔ…B!DD Óhš¼–••á­ó‚)G!„B\|þ^¤@‡B!„hþ Òr·&6kNIEND®B`‚xnec2c-3.4/doc/images/freq_plots.png000066400000000000000000002370471257141547200174650ustar00rootroot00000000000000‰PNG  IHDR6f eÖbKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEÜ&›?yiTXtCommentCreated with GIMPd.e IDATxÚìw\SW€ŸâÁ]mUTT@q€VŽ÷^u´ZµZ[­£n?÷h«mÝ{Tk«Ö½ª‚wʼn"Џ@† H˜ùþD $õà¬çY”J%r¹œÀÀ@®]¹Æ®»¸uë“&LbÍú5XZZf;þÜ|¥mCÑÑÑ<ô}ÈêU«yàó€6²tùR£æE¼O‚üENÇÅÆ ïõŸW¦ùìÝ»·ÖðE.^äÐÃlôº À˜Ïëbfb‚™Ä3æŸ÷`a‹æìõ¹Ÿ©Rß•šH3xR*•ꇹèyQg&Ó†O È=ê}^^½{±kç.æÏ™Ï¦?60Î|éÓ·õêÕSûoøyC–ü¶„ÝÿìÆû®7 …‚O>ù„.ݺгWO S¨°°06oÜÌ¥‹—xõê ¤víÚ >”òåËkäE¡P°kÇ.Μ>ógÏHLL¤ZµjôØ·FnlܼQ#̧Ÿ~Ê”iS8ßö<ä…>q¦>Ó…ËŒ6KçÑ#GÙ³{OžÚXÚëà `6¬ßÀÕ+W‰ŒŒÄºˆ5uëÕeè°¡”*U*CÝéz–7oÞ°iÃ&.]ºDpP0J¥’R¥KáêêJ»íppp‚R È%ÒŽ‹SÿNyœ s—ÎÊ€69 -¼6å!«ðóçÎÏ4Ÿ_|ñ…ÖðÉJ%f&&ì¿}€®5j0©aµòzÿḱY¾;ÕwM¥¦Z—[SHWf¿øâ È…9€@»Œùa ×®]Ãÿ±?kW¯E©TòôéSì*Ú1zÌh­}püØñ¸K[Š™©}ûõ 44”¯MhH¨ÚßëÈל>uš+—¯°aÓ*W® @TTÇÇÏÏO#ÞÛ·osûÇÛ\»~Mgþcbb°¶¶ÖÈ«¡q*kôñ¿bÙ þþëï á )›À€@FITT”æ3¤æôy‘H$™æ-ÕÍ<Rïú”{¿/ú1cú 8H÷Ý5ü;z €ž={êUÆÚü/VœqãÆ1úûÑœ:uН‡~­vûgç?êß <ñÂê•«INNfèСz§•“x2Ë»ÔLªÓ=õúåË— 2”ððð·Êà«0þ=ò/W.]aËÖ-”.]Z¯´g͘ÅåË—5Üž?{ÎógÏÙ»go¦}O äœôÊCÚñqê¤zfãb}”‡¬Â2Ù‘6|Rr2fi&Löß¾M×5Ô¿ÕáÓøÑ%×ߦ 3ÍY%o5¥³žg3}èTÒÇ!Œ‹¥™%óÎg@¿ìÚ¹KÕïLL˜·p–´›~”,Y’‰“'Rǵ lX·ïdïÞ½|1P5S±ní:BCBôÕ zõéE‰%ˆ‰Žáø±ãü´ð'V®\ɲËT~×­ÃÏÏR¥K1aâjÕ®…L&ãî»ü¹õOr &&†9³çШq# †Æi¨¬q­ãªõþõ[×Õ¿Ïœ>Ã’ß—P»vm¬¬­ÞæÍ€²Y¿a=QQQ8::2íÓ(W¾OŸñ’÷èèh|îûðû¯¿àè䨳®[·Žððpu›(_¡C† Ñ=.N>Ó•ˆ,ƒʬQ[ø*•«è Ÿºa&1áÚ¨oq]¹J«òVÐ%ÍÞ¾Ã$ÚW ÒÙbiÓrÌLÅ „@WDDD0wî\&Lœ€R©dîì¹Ì™3×Ï]±±É8s©ç¢Ñ7 [T¦©÷ÓšWh#&&Fí7ìUNÎNzõù{Þ÷9|$¡¡¡ØU´cæ /Y\áqÊ=߬¿qSË¥–Ö´ )›ˆˆì*ÙiÄU±REírR™QnÆÅÅeðkH ©w}˽_ÿ~¬_·ž#‡0qÊDd2 Ï}ô®3]þ®{©fÛË•/§öóËâ_Øñ×­þ“’’´Æ¥í^vâÉò9LL(bS†žá¦´yɪM„‡‡ëý,óÎcú”é3å!«ðêtt¬\è Ÿ¤LÖØ0½?]ÞÇžpguûv†­@ K©¥vMËÌŒë7¯S§¦æìËÓçO3d†8QY0gáaáÔoPŸ/} €Ç .]ºÄ¹ Y¶|Y†0Ö…¬uÆ—Úg‹+Fpp0'O¤B… ™æ¡xñâñÐç¡Æ¦mmœÜÿu§²}e?~LõêÕ©å\+GõÆâŸЩc'µŸ“î'Õ @›6m(T¨QQQÔt®©3.m÷²6û?ÎV›ËªMØÚÚêý,ujÕáßcÿÌÓ§OÕfdÛÿÜΊ¥+èÙ½§’Aîiêqñƒ‡xôø–––XZXbiiI±¢Å2§„?zäh¦ÉŒþ~t¦áÓ**ÚV.t¥Ÿº‘vÃtZR÷DlîÜ)Ëw§YZ #³=f¦fxß÷ƱšcåAìò†£GŽräÈ ,È/K~ÁTªúðã/¿þB›–m8|ø0:uÈp<ª>6ö-Z¶à¯í1nÜ8æÌCÕjUILLä‰ÿ._ºÌþ}û9tômÚ¶á-0~üxfΚIÝzu)P wïÜeýºõ¬Y·€Í›63wö\’““éѳ?ýò“Ι}ã,ÿiyž<bPÙåÄ>ß²iÜ´1{þÙô©ÓXøÓBì*ÚñØï1Ó§MÏN¹òåð{äÇÒ¥K9j$R©”+—¯0cúŒÕ!õ®o¹ :˜}ûöñ÷ßãX]õ.è?°¿ArßÄÌ¥RIll,OŸ<å왳¬_¿žð°pìíí2lˆ:¾TS#[de<{ñŒóh}¾‚… ƒ÷}oœœœ4>JgH<9mCÚü7nÒ˜=»u·‰ÆMëý,Ý»v§g¯žÔ«WZuj!‘H(T¸ÛÿÜNpp°x ¹ª?(5L…´œå†¬NQ7v\¦áöîÙ«3|V{ Ò*©fKŸþü‹Z‰xó¿YÊ=u æ¦æºOaJ£(¤îyеÙCœÂ$äaaa̘¦êÔ3þ7» o¿|kWÁŽé3¦3eòfL›A£F°µµÕ«_¦ºMš< ÏóžÜºy‹.ºdé÷Êå+øøøðͰotú›=s¶úÞžÝ{س{†¿À @õo}ãÌ®¬Éî A†–Í?þˆÇ nݺEû¶í3õ;`ÀfÏšÍúuëY¿n½ÑêÇÐz×·Ü]ê¸PÇ¥×ÿ»Ž… Öûô¥TRÀô4hЀ•«WbmõvÕ¤]ûvüµý/†šåóV®T™›7oÒ©}§ íËxrÚ†´ùŸ8i"§OÖÚ&lmm™8i¢ÞÏâuÝ ¯ëÚÏ€oܸ±x ¹LÚIu}6Aó¥´n™)!úžÂ”vÏCèÔ)_°PÞ S˜LÐþ¶Yi¯Óc'¾!äÓ¦N#,,ŒF1xÈ`YI€!_áèÑ£œ?wž©S¦²aã½úeª[éÒ¥q?éÎòeË9~ì8OŸ>à³Ï>£aÆôí×Wí·X±bw?ΚÕk8|è0~~~$&&â\Ó™ï¿ÿ^o9ÖŸ¡q*k Úi1¤lììì8òïfýo/^ÄÂÒ‚Ê•+3|øp†~=T##G`jjÊŸÛþäÙ³gØÚÚRµZU†Ê}¿ÈvýRûðo†óÍßGß~}µš£e†D"A*•R¨p!J•*…““ݺu£y‹æÚôüó‘J¥9|„¨¨(ìííõý(F~32ÃóÍœ=“q?ŒãÉ“'꯴ª_´Ä“Ó6¤Í… p÷pç§Ÿ~âÌé3„‡‡ckkK“¦M˜ûì3Z·iÍø ãÅ;X ÈEr:.N Ÿ•ò‘[á“”*âḱjÅ!íß›ÿÍÀÌÄ©‰i–rO¢ÊE¢yŒüí¬H[®{]WÉNæÏOxd¸ha@ Û"ªU¡÷YN>~ü×:®(•J.\º@µjÕDÅ ‚B~çd\œ/¡þ´^áÏœU‡·±¶A‘¨Àëš 4Ô4aJ’&©EÇDS¨`!ƒ 7:&Z´0@ È‚÷ÑÌdÌè1lÜøöËâ]ºvÁ¹†³¨L@ðQÓqñû>=o7QKLÔ2S‘ÇËE‹#“^Ö¾HLTæEÖÖÖ´nÓšå+—¿—Ï!Ù%§ãâ÷=¼Æ;&Píî@ ‚· ƒD» @\bÊ¡D@ Édî©ÿçþDDFˆR@ 8TsȨ@ujÔ¥#@ 4'ȵ()<òõ%$@ ¨d™¥úZ|ó^ @ èP @ P @ ñ1ËÊCÅÊ¢”ò1‰„Å?Í‘ŒŸ8C‚–ö—ú蛢ÿ Ò÷±¯òýà]ŽõÞõ{$?¤ÿ>ö3}<ù=¼'zW>äÜõï “þ' $IHˆ}!“ö'ÊEôÍôýe鯋>˜gý?g}@ð~ð.Ú÷»~ä§ô?HBð~àyî¤(@ôMñì@ ÈUÄ@ @ @ @ @ @ @ @ @ @ðA!Na@ è$!!¸¸8ÌÌÌ077ÇÄDÌ? ˆT²wÌÔ=õC©þt]ç6í;vÅ×÷!ëÖ¬¤yó¦Zýœ:u†á#FQÅÞž#‡÷åy[ãT´«À–Íë‘H$ü(•J¾< ¿ÇþÀ»=r1$$”»vsåê5‚‚‚ ÅŠ¥bE;7v£Më–Ù.ƒÜ|®Ô¶!‘HJ¥,X’%ŠSµZU:ulO#·†„íûØžD3ƒ¾Êc~Z8† ëkõsáÂ%&M™NE» ü±e×þ»ÎÖmÛyòä)ÑÑ1X[[ñÉ'¥©boϘѣèÙû ‚‚‚ùsë&Ê—/§ŽÏÇçC‡«¾>°oE‹U_ûù=æËÁÃ(Uª$»wý¥ÑwÒ"“É([¶ -š7¥oŸ^˜™™e»Of…¡}6))‰N]z`kcßÛ6œNveEVï½ôï?c‘””D½ÏQ´XQŽÿ{(Wó‘×}Sß±D~âC—_qqqDFG!5“RÀR†¹Tй¹¹ÖqEn+1i?ú&‘H°°°PçQ››T*£ý\à£T!;wêÀÁCGtú9pð0Rü¾Ïø=öçÜyO­ngÏW+ï’«×þcà—Cعk7Ož|ÄšµX¶|U¾*W¯7‰ŠzCÓ¦M>Švtéò"_¿¦]ÛÖb$#Èu’’’ˆOHà³rvD¼‰"êÍ¢¢¢ˆ‹‹Ë³<ÄÊå¼zIhd¸úïÕëHbcc‰åÕ눌nry®æ)99¹\NLL :Ý_çqYå¹b”•þ®5ôN;°ä×¥œ”È«°WìÙ³Ÿ;ÿÁÝããÆŽ6ZŸ|þü#G!22’¯‡|ep¼gΜ i“FÙJ'»²BW»õò„>}ΘÑß½?î@›6­ßi>r[¦ ò ‰”.YšâE‹óìÅSŸ£ˆ‹Ã\jNÁ‚077ÏÕ<$&$’œœDÓF-P*•$''sþâ“ÔƒõúõTãÞÉ „>³ž¡¡¯˜9k.Mšµ¢ªƒ3®õÜønôXüüç8ý2e>¡v­šÈå N¸g|i¸»ŸD.WP§v-Ê”ùDgžõÍcÓæm¨dïÈ}Ÿê{‡¥’½#‡Uß»ïó€JöŽ4mÞÆ¨å]¢xq=òÃÓó¢Æýóç/àç÷˜Å‹ë ëqò4n[àÖ¸ÍZ´eÀ !lß¾ƒääd,ü·Æ-2t„ú^jG2tn[°`áÏ™æoç®ÝÄÆÆÒ¨QCÌ›MµªU077ÇÜÜœòåËѽ[Ö­]ipÞµ{úëË—¯òãÄ©´ïØ•æ-Û1`à`þÙ½—ädeŽÊZ"‘P°`AªU­Âða_óï‘TªT‘‡ñÇÖm:û@Úë={÷Ó­{oª;»hø1¤OÈå V¯YG—n½¨QÓ§Zôé;€“'Ok¤™>}c­F¼o}Lßtô©§¬(Uª$NNŽ(qœ;!ƒû¹óP(â¨^Ý‘R¥JðâEmÛ´¦páÂH¥f”-[†.;²nÍ uØÔˆ[éV ¼Sˆ¾}zku¿}Gu]+%¼6¤R3J—*ÅW_  >>Þh2*4ôcÇO$22’Î;28%ô}øè¿Ç:ü[Z¶î Ñ¯““•œ?²eÊP©Rŧ“S‚ƒƒùjð0ÂÃÃéÛ§ß72C:rô_ºuïƒS-j»|Îw£Çò" w“tëÞÇêµiÒ¬‹—ü–af399w“”+÷ÕªVÉQ>Ž;AŸ¾¨î\‡êÎ. 6RçªôÙsç:l$.® p¬^›6í:±åm2÷]Œ#Œ!3ýü3tØHª;»Pݹ}úàØ±¹²Jø’I“§ÑÀ­Uœiа)'M% 0Û~³SŸ†¬L&..ޤ¤d¢Þ¼¦x±¸Ô®‡¹Ì’ˆ¨H^…‡ùšÄÄܰ'%'‘H²RIhXˆú:)9Iý["‘õæ5‰Díflâ㈠<2’°¨HJ”ú„˜Ø“’4ÜÃ""´º " ¡k÷Þlÿk$&&Á±c'èÖ£>|sœFª‰Å!-&©f™™V’Çõ?W½¤Ó¼´Ïœ9 ÀéÓgÞ¾ÄSÜ6øÜ¨å9`@?6mÙª¶T*•lþC5 ˜â®]ÿìI3‘À“'OY½v=[·m`ÜØ1T¨P_߇~wîÚ¯ïCì*T`ü¸1™æïÊÕkª|ôïgÐse•·Ì˜0q —._!*ê ñññ£–}‘"E˜:y"€ÆL±.æ/ø‰I“§qç®7ò4K¯†´·ÈׯéÑ«/K~]Š·÷=bcc‰çº× ¾™w3ïKËŽ¼ÑUOúÒºesµ"•A¹J1mjÕòí`¶rÊ ø›‘ß±zíz®{ÝЩ¸/^Œ  `µÙ\xD/_aaaA¯žÝ°´´àÑ#?u¾CBC ¡hÑ¢”-[&ÓÈ  `¶lÙ €}åJFi'oÞ¼aÜ„IãÖ°tÈ‹eËW±`áÏøø<@¡PdP€Â#"hÒ´QŽÓÉ)¯_GñÕáÒ¢E3fÏš¡Õߘ&pç®7ñññDE½áرtíÖ›‘ߎæÎ]oâââdÍÚ ¬Y»A#ìõë^¼zFÛ6­rœïFåº× ÕLª\Ι³çèÓw€ÖÁì×CGpæì9"_¿&..?¿ÇÌ›¿H/™›[Cf¾xñ‚Þ}ûsæì9õ¬òu¯|7z¬ÑóH·½Ù³w?!!!$&&ÊÞ}èÞ³F¹â7;õiØä˜ …%Jââ‰|NPH åÊU Nz$$%JXxoÞDkìE0‰ $''‘ORR H$&j·Ô½ˆ&êkã s“’’ˆzó†°ˆp‚CC0—YÒ¨a*W¬‚B¡@"1!**sw¡@è93þO_~[º‚àà`† ™Ó'ð¹w‹ÿ®^`ÖÌéÄÆÆ²xño9Îcûöm155å¼ç"""Ô÷ÃÃÃñ¼pSSSÚ·kc”<6hPO5ëwëŽzöèì9O .̹sž$¥h¥©î Œ¬@têØžÅ‹óðá#¢víš,ým1¦¦¦Zý:99rèà^îܺΌéSÔõŸöþ´)“Tré ¦\:–Î|)'ù¨Q݉ƒûws÷öuØCêNDFF²lùJ­«g«W-Ãë¿Ë\¹tž¾àï»ru•!³±„1dæ²å«xý:J]wn]çàþÝÔ¨îdôgZºlaaáZË=,,œ¥ËVdËovêÓLMRˆädâ‰Oˆ'.^AXÄ+ÞļÆÕåsj:»þŠàÐ""_«üQ‘05Q)ªýñ)« ˜š˜¨Ý$ R3)’”kS#ôs¥R‰\® 22Š—A/yMƒ©îèL||ÉÊdõ¤ÆË`Ýî¦&BÈuΦز®ß°‰¦ÍZSÕÁ—º ™5{ :$§ØØØÐÈ­!IIIM33|ôßã$%%Ѹ‘666FÉcýÏ?G"‘pûömnÞ¼Mdd$ßAäë×ܸy+åE~‰DBýÏëµ<¥R©zbó–m){¶ªW¤Rí[aâââX¹j-½û ió64kÑ–o¿SÍÚ‡¨ý•/÷?N‹BÇâÅ¿³xÉï(qLúqŸ}ö©³ u'Õ5xIo^ oÞt1eÊ4jÔB… acS„aC«f|Þž  ?/Z@Ë–Í)bmíö–j2´øç…´nÕ,--©WÏ•ukVæY?~_úXvä®zÒkkk꺺””Ä©SoWHN>«:]§®+Öiâ®\¹Û·mbÌèQ”,YB¥>}ÆŠ•kè?`07nÜRû­USµ!ÕL)UQ¨S§–†{êjÌ;w5îëÙ¨5ò—™6c&w½ïQî³ÏøiÑüL'¦M™D#·†XYÎпΞ=O©R%µšóšNNžgÔ÷c¸qã&í*°níª û[Ò2wÎLªU­‚LfI¯žÝÕ÷gÏš¡¾ß¿_$‰Ú„-õyŸp§L™O´p ÍÇüy³qp¨†¥¥%ÕªUeÞÜY€ÊÄ5=‹ΣUËXY¦hQ[Æþ ÚóìÙów6^0†Ì<ïyA£,d2Kª©Ë˜¤O+}¹§556ÄovêÓÌÍ-P($+“‰Oˆ'!1SS3Õ`]"!:æ ²–´iÝžŠ•ìñ{ò˜ Pär…ÑÊÎÜÜB­@$$ªL(07·P»™˜˜ •ªŽ™Mu3ÆÄ@phOž?ÁÑ©&ÜšJ±°°ÄÔÄ…\Á³€gºÝ £äåƒW ÒÎffgf3,<„„†Ò¤q#£¤“Ýç™8i*çÎyR¢D 6m\—¥rYµŠ}ùS@ýÛ¡ZÕ4&s”J¥†Œ»}ûAAÁ´Ör¬uvòQ¡Bùt×tö W—:×… TâÞÕXÂ23<<"Ó²0&Y¥•6߆øÍN}‚…¥ ¹‚ääd åA*•"53G*•"ABrr2*T¤kçžø?}BLl¬ÑV!,,SˆDLMÍRö9$`ai¡v311ÅÌLŠ©‰©Ú-§};&6–téÜ+«ÂÄÊc033ÃÂÂK KµÒÒ¥“nw…\‘ã¼ä7òå‡äŠ-JHHî'ŽP¡|ù\K§u«Èd2¼nÜ$ %Jnܸ…L&£UËæFÍcƒŸóÀ×—»ÞÞœ>s– ë#•JqskÈ©ÓgiÚ´ IIIÔ7²ù’Æ*Dÿ~üöûrõ`nÀ€~™ž|öœêè×iS'Ѹ‘  ::š¶í»dð»uÛŸ¼|D]W@u,ëÖmÛùêËYæ­~ýÏyòô«×®g¥Óo³eéÏhÏNÞ´Ïdhžab’;gY‡……³hÑ/thßÖà|e§½+VŒàà`îÞõ¦n]×wڗ߇>–ycŒÓF7jˆ¥¥%wïzŒ%w½ïaiiI#·†™¦Ý½[ºwëB`àKz÷Àó/ÔîŸ}ö)¶66<öBdd$>>>*XP=`u¨Vsss¼ïÝ'*ê ~~±¶²ÊôÙMLL°µµ¥Cû¶”-[†QßýÀÙ³ç™ôãx+˜™±lù*Ü=NR°`–ü²H½Y<+¦3©æKM%ì0oþ":B¡B…Ø´q­ú`€ìÑ:ef{ÂÄ)œp÷ 22’¸¸8¼¼n2ê;Í£ ªfïÞõÎ0KdŒÓGÞ‡>–Wò&=–––¸¹5@©Tâqò§P*•4rk˜Áää˯†²ióVnÞ¼Edd$III¼ŽŠâÌY•™Æ§eËjø¯YÓ¥Rɾý‡P(â¨YÓY=Ø“J¥8:VC¡P°oÿA’““©á\]ïB9רNÅŠvÈårnÞºeðsÿ±õOþÙ½©ÔŒ… æ¼÷)£qŽbÅŠâäè«éèbåª5ü±õO¤R)kV-×XYÈ Ž?A‰%2̼g7Ó¦ÏäÞ½û( îß÷aúŒY4jÔð½ÜÒ¯SöiÓgrÿ¾O†²0&n 3O+ÕÝP¿¹]Ÿ–––êÀé•s©9–2"##ùsû>ô¡uóV”+÷™Ñ”‡Ô<$ħÙ(mbJB|–––j7SSSõ»,Õ-§$&ÆcWÁŽVÍ[qçÖMvìú›˜˜X ? …‚Ö-Ò¸Ggt7F^òùrâ‡1ßãyá·nß¡GϾ¹šV§N9tø(‡A‰2å^£ç±^]LMMùë﹑›êÌâ¿wìÂÔÔT=ƒŸH¥RöíÙ©ÿ ic7>ʤ)Óuú‰‰‰eÖœù$%%ñÍð¯Õ3|ß ÿš¥ËV2kÎ|¶lZOÁ‚2iþiá<&OýÏž=gþ‚ŸŒ’·¼F×`»^=W~ûõõ7 r»OŒóW®^Ã×÷!ߎÊü¤™Šv¸}ç®ÆËÔØg¯ç÷>–—ò&=­[¶ÀÃãîî'IÕß´™/ù=öÇï±?›6kgÐÀ/4®kÕ¬Á©Ógسw?ðvÿÃ[÷šÜ¸q‹Ý{T¡«é\à|7¨ÿ9~~¹téJ³–¬X¿asÊla"£ÇŒ×éOŸï2<|øˆÀÀ—tïÖ%ƒdÌt2#Õ|,!!ƒëôgŒ~uÿ¾ÏŸ¿`@ÿ~ž7»ù¸}ç.»öÔ¸gmmÅ÷ßû^n é×£¿ÿ–“§NsûÎ]:ué‘+ïÔr3fgΞӚ– cÆŒJ#Ëõ÷›Ûõ)‘HR‰Zy0—šS@V…BÁÎcanN‹f-JÍP(b~SªÉ’‰D‚Ổ‰D½q:µí+•Ê· D·œ§ÀÄÄWÞ¼yÃî=;(V´íÚv@&“©÷8¸ÖqáMôvïÍèž—_íÎ òå D±bEÙ¿oÇ}ME» êoØU¨@¿¾½Ù½ë/£¥Õ¸QCŠ)Â__|}R¤H‘LͲ›Ç‚ R£Fu ÕªVQ{¡X±¢8::‡³suõŒp~`ô÷ßÒµK'llŠ •J©\¹3ÿ7UÃÏ’_çåË ª;9Ò½[WõýÝ»QÝÉ‘—/ƒXòëïY¦U½ºnÝÄ—ƒP¹r%d2&&&X[Yáäè@ÿþ}Ù´q­AyËkR« U«ØÓ­k6nXß[7gú­ c÷‰"ÖÖìùgãÆŽNÙ(ÃÜܜڵk²fÕrx'Mœ@¹rŸåª`Ëï},/åMzêÖuÁÚÊ ¿Çþ<ö÷ÇÚÊJë$Âô©“hÛ¶5åË—Ãʪ0&&&XYÆÕ¥?/šOËtæ`©û "##·ûÞ**÷ˆˆÈì))f`/]~§}.Õ|©ÙGòõiµùR[ã}+hùÒ_©S»EŠA&³¤IãFìüûOÊ–)ó^—•!ýºlÙ²ìÚ±¦M#“É(R¤uj×bùÒ_ž¯²eʰoïNºuíBñâÅ055¥xñbtíÚ™}{wj”»!~s»>%Õ,º‰‰ R3s ,ŒTjÁ¿Ç޲cçv\j»ÐØ­Je yl.ãŠz£´UakL%¦)JÂ[·´¤º‹äädä±1XZXÐ¥CgJ–(ί¿ÿŒç…s) Èå1XZ˜ëtÿJ¥R‰¿¿?vvvf'*VvÀïá=ùsg<2| ‹šÃ„IÿËÓ¯.lÔ«ß33©è ZÚŸR©å"úf†þ²ô×E¹þì&òu÷ÿ“«öøù¥ÿ·i׉ˆˆH.]8£óXV}I)Ï­¯=§ö÷ýkÒ¹]Nù%ŸYõ¬¬m˜=o6¿ÿº¹BÁõë׸pÑ“M›S¡Byr9‰‰ Ùn'ú¼G [áŸ=»‰Ž‰Vß+T¨½{¨V\víÙMt´¦[¯î=y™+ï1s KLM͸xé"Ož>aЀAieåþ¾õ“JöŽ(•J.^ºHà g¤¯­t~($Cíºßw("nÛüQ=ïñ‰J¼$ &&&ø<¸Ï¾ý{©çZ¡ƒ¿&>^Aô›¨<ÉCœBNïž½4VÌ•J%q Õ{÷Èè¦ÇæZ~âãT{BÔ¯[ÆÒÊÊý}Çh Äû4È @ ~(•JÊ—/Ïý{|ýÕ”Êdb¢£rÅTIç€=>ŽøxݧÅÅ)ÞA¹¨Ìš²ë.@ ï b"íÃ*§ÜΧ\Cÿ¾ýINVíqHNNã#G(@ $ÄÇ“/ B ÆD@ @  „@ @  „@ @  „@ @ xÐkõ¹3¢¤ÑD¹D;Dûé ²V $Ú··?PÄé¹è ¢\DßüxŸ]´sã"}Aš2”J¥ìììÄÙÐ@ @M%{G”J%/]¤aƒ†b„@ @ С@@ ¡@@ ã“å&j±+] @ ø8Ä@ @ @ @ @ @ @ @ð>`ö1>´8šöÝÒ¸iKQ¢]‹ö'Ú†¨oQŸ\}Šºåÿ±ÔŸÙÇZPC†­å T*Å©^¢]‹ö'Ú†¨oQŸl}Šºåÿ1ÔŸÙÇ^`‚¼C(¢]‹ö'Ú†¨oQŸC}ŠºåŸ×H$’l=·D"ÉVzµ!@ eÎ0Ä&j@ @ @ àc&<<œ!C¿!<<\(@ @7r¹‚aߌâÜ9O†}3 ¹\‘· D%{ÇLÿô ß¡c7<”J%:vÓgVéè›üʽ{÷˜={6ŽŽŽH$’lmh‰eêÔ©”/_ Ê—/ÏÔ©S‘Ëåyæ×ä´­ä5/_1áO´mß™êÎu¨îìB‹VíõÝ8”£2È z÷î­ncú¶³›7o2zôhìíí±°° téÒ´jÕ ŒÇå¥[Û_výæí;v¥’½#§NÑéçÔ©3ê6šŠç…‹ôøõê7ÂÁ© ܚѷß@æÎ[¨öÓ¤Y+*Ù;ò葟F|wîzkÈÓÐP wŸ¾T²w¤I³V™Êä5]éÔ¥kÖn 111_Ê€C‡Ѽys¬­­‘Éd4mÚ”C‡Ô6ŒÙ>²z¿å9£O._¾Ìˆ#¨R¥ –––˜››S¢D 5jÄâÅ‹Q(Fm†È…¸¸8.\ˆ‹‹ VVV˜ššbeeE:uX°`qqqï¬>óª~ñ.Õ·nrÒw²óŽÈïýÌX}#¯ÇC9%))‰ÆMàÖ­Ûܺu›ÆM ))É(ñçé&ê¾¾œp?I›ÖÏš=~ƒ¾¾¥†è蘳N£T*éÚµ+îîîê{OŸ>eáÂ…ü÷ß?~\-rËïÇØV<=/òÝè±DGGkÜúôOŸ>ãø ºté”oÚÙ¡C‡øçŸ(T¨P†Øº1Ö»4§ý5·ÞCßx—ã¡ì2gîNž<­qïäÉÓÌ™»€Ù³fä8~ƒL˜ùzký3„+VexQ(•JV¬XõÑ ~fΜÉÝ»w³~ÇŽ¸»»S¾|yΟ?Ï›7oðôô¤|ùò¸»»kîÜò›äç¶Ȩï ::šÖ­Z²wÏN¼ïxá}Ç‹cG2kætœkTÏVÜÙéWYñæÍ¾ýö[æÏŸoPXWWWV­Z…¯¯/qqq<~ü˜®]»f—R©Ôú—S¿¹M§ŽH$œj»,“§¸߇R¥JÒ»wO£¤Ÿ~¹fႹH$ÌÍÍY¹béW‰©B»xñâ÷‹+–2šë~MNÚÊžþV×ý½»7Øñ÷¶”ÙÂ}Èd–¬Xö2™Œß—.çE@/^¼`é²(P€ËÃÒÒ2Óüª„W•*ö=WVyËŒR¥J²zÕ2¼þ»Ì•Kç8à þÞ±Kg˜øøx† Frr2?þø£Þ³™ÅàÁƒèСƒV?ªStt47oÞdÞ¼yÔ¨QC늅!~ó‚öíÛbjjÊyÏ DDD¨ï‡‡‡ãyá"¦¦¦´O³GaÞÜY/^ŒçÏ_°vÝFB›vظiK† ÑõÒ™1ݼy —:µ)P µjÖ$)) ¯³¦ÿ®«ü¹h1_J+«9Ö¤I³VlÚü666L<1ßÉž/^°`ÁîÞ½‹\.',,Œ½{÷R¯^=®^½ª3ÄÄD–.UÉîT3¦Ü@.W0tøH>|DíÚ5YúÛbû-N¸{°fÕrþ»vQà 淥+fØÐ!œ9}Ÿ{·øïêfÍœNll,‹ÿf4™ /ÞÞÞ¹>ÀÉL.ØØØèœ¥OHHÀ:Å|ï]Ögzœœ9tp/wn]WïcŠŒŒÔ¸?mÊ$HÅ¡X±bJéÒ¥Õ÷S5â´snùÍ ²ÓV.ú…íi_ŽLoSÜ©S~[ºBmŽôé§e5f–3£L™Oðó{Œ×›4lP_¯0†äM®.š³Ð… TÏàébÁ‚¬[·Î —§6¼¼¼èر#/_¾¤Zµj?~œ’%5÷¢\»vMãÚ‚V­Z±gÏ*UªÄ©S§²å7¯éÔ©gΞãà¡#ôï߀ƒ‡4O_J‹µµ_@ß>½øg÷^®\½Æ¹sž¼yó†ÙsçsôðþÁ%EðJQ Tûê×W)õê¹j¸§îÐuÓ#_o’’’àì¹ó,Zô ‘‘‘¬\µ–_~^¯dOÑ¢E bõêÕ”*U €Ê•+³zõjöïߟé Ä’%K7n\®œt¢T*™8i*çÎyR¢D 6m\—A1HO­ZÎZï‡ea~c4™¶¶¶´lÙ’Š+bgg—íòÆ .¨dìúõëÕí¤J•*¬_¿žO>ùOOÏw^Ÿé©šfu¹@êßÕªjLt)•Ê,MÎëw©!²Õ˜ïcÖKx¸jõ·B…ò÷S÷Ó„åÀÌ5;}ã]‡ôÅïá½+ù¤Tû÷G²<¹0§2Á¾—è+²:'_ßsøs³>Ó£k•;;–ïú]š™l5Ö;ÂØõbk«Zåõ÷¢qßßß_Ã=¯úF~©ÃüÄ;ùuŸÞ=Õ3%K–¤·«†pÂ݃Æýˆ¹¹9Ö­¡AýÏ?ˆÊÒÕ‘¿øBe ?~üx<==‰ŽŽÆÓÓS½,œêž›~óK[IHPͱ¶ÆÂ‚§OŸi=QéæÍ[,_±Š 0îlæÏL&cùŠUj»ôÌ2äKŠX[s÷®7]ºöbï¾¾$11‘„„^¾ ÊvÞò[ûZ¶l]»v%&&†Aƒqüøq&2µk×fÉ’%ܸqƒ˜˜bcc¹téýú©fñ›4i’-¿yL&£e‹f(•J>ÊáÃGQ*•´jÙ™L¦á·CÇn,[¾Š«W¯NRR‘‘‘;~ Ãæçºu]Q*•lÿk'r¹‚ºu]Ô/2sssjÖ¬\.篿v””„«K½_à®.u¨ZÅžØØX®\½–¯dOÿþý9r$="..ŽG1r¤ê䕦M›jM;õ”“ï¿ÿ>ƒm V®ZÃ[ÿD*•²fÕr™çìj&;aÂdnݾC\\±±±Ü»wŸÍ›·Òµ{ï\‘ Ÿþ9kÖ¬ÁÇÇ…BAtt4/^¤oß¾€ææOc ‘ NNN 6Œ‡¯¯/Æ ÓpÏõi é'ƨ›ü([ ­·”ÍÉÓ¦Ïäþ}U›¾߇é3fi¸çUßÈã¡|7&U)£Jüýý±³³Ó:sšj"”]&CÂkó›UøôîUœ3]RÜ´n)C†É7¶kY ‹Ô|ê²»W*•´nÝZë@[µj•áãp¹áWüÞ£be‡L—ØrÚV¦N›É®vë óÈ×›èèh:vîÁ‹/øßŒ© ¨Øü±õOæÎ[HÙ²e9|p… Ê4ýë^71ò{¶ºÒÔ7oÚž+³2IëvÞíZ[[ÒÕ¾ômŸYù-Z´(žžžT­ZÕ`¿Æ@Ÿö—–S§Ï2ü›o©bo%¾¾Y¿n•zõ)}èâ·_Q3`ûö¿™9{¶¶¶„‡‡3}Úd¾úòíG·–-_Ųå+)ZÔ–°°p¦M™ÄàÁƒôî'‹—üΚµëüÕ ¦MUmòÔÕ6òRö$''Ó¶m[1¥bmmÍ¥K—¨V­šÆý{÷îáääDxþü¹ÆÞcÕ·¾èÓAu²VÏÞ_¨7ç†LÐVŸ™Õ¥µµ5gÏžÅÙÙ9ÓúÌN›ÐG.8p€nݺéLoÿþýtîÜ9_Ô§®úÕ÷¾¶º1¤ŸävÝè+[3ËGNÞíúÖË‹€ºuï£õýjccþ½;)[¦L·ÜêÆåÖX2mûœ9k®VÉþ_ôÕ8õª’½#J¥R¯¾¥T*¹xé" 4|7+¹MVöˆœ(‘pàÀ&OžL¹råø?{÷Eµ6pü—NBBRB¯¦Ðº 6Q¤èEQPE½ò^±¸(š €ŠWD¥ˆ \õÒ ”JÐÐB/ HLBBÚyÿ8ÙÝlv7ÙM#‰Ïw?óÙìÌ™3g§lÎ3s挛›þþþLš4‰µk×Z\Ž,´åÅ›o¼ÊÈè]»îîî´iÓšÙ³Ìo Ÿ2sçÎÄc¹íÛþñØHBB‚8wîáS¦º¬Ž!ÁüúóŒîYÚ´i——...Ô¨Qƒàà žyú)~X»Ê¡²Ut;wîäé§Ÿ¦U«VÆçb´hÑ‚^xƒšýÓr$í­Ð«g5jÔà¸8cS¢ž=,ÏzÍø`:~€æÍ›Q£zu½T¯N°P>ûtY𦥠Ý)î00½zõ`ѧó-‚‡âp•Õ+„B!DåS«V-¾øüÓÏW®@!„B!$€B!„B”ÃÿÖo,R!„BˆJ@ÈÂòáxÜ”Rܸqƒ3gϱ}ûùQQ{xü‰1|¿ê[<=«”Û²üõW2±±Gyÿƒ™:|„™³?dé×_VÊíUу›óç/0þ…—HMMåÎýyöÙ±´jÙ€³gϱkwkÖüW~W„Bˆ æ–¶]iÞ²±b´úûµ<8ä:v2k¾‘Hø”iôî;€ÖméܵÏOx™'NZäwâÄIÆŒG‡ÀNtìȰáñë¯ëÍ–“¹•ÉÑ2æÝºm;cÆŽ£SçPÚuaà݃ørÉ×ää䘥OKKgá'ŸñÀƒC¹=¨3mÛ3løcüöÛfzx8Í[¶ã»ïV[”ó§u?Ó¼e;yÄîõíääDÕªUiÓºO}Š_Öý—æÍ›qìØq–|õµÕü›·lGÛöÁÜuÏý|úÙÈÎζ¨Ôæýîù×=ù8¢Z5ºuëÂGófpðà¡Ó_¸p‘W'½Ah¾´nHhXþõêëœ?ÁjÝÖwIJú‹·ßywÞK»!´iÄ€;ï%|êÛÄR†ÒVRß±¤·×‹—ššÊ€þw°`þ\nïÐ<<é_<9æÖýü+Ï>3Ö8mñ—¦€"##ƒãÇO0cæl233y~ü³v/£¤ò)Šóç/0äáa\½zÍ´=ø~ÍÙºm;߯ú–† ؕ׋/¿ÂŽ‘fãNÅÇs*>ž¥K—ß²3â%ùKz{mßÀ³ÏŒqh¾â”ÁžcO!„ÅSêW òžé´uÖsý†|²à#öî‰äxÜcelÎܹ|ù2cÇ<É–Íëù=6†½QL “7n0sæcó>Z@RÒ_ÜÞ¡=?¬]Å¡˜}ü°v·whoý‹Ûyã°#e0¨Wï6.˜Çþ½»Ø½s;ÿxl$ËW¬4¦™;÷cââŽÑ A}ÌŸËžÝ;8|pK¿þ’~ýúpï=wáë[‡˜ƒ‡8úûÆy/_¾LDÄNªV­Ê ûî)ÖöéÔ)€øøÓæÊwËÛ"öp4+–¸¬1¦É[i6¤Í_‘¶'G$''³kWÏOø'·ßÞÁfÚ¹ó>æêÕkÆ}âðÁ}üøßÕÜÞ¡=W¯^cî¼íþ.QQ{õ6\º„?ŽäPÌ>~üá{ÞxíUÚµk{Ëà’üŽ%½½Î_ÐW@Zå ° Sœ2Øsì !„¢xÊňޛN×®-Æoݲ €EŸÁ¢Ï¿°˜¾gï>ãßÛwè³ï¼=ÕØ3OÛ¶mx{Úîüp‘ËæH Þ{÷mz„…?¿üÒ¾þfgΜÍ4ýÀÌÞ¥KÓwïÚµ³q]¸ºº2bø0æ}4Ÿ+V2uÊ[¬Yû#999Ü?è^¼¼¼Šµî•RãÒÓÓùpîÇüoý.^¼DVV–qÚ… íλ¤ò±ÕÜÌÍ;ü¢Íù¬ímÚ´6îù¯(¤YÓŽþþOG‹æÍ¨[·.·sß½w1zô¨"}‡’¸jQ’ß±¤¶—á*Ÿµ},ÿú0¬‹â–ÁžcO!„e@lÛ²Ñìóè±8q,Öfz{*IÁÁVÇ_½v­ÀùRSS_»ö'MÌÒØ]q¾yóf±Ê`йSG³ÏÞÞUÈÌÌ4ŽKLL }û‚»ë9b ?ùŒÿþð“^ˆ§§'kÖ¿ù’ÁîÜ3ëMšøǽûÞ –.[a5½#máK*Ÿ¼œ©Y³;udܳOxö¿°}¢°mkö]¦OcÒkoòûqÆ{6lü9ÎcÆïrÿ {oÉ\¢ß±„·WÆ 8qâ$û£Ú½LÊ`ϱg¶hËâEóä?Bˆ¿­Âêò%@dàè­qww·:¾víÚ\¹r… ë×ФIyÔªU“„„DNŠ7{6À©S§,¿´«+YYYܸqÃì þÞ}û‹U‹Jo~uêÔáòåË>|Äì „eºÚÜ{ïݬ]û?ýô3-Z4çÄÉSthߎ¶mÛk½_½z÷Þ›èæRë7è ñƒ÷§sç€;ðöö毿’ éÔÍ¡üK*Ÿ¢ž©/lŸ¨U«¦ÝyµoߎŸ~\Õ+W8}ú WˆŠÚËÒe+˜óá¼BˆÒºG¢$¿cIm/ƒ¾}zsâÄIfÌœCÈÒ <==-Ö‡µæŒÅ)ƒ=Ç^^'ŽÅšýž !„'E=‰Vä&L%8¦_ßÞ¬øö;&NœÄäÉoкUK²³³‰?ÍîÝ{øï?±ö{ݶ¹g0¾_ó_Þx3œwÞžJ@@NŠçÍ·¦Xäëïט'O1wÞ|ž}f ®®®ìÙ³ð©ÓŠUGÜ9à¾þfÿõo¾1‰.;áééÉ‘#GùÏ‹™ÿñ\cÚÇG=ÆÚµ?°|ÅJã÷#¿ú ”"--ӧϰuÛ¾X¼„k׮ѢEseºÁ43S7©Q½:œ>}†÷ÞŸi5ϪU«’ššÊáÃGh×®­ÙÍéŽäSz„…±f­í}¢GX˜Ýßeè°GyhÈ`:wîÄí·wÀÉÉ ///–.[Á•+ ·ìÀ/ÉïXÒÛëÉ'gÕªï9|ø ʳώ¥[×.Ô­ë‹RŠÄÄ«óÜŠ}¦,~Ë„BˆÊ¤\?Hî¥_`GÄNb⡇‡˜v ÏñÛ¦ÍÀqÇðööfÐ}Ž5™±uA×®™3{†Ù3 îП•ß­âégÇšo³¦>ê1ÞxíUš5kJ•*U¨Wï6zõêÁç‹« ލQ½:«¿[Á?_ž@Û¶mðôôÄÝÝ >Yð‘•2? èû4ît¯Ys{899áææFÍš5iݪ%~€ÿ|þ ß|µØâ)Ôo¾ñ*#G £víZ¸»»Ó¦MkfÏúÀj¾¯þk"þþ~V»Åu$ŸÒШaCÖ|ÿ-~_ß:¸¸¸àë[‡ÁƒïgÍ÷ßÒ¨aC»¿Ëª•ËöÈÃøù5ÆÕÕÕ¸Œyjt™~§ÒüŽ¥±½:†óëÏ?0þ¹giÓ¦5^^^¸¸¸P£F ‚ƒƒxæé§øaíªr³Ï!„ÂŽz% ”Rœ:uЦM›ÚV{Û–EºÙâVªˆOñÍïôé3ô¿ó”RüüÓZZæ>ÑW!„Bˆ¢°·^ß¼e;”RDîŒ$,4¬|7aðÖä©f}Øß5p€B!„â–‘¢‚ðññ¡w¯žLû÷dYB!„BˆÒT‘›.Mûw8Óþ.{ªB!„(œe!„B!$€B!„B”¸b7a²õ|!„B!DùSÜæýrB!„B!„B!„B!„B!„B!„B þ攕W2ÉDÍ$&á†[¹+sc3›Ùᩤ’B Ç8ÆjVók=”õz/Êò˺¬%ò}•''ëiœœôtCÚ[º5†Ù³áÈHM…”8v V¯†Ç+Þ:( ®®ðâ‹pè.ob¢.kß¾E+£­ÁÚr¯^…ØXÛóß¼ .À/¿À°aE/Gr2DGäIàæVºûi…ü-wpÛ‰¿Ë?y9¨ËôÈ¿<9o)yuóÆ› ÜW#ñ<Ï—›²ÝÉ|ÇwT£šÙøæ¹¯! ᾑXNuè>ßo9mÈ=ý–ïcwÂwßA5ó]ŒæÍõ0d|SÎv±?„ñãMŸ½¼t9‡ ±°•„¾}¡V-˜?ßvww¨__wÝ~~0cF~—¼!(HÁóEüY2ü//Íõ"D…%µ¨Dä DpÊ}yàAÌb#YnÊè?«XE5ª±†5t¡ ž¹¯v´ãyž'Ѝb}ÿŠ´­*ªÉ“-çœôø[¾ùêU:xX³ºtOO=´k§ÿ¿EEq»9•Þÿ·Ç×ï÷ÜúÿúÈ‘°m[ñÊšÈôûêÕ¶ç÷ð€–-aÑ"=í…/‡‡À,ý³ÄÈRúY*ÍmTf¿vn;ñwû'/µB”¢ 2ˆ'žiL  U,Ò g¸±M:éá¯ò*.¸Óœä$ E Æq#B1‚Æq¢Pœäd¡eû'ÿÄÖ²–! a{HÏ}ÅË|æÓ•®E*¯­&Ews7ëXÇU®’F±Äò"/âlçnÙŠVüÄO¤B*©ì`ó°Íôó0;ØalšµŽu´¦µùÉ– Ø„ÉàÜ9 „0?x0Ü~»žnËðᦫÁééºyÑ«¯‚Kîf\¼XOÛ·Ï4ôßûöéi‹²ý||`íZ}ö~Ͻ¬ôt}Eþ|èÚÕñ²N’Y»²}÷ݰnn5–¦—óâ‹àìÀ/Ÿ··~ÏΆŒ ¸t –/‡Þ½Kñ‡ÙYo·ãÇ!&¦€ß” ÝüëÕWõçÛn+ÂïRÄÇÃ4ý³D•*Eßù×a­ üüô~sþ¼.Ç… ðå—:Ø,Œa¿:ÔrÚСzÚþýúsÍšúJÒèýàæMý÷üù:- y¿ßOèý;%Åü;׫ èõ‘ úŠ\›6–ùµi£÷Ý”ÝtnÇxøaÇZqX›fo=†¼¼àõ×õvINÖûÉŽpÿýzúîÝ:¿§ž²½íÝ[™k[rPÛ­U+øé'Ëßæ?÷‡uC›Øuë uk©t–¥”R'OžT€:w¤Àá‹Ïæ*¥”ñ3àð°’•J¡Œƒ=ó¤æ1OŧnrS]ä¢ÚÀÕŸþ6çÄ µ‰M*‰$•FšÚÂ5ˆAfiºÑM}Â'êþP餫 2Ô®¨ílW™¨ªP¥HßQZæßÏw忚Å,¥P*‚‹yv±Ël݆·x˘f‹”B©±Œ5Žû†o”B©¥,5ŽËX¥Pê3>+´¬¿ó»R(Õ•®}G{Ê›=XKŸwx‘ ]®?þ*‘Äó±gy‰$*üm–µ" †B¯ß££QNNzš““þ¬ê¹çLi-¶ã.ë+è­·ôt//ÔáÃzÜ+¯˜æ›8Q;tåéYÈ>ö»NÛµ«c߯°²å]ù?Û^|Ѿe׬išçúuTŸ>ÅßNö¤íÕK§}bçwsC5k†Z¸PO;xÐñr¸»£üýQ³féñÅÛù[Ëõ÷G]¾l}žË—õô‚¾Ç³Ïê´¿üb9í×_MÇ þ÷¿‚÷‡’Øv†4sæXÏ¿AÔ¹sÖ—ŸœŒºývS^¨k×ì+³R¨œûÊíH9†jÕÒ¿•õÑGõß»wÛÞ^cÇR¡~{ßО´½zé´ï½WðünnŠfÍ êi:^ww…¿¿bÖ,=>²®Á®]Ö·Ö[oYæ›°µ\ÅåËÖç¹|YO/ì»øû+ Þû +ŸR:{–—wðòRLŸ®ˆWܼ©ß§OWxz–N¥•ÖÎÁV½ÞÖ`ˆ""ûSÙƒ¤J%“ìPe­ =åüÃ"ý$&Z±´§2û=ß;€°6$ ºÑ­Àù=ðP=è¡Jà„qüp†+…R‹X¤åŒ³J$Q]纺ÊUå‚‹Y 1Œa…–54¥PÊ“¢ïŒ¶Êk«B–³j0ƒU j¨ºÔUñ‘R(Kl¡ËZÌb¥P*Š(L°òÂK¬¢ˆ²¹þjÕ2ÏãóÏõô>ÐÇ›ªvmSà¿níuãå¥ß ë&ÿ¾ž•eß:w¤ ŽC†q§O£|U§ŽÞž}ú ~øÁì^¼¨ÓšæmØPo¯¿þBy{WТ°Š.(æÎÕã:w¶þ7ýû¯ Šn×5ððPôè¡ÓŸ8a”Ú—_êÏQQŠà`]¹ ÒŸ•ÒmòŽ; IDATÓ û.‹›çáå¥ß yX l-oñbû·¥““býzëëpýz=½$ó(­´•5€ðÁGå¬R(5 UÖ¢ˆRã§ZÐB¹ã®PkX£JýÎïfiCQÙd«$’ÔS<¥nã6剧ºƒ;ÔÏül‘ïxÆ«ö´Wžx*7ÜT#©—xI)”ºÁR IT-ha–ÞO5ƒê'Tfé3É4¦«K]•CŽŠ!F*”P¥Pê^Q ¥zÐC*†•CŽòŷвÞà†R(U•ª…~GËk«B?€æ6j(…R7¹Yhy/rQ)” "Èl|0Á6—g+í.TŠL}ûôÕ‡ýûMWlUð<=Q3fèÊ`F†ùÆÎÌ4OûØczü¯¿šÎŽa_9oÜÐé«V-¼‚æhÙlXJ¡nÞ,¼¼ è´+VèJç;ï˜òýøc”««þ{çÎ’ œœt¥->Þ±ù•B=õTñÊ‘˜ˆjÑ¢èû‡#„¡2dž.8X¿p¡ðïb¨¿ù¦iÜ[oéqË–™Æ8`:˾{7jÍÔ¤I:.©mgøÛÖUª  Î㯿ì_7E )ƒ#ÇáªFïÞ¯ÇðpnÁ‚<'û&éqŸ|RÁ‚G''ÅÙ³ú¬±#ó+¥xê©â•#1QѼ®§§bÆ ,dd˜§ÏÌ,zqñ¢þdþ¿–à`=þ…¿KayX г<Ã0b„žçÔ)Ly{+ÂÂôg¥Ç—l¥•¶²ó±R(µ›ÝÊçbWÖêPG)”Ê ÃüŸ Ÿ+…RcS¤³è~ø©òOcYK¢ “ .ªõÔhF««\U ¥–°Ä¼Â»šäê UYÊ /õ6o««\U«\Uïò®òÂKe‘e 2 b‰U eµI˜­rØ[^[Ÿó7sdŸÈ"Ëê/¼l.ÏVÚ‚‚Š@xx˜þ™ö™é ¢‡‡í ž¡¢lÏ™qggÔÉ“¦i'Nèʵ]ûX¬žÇÚYr[Ë´·l¶>W©bY~{›­\º¤Ó5h`7b„éJÊo¿é÷)SJ¶ S×®:ÝìÙ…Ïïâ‚òó3]±°çÊJÞ|\\Põê¡FF]½ªÇ/YRôýÑ"3Óú)//ëÁ‰µ¡KÓ~èä¤ÃþyǦt;¢bb,Ëž™‰9²d›0޵üƒáûÚ³.³² ^7ù÷õìlËåU©b{;rLÙs ò-ì Âm·éÀ#)Ét"áèQ=opp K×µ«N7{váó»¸(üüLW,bc+‡‹‹¢^=ÅèÑŠ«Wõø%æu ,°ÿʉ#Df¦þœ¿Y——õàÄÚ•UpÖˆâ,Ï0üø£žgÈóñ=¤ÇÿðCÉæQZi+cÑî*›l•I¦ê@‡©¬µ¦µR(u‘‹fããˆS ¥ÞáuˆCê7T"‰j5«Ë¶çjÁ!©JìÃГžÆf\î¸[œUœÇU5ª™•ÏŸÏæ(…R=é©¢‰Vßò­Ôr–«C26%šÍl»Ê:ƒJ¡Ô^öZ½ aíûØ[ÞÂ>Û³Îä „ý•›çŸ7ß‘ íÀmU„ g;U­šùYÆüi gwÿ÷?S»ò¼íà ÜÇfèô{÷Z¿ QÐYêÂÊVØç¢Tä Í^š53ß¹³©}zr2ª~ý’ >ø@§ µ~G®¬ØÊ§gOÓwrw/ÚþQ’W .^´o½ƒ~ýtРêÔ)Ó}@y‡ t3¦aÃLQþfXÅ lM?^OoÙ²ðå9rÂpU(å½Ë´Ž”Á‘miï@}õ•éjY·núï={*`ðàHñÁ:]h¨ýóר¡§Ý¼Yôrôì©Ç''ëû"òŸåüqEµjæË+NQØÕƒ‹Ëïˆóçõ<õ꙯WO?{¶dó(­´•-€pÇ]æ°R(5é%RY«F5µ“J¡Ôç|nµ9޵á7TºØ@䣆0¤ÄCó¢üÍx 7brÇ]5§¹±™Vþ|îã>¥PƲŸà ¨QŒR ¥>äC¥Pê^¬õ©o¼2ò;¿«Çy\ùá§ÜpSÆ4¶(‡½å-âK¾4Þ×DÅ} Ç{ ò¶Q7üC?wÎüŒ¨µJAb¢7h®86o®›xäOÛ­›>Ó˜œ¬opõ÷×mÐ33 o7º¢m8ËýûïºBêç§ÛF»»ë¶ëù—ioÙJ#€Ø´I§Û¸QŸ¥wvÖÁʦõõ%bnS9ä¨4ÒT&™Ê»ËF˜J ¡ÐF™Ž–·4ˆÔ5®»¦k\SMhR©GÓ.ZTx“†jÕLMC^xÁ4ï„ zÜÉ“¦³ÓîcaúF]{›QØS¶Ò :t0<†væÖʰd‰õ³ÝEYnPé GÛáçﵩ(å˜>ÝÔ“£ÛÌ+¸…m“&Mlï zº=ûtõêúfþ´4=dgë ÊÞu÷ãe@Üv›yó¿‚Ö¥#½0ýóŸöOŽ”Á‘cÈž^˜òt†à-os¦J@é4ìø=ù{m*J9¦O×Óæ˜ê,Zd¦¼÷ÂzajÒDß´mëfî&M ÿ.Šk×Šß Óµkö-/%ÝÕÕ²W,G{ò(­´•-€H'])”êKß"Uóß } ÆÞzÓØfó–z˜_î©G=¥P*4»*¨ ¥RH)•ÂpãsqÆqÞx«…,T—¹¬ÒIWÑD«‘Œ´™O$‘J¡Ô˜ßË^›ÝÄ6Ô¥®šÆ4M´J&Ye‘¥IT‘Dª÷xOìpyK#€TÚ¨u¬S)¤¨DÕv¨¡ µ¹¼¡ U;Ø¡IT©¤ªŸùYµ¥m±÷ÉŠ@x{ën@/_ÖÍv¢£u»ð¼i¿ùÆÔŧ³³y{èˆÓ`»ö±º¨iÓôr’“uÅ<1QW*Þ{ϼ-´=e+­tï>óç›n NLÔÍ-¦LÑMD gÜgÌ(™í4mšíq ê})&Fw©kÏý(•#4TO‹‹s|€.÷±cº[Q{¶I“&:»xQ_ɺxQ7q±7x0öʶؔÿÿþg9½[7}OÐñãz;¦§ë«`3fØø–Da¨h¿ÿ¾¾jžn*Ç'ŸX^ÅkÓF÷Š”’¢÷»;PC‡Z.ÇÅE_=ˆÕûÂÙ³ºkÛ{î±^&{Ëàè1äå…zã ÝqCJŠÎ7"ÂÔ#\ÞaøpS VÐàÁÞbÚ4¦Oûˆ7ô•ƒ‰-Ï:;ZŽÐP=-ÎT×ÀÛ[w{ù²®|FG+FŽ´žOŸ>ŠcÇ99…† bÉÝ)3S¿õ•c•ù6mëÖ)RRôÕ’;C‡Ú^þС:Mb¢"5UñóÏŠ¶mÛ–†fBõë›oÐÀñ&LöäQZi+[a_˜]x¥mƒT )J¡Ô&6©Ô°šî~)0€ø“? ]–~Å dAbcQW®Øcº ¿Á‘¸¼Í››‚Ìöí+ù6‹U\¹b_ í 7*?ü°ùxCàâÈMÔöäQZiË0€(wO¢¶õ$à L`-k©JU¾â+2ë\·šÇR–°…4§9xМæ,d![ØbL»‹]<˳´¦5U¨‚7Þ„Ê VI$BQÚ¶…ºuõS¯…¨l>ùD?¸øØ1pr‚Õ«áða9¨E9°l™~Ÿ5 zôooý>s¦ùt}ÚÝúãßÉ£´Ò–u½¬ŸD]Ps[W#¹zጳZÏz«é®s]µ¡]ù^çº $P"sdAä D1ÃMÓׯ£–/×÷¯È6•¡\ NNŠ ì{X›­&cŽäQZiËð „ke $sÈá`“x”GñÃ$’øß˜Ìdâˆ3¦íE/Æ2–>ô¡>õÉ ƒxâÙÈFf1‹3œqxùS¦L‘h^!D‰›:Õð¦â•ýÒ%Sù^~Y¶§(…ÖË”‚€·Þ‚# A¸p–/‡iÓ¬_q(N¥•¶ ÝÒ '»Æ4Þ–4ÒÏ}d{îK!Dž¸áúSde!*¿7àµ×ôP`åÕ©øy”fÚ¿Cñ·x…Ùz’õ%ëLÖW9.¿c²É:“õ%õ0a³¬!„B!„B!„B „B!„@!„B!$€B!„BH!„B!„B!„B!$€B!„BH!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!Dés•U „B!* …ÒLÑoá„à„“¬œ"W „B!„v“+B!„¢ÂóÄ“Nt’!„B!„–ÒÐÜWwºBn¸ÉŠ‘B!„BH…Õ•@ÁBaøág–&›lbˆ!@¦†ƒr‚)SdýI!„B!*5_|éF7ºÒ•0ÂèLgªRÕ,MIìÌ}EÉnv“L2 ÅÔpóÀA‚ „B!D%áŒ3mikÖ©%--ÒÅg "‰$–XrȱHç>Å,b˜S™jì•I”Ä6»V²•çe ‚˜Ç<âˆã&7¹ÈE6°þô·9Ï ±‰M$‘Dila ƒd‘Î /¦3xâ¹ÉMâ‰g:ÓñÄSö!„B)/|èO&3™_ø…k\ã‡ø”OyœÇiIKRIe [x‡w¸Ÿû©K]ZÑŠ'x‚ÏøŒÃ¶ <=á‹/¬_n/ø2„—LŸññpó¦~Ÿ>]çi/Gò(­´e¤Ì¯@ bCJ )xãm÷|ÑD›}®—ûêOF1НùÚlú$&ñ.ïšëûÊÛ°N¬e-`ç?¯ñèÄ@Úä!„BÛp€ö´Ç³ñg8CÆ+ 1ÄEVÁ™5l¡¡zèÞBBÀ­7Q;9ÁÚµ0ÀTÄß^{ :u‚A©’Ë£´Ò–¡2½áƒ XÀ¼áм{ØÃsä¡ðÇŸ‘Œä#>bû,ƒWWèØ^x–-ƒÓ§áÜ9X¹^z ºvggˆ‰={,>У‡þ<` ³£.èH¥•¶²ïò.hDQ|ÌÇÍÛ….,d!Ç8Fœâc @Sšš¥}ŽçpÆ™Wx…ÿð.s™4Òøß¸‡{ÌÒŽd$¯ð ;ØA )DÁD&šMB!„–|ðaƒ˜Ë\Žp„󜷙¶½¨NuºÑ—y™ïøÎzz__4Þ~6o†ë×aï^˜7FŒ??HJ‚_ÕÍ“ €š5!(ºt1 FæÖõ^yv쀔ˆˆ€‰ͧÄ‘Ö,²ˆ ‚¹¯]ì"“LÛ]©úøè&G†`¡{w¨^Ý|©©º)RDìÞ »vAB‚Ceî³u+[ KXG×-òOÔuA|í¨ :’Gi¥­lÄ$&ÑŽvç8ÿæßÅί1YÇ::М°¸Â¯e-ÿâ_œá ~øñ0˜ÁÌ`½ém6OÞ«­}B!„ø»h@cÀПþÔ§¾ÙôXböL²y=ÊZWª÷ì÷о=¸˜ßDÍ™3:X0\aˆ‰¬¬²ýÒNN.éøÐ‡>Æ€¡-mͦ_ä¢1`ØÈF.pÁFÍÒ,€±c-§uî¬ß33õý y›#?ë¾|b"4h Ïæ_4Õg÷í¹òáH¥•¶²x°‰MV§ºI-ì¬ÿ ±œåT¥*›Ù̆pëép€»¸Ëf>yƒ˜ýì§ #ŒU¬2Ž# °ì>V!„¢¢°Õ½n…Þǰ…-Æ€áGlD>¦{zöÔ70W­j»@‹Ãøñ–V~VÒþýº’«LuAÂt]èè’Í£´ÒV¶¢(;zþ`b˜Ãœqæ+¾b cÈ$ÓjKYÊ]ÜÅBòüg9Kc3ƒlÉÓn˸û˜Å,.q‰ ˆ f2Ó8]!„¢2ù“? ½Áês6Ô‚!`èÐÁ¼9’Rpô¨ 7ÖÒ­²lÜwÌš—.Áº7§™3MÓó~?°lBäH¥•¶²¶®,Ø{å`.sÊ}ÙZÆ2–1ŠQ Î}å•D’ÙÍÕ+XÁ“cïHyó4ú&çÈHؾ]7K24«Éûôçò<¬XO> ýûëï`VÜß~[²y”VÚ2ä(¥§N¢iÓ¦;Rà Û¶ldôØ œ8 @ó–튼pk„­ ¢°§AçOï‰'“˜Ä£<Š~$‘ÄoüÆd&GœYZ/¼x‹·ÁЀ \`9Ë™Æ4npÃáï5¥¼ BaïïX¸þ›2U~Ï„¨(¼“½ 8 ‡øjüYÃ8-wª³_™M²yÀéêÊ… 8ãïÏÙÆ9Ó¸1éUª˜¥©’žŽßÙ³4>{¿Ó§ipánÜì¼¥wopr¢Ï–-·î÷Ìžz™—¼õ–~ÆDƒpá,_Ó¦Áɤzyq®qcNûùq¶qc.4h@v¾Þ‘j$%áwú4ÏžÅÿÌ|pRÊî2ºR-÷nÜ€×^ÓC•W§âçQšiˈ«~·8âÆõ$ëKÖ™¬¯r$\~Çd“uVÞÖ—{†;Ó#èK_úÑ@qÆÙ˜&…¶±Mlb3›9v€ÉáÙæe‡î‡è*@ëÖæâìlÝÆ~ûvc“¤ëçÏs8(õ0!„B!DùV…*„J?ú1ê?£hx¾¡YÀN:;ÙɦÜWQ¦Ÿ==aþçLm™ot0@ý°¶¨(SÀ Éɲâ…B!„£RæJºÐ/÷ÕîT!÷„³ãœC$‘lf3›ØD$‘¦®é6„ÐMOw 77Û ûüs7®ìÖ&$€B!„³ÕŒ .dl’Ô‹^f]«æC4ÑlbõGÖçt“Ó¼>ýuý°¶À@«ƒ…°0ðó3Ï<;[?Í9#Ãô7ƒòÜ#’B!„BX—@µ¨e6î(GM’¶²•«\__FÜ7—ózÀ€Í: Èÿ°¶¤$Ý…ªáéλw›š#U”îT…B!„ïJ–+!˜¦–¿+ÕZÔâ§ŒM’6±‰‹Î—õ³BC!t–¾Âв%Ëógg "#!6rr¬dêTýîä$ÁƒB!„¢¼ðÁ‡ÐÜWOzÒ….T¥ª1xÈß•jSšrÊ'ºvͽwá10T¯nžqj*Mð;{–m3fÀ®]¦‡µÙËD!„B!ĭцô¤§1`è@\0=GA¡8ÊQV†·±èJõç{à”ûhßò={3g "Ât…!&†'Þ|€m?þ(+^H!„BQÞ9ãL[Úš þø›¥É ƒÝì&’H¶³¿³\ýàUÖÆ"¿=!3öî5oŽtþ¼¬p!„B!DEâ‰'èd £5ÌÒ\ç:DI$ýâ8ÐÑ…ŒŽ cGèø8øú¼Å‹aüxHK“.$€B!„(olu§ê„¾øÒîÆ€¡pÇÝ,ÝiN³í¬÷û­S8Û±.ªct|Éz°ûö—ôêe>MzC@!„BT ù{CŠ%–Ö´Æ 'cšl²9À~ð;À†Ž×ˆéèJrÇ–Ðq ø>f;XÈ;œ9cš.]© „B!*ŽŒÁCþÞÚІTRùÉï k;ž%ªc6g:ú’Õ1|ƒ¬F-Ò•ªB!„¢ÜªO}úå¾úÒ—,‚‡©á°©LÝIRÇæàÛè^ü`¡° B „B!n­ÚÔ¦7½ACL=¥yÂcóo²t´‡Å|Û{b J2XB!„BˆòÃozÓ›¾ô¥ý$gœ8ß¾MguèE¢º»p)¤ÊÍÃvfß~ ÿú— BH!„BˆÊ¢ U%ÔØ$© ]pÅ•,Wˆ „C3Y×=}aUHò«TÜûÈΆ˜ÈÈ€ÎÍ3–š…B!„•¡‚âJº›$u§;U¨B‚/ìê“»æðkXG:{‘QÕ pnÓ3'%é³ζ{7$'ëiÒ’@!„¢â0<‹aªÒ]©*ÂpÁ… ‚ŒM’zÑ /gobÛBd(|ªØÚý&§[š"9ÕõŸqqæOrŽ…œëÞ„B!„‹µ®THÀͧ»»ê€á£îÑ=‡äêι©œHM…={ "B_YصKßüìP¤7$!$€B!D¹g«+ÕŸï ÷ZnÙ.yçpÖ76GD˜®0ÄÄ@V–¬L!$€B!De“÷Y Ý=û1c~¦Œ¶L·Çp_sf&ìÝoÞéüyY‘BH!„BˆÊ(ï³Ú5¼“„ÐD†ÂgÝáÙÈt+`æÅ‹aüxHK“)D9ç|+º’•¨ý;™Â¹?~ãÝ+/ó¯ZóîÎl飃¯¸s¸,ùžy:t »VuÔÝwÁ¿ÿ 7šžÃ4ôÙ²…>[·JWªâÖ>\WÐãã¡gOðñ=ôç`ذ’Í£´Ò–¡2½ñ.ïÒˆFDÅÇ|Ì\æÚ=oº˜}>Å)Æ2–Á ¦)MK<Ðyš§˜ÉL9°„BT* eÖR8áL™¢ŸÅÐÁ'”]£Jh?.woJTw"«›Ïïžš‰ÏžßIŽø•ŒÝÛa×.n8Ø•jŸ­[Ø"›CÜj#Gê÷W^;ôß0q"¬Z¥§¯XQry”VÚÊ@t§;ãGYŒa 9ä;Ï:Ôà*W­N?ÏyêR—tÒ9Îq~â'æ0‡k\+0ß±Œ¥:ÕÙÊVö²W,!„•Š­®TÛºgp¸½ 1.æékžIÆ;"†k;ב¹Œ˜®JWª¢² Ñï‘‘æã#"ô{ppÉæQZi+[áŽ;‹X„3μÏûâP±ó¬F5³€u¬³š¦ }“WPîk4£éE/NrÒÆ qåE^06cB!*WW¼|É”±–“±~ IDATtWª.¸f*šîMÄ}ç>.G®áÏÈuüyþ<ÊÚ•U}BÚ℉‰úÝ×·dó(­´•-€˜Ä$ÚÑŽãçßü»Øù5¦1ëXG:p‚÷@ìe/_ñ¿ñ'8'žt¦33˜A Ìf6ƒl5ïGx?üˆ%–ŸùY*!„—ž¡wÐ8tªgÎuiÀª¶oô^¼Š”ñ£8)½!‰¿#'§‚?—t¥•¶²¯ó:Oó4é¤+¯Bø‰Ÿ¨O}Žr” ä2—ÍÒt¦³Ùç›Üdxˆ‡8ÎqúÑÏfþ¯ð ³™-]¸ !„¨X6Ä¥gn }œža\épi.NÄê ZÍ¡jš3ûCÌg Ÿ S§ •u(þ~¡A}6ÿâEÓxÃÙ}{îïq$ÒJ[†Ê¤&<ØÄ&«ÏW°÷y ƒÄ6¶QŸúlf3¡„r–³v—ÃÐ%kþž˜ úÑB¸Ä%¾á9 „B”_ÎÎо=ŒG¯Ä'þ*œ;Göòo¸ðÂC\ ª‡k¶Ý##fžgÄ+èrÛ N´õ`_Gó{ §JgHâolÿ~ýf>Þð9:ºdó(­´e¨Ü=‰ÚHä¯äO`s˜ƒ3Î|ÅWŒa ™dZ߆ìg)KÙÄ&âˆC¡ŒM—¶²Õê|™ÀG|ÄMnÊ%„¢l„‡ë& Õâ==u¿ï={R%´9aÝɨáÀõÜ$Õ“ Çhyµ}Ç÷®`{Úzv’l–•N0@/wê”)ú£GË–Á}÷Á¬Ypé8AA0s¦iº±¢šçù EÍ£´ÒV¶ÂÖ[Á‚5y»|•û²µŒàÜ—5W¹j òjK[îâ.RIe! å`BQvÁCÞÀÁð·¯/tï={âÚÕ©#9îúß¶¡1°ßèµ ÚîL‚mÛ8»šßr6°Ž ö-{ª„ B°b…~zÿþ°}»ù´ àÛoK6ÒJ[†œ¥”âÔ©S4mÚ”ãqG œaÛ–Œ;ÇbhÞ²]‘n-€°TÖÄ)oúntc4£éMošÐ€3œáW~å=Þã‚•Ö/ø‚ÑŒæ#>bеR§Èu`!D7%\ÿŽM™*¿g¥J…[\tކsI¬S•ç_¡K6´?¬†Î{²h†Ôªqœlz’„º ².…(N½ÌË Þz FŒÐ÷\¸Ë—ôipãFžcÖÆGò(Í´v2Ô÷ó×ëmiÞ²J)"wFvk›0Y»ò`ëj„=W) vå¾ñdîK!„(Õ˜¸V»6¿õëGl[ËéÑÁu¨š ÷耡Û.E“øó\¹í'›ž$>à'›åÈÊ¢¤Ü¸¯½¦‡+¯NÅÏ£4Ó–WÙcnqÄ+ŒëIÖ—¬3Y_åH¸üŽ•È>æê mÛê‡=ë‡BBµjæ7æs˜0î(›³6°‘Ìa É$ÃQ*Í£›å¸”õ%õ°ŠK!„¢d¹ºB—.¦`¡cGÝKR•*iœWtÚçDRuØÚ;_ì6MiÈçöÞÇ „@!„·€==!T«f ‚‚Xp÷Ý$Ö©o˜?ØÔI߉,ºîs%8Zßß²j%äp˜ÃÈÔ<÷PºS*ÁƒB!„¢œÖzBÝRHˆù•…¦MÍÚB_\²‡S ÝçA§¦€¡Ú_®$‘ÄNvÉNfÉnv“L2 ExnGHÊIžÅ „B!„¨xÁCx8ôéII:XhØÐb—ôLüÿE×}®ô‰®Np4Ü~Љ*éUˆ#Žìd‘DI,±ä`yÓ³±ƒ©foB!„BQþþºÂÂ…0fŒå´Þ¦\ÿºAƒ˜BöÃÀ躄F{Ò6Ö ×¬Ú¤’JB“öt9ËŒm3ØÅ.nU…@!„›„…釳õê;CÕª6“X•ÄÜ7¼i}Ì 'åo†3|GDn“¤HbˆáÍ'ÞàÇm?ÊzBH!„BTH ê@Á0´o..¦éJázô·§µ`ˆù¬úfæêd’I{ÁB$‘œç¼¬[!„B!D…æì¬Ÿ·7`ðó3O“‘Ëî½4‰¼@¿ínŒÚÙ‚ ­¬ö„Ô‹^ìe/i¤ÉúB „B”[öt§êé :AÏž =z@õêæi®_Ç)"¿ÈsôÛîÆc{[Ó+­3®t5&I!o¼­ö„´í²-„B!„å>x°Öª¯¯¾²`:uwwóyOŸ†íÛ©yŠ;¶»óHl{úæôÆoc’,²ˆ ‚¹¯]ì"“L½héI!$€BQƒ‡ðp¸ÿ~ý$çÖ­Íž»@v68Û·S3ò(wlwçþóéOêSß,ÛXböL²ÙtcWªB!$€BQxzÂüù0z´å´à`ýžš QQ°};ž‘Ñô‰tç®ä0úÓŸ¶¼`6ËE.†lä‚<ÕY!$€BQ5l¨›!…†êfI!!àæf3¹óçÿ¡û¸¯Õ—þô§+¯ãšçßW )la‹1`8ÂYÇB!„BˆŠù_ÆMÁBX˜eïHÙÙCçŒ@öt6Ÿ>&N†7OÇY»!‹,Y×B!„Bˆ Ç׺uƒ®]u°`íamII°s§"#a÷n’ëÅI«Ý©‚w¡÷1!„B!Ä-8Sl'1<{!os¤–--ÓÅÅ™‚…ÈHˆ¥~Îmô£ýA_>#€cÐæÝ©6¤¡ÜÇ „@!„(¿±C¸)p˜‚©&ï㣯,‚…îÝ-Ÿ½š {ö@DìÞ »vABµ©MozÓgéG?ÚÐÆl¶k\£µÌ‚ „B!„å9xÈß•ê=÷èg.´o..æéÏœÑÁ‚á CL deá7½éM_^¥ý$gœ³¥Â6¶±‰Mlf38@6Ù²þ…B!„åž“´ho¿ C‡ZNïœ{gsf&ìÝkÞéüyªP…PBéÇúÒ—.t1ë))tv²“M¹¯(¢,n|–ç1!„B!Êݯ¾«¾o!8X!!º—¤jÕ žoñb?ÒÒrÿy¸Ò….ôc4ýèGwºS…*ÆäYdI$›ÙÌ&6I$é¤ËúB „B”[UªÀí·›‚…Žu3¤*U,Óž= ÑÑô©v?[ú˜O Ÿ Ó¦Œ!ˆ úÒ—~ô£½ðÆÛ˜&‡¢‰66IÚÊVRH‘m „@!„(3ááºyQÞ{l©VÍ(é`¡uk}Å!/¥àøqØ¿¢£aß>8pØŒ²Ú•êŒ79娱IÒV¶r•«²Í„BˆÒ±’• ÅÔÎÖžv¯Añ$Orwá?׸Æaó>ﳑæÿQæ•wyޤBˆ2 òyÿöõÕMò^YhÚTyeeÁáæ aÿ~ýþ×_VYPWªµ¨Å)N›$mb¹(ÛIQ9xyÁ›oÂÈ‘P¿>\¼Ë–Á´iƦ›%šGi¥­¬Ä 1”¡¤bvù»0ÑD›}®—ûêOF1НùZv~!Då ÂáOý¶Ž¡aCËyÒÓMÁBt´Ôãm¨OýÜg1ô£/}DÞ Â )M9Å)Ù6BˆÊÇÉ Ö®…Lãüýáµ× S'8P_½-©\WÐãã¡gOý{Ú£‡þ<` V²y”VÚÊ@¼Ë»4¢QDñ1;4oº°…ãdpŠSŒe, ÏŒ !D…ããwÝS§ÂæÍpý:Œc;ýªUЪÔ¨½zÁK/Á’%úJCV–Ero¼¹—{™ÉLö³Ÿ+\a5«ÏxÚІRø™Ÿ™ÈD:Ò_|e›!þ~FŽÔﯼ;v@JŠ~¾ÍĉæÓK*ÒJ[†Ê¬ Swº3Žqd‘ÅÆCN±ó¬C›7îç ”ûÍhzÑ‹“œ,rZ!Äÿ³wïqQÕùÇ_#ˆ€¨ë´42·4S,ïšÈ·63Ûn^ºj[›í®ý6ÛV-Ì–¬ÕÚj»m¿l×Ö[¿~m™–©!hšIiÚ®—@óVxøþþø2 Ì —ÞÏó8aÎùÎ÷ ¾g8Ÿ9ßó=R©&MìýJ& ]ä^&/6l°ÿÖ­³7h+ Éí:ÉCñ½bu/‘ªjg¿v}þ:>lÃë·Žš*ÛЈ©L¥=ØÅ.žäÉó®ïB.d9ËéIOv³»Ì5›ØÄ|æó)Ÿ²›Ý„B_úògþL/zñÏq7ù\VD)o†S ±´  ƒÙ>ª­Z¹—9qž‚v& ›6•;‚†ÁÀL˜‰s$¤x žt/‘šRz$;‡£f먩² %˜Îtàóþö«}XÆ2"ˆà[¾åZ®å~p+Ó—¾nÏsÉe«¸…[ØÅ.b‰­RYi¤ÉCy醇Û3 ΄áê«!(Èýµ{÷ÂÚµöÌÂÚµ°};zß}³ôHHYºƒˆHõ;|"#íçúÁÃS;¿Ý/ýíÿùÖQSeZÑŒf$‘Tîzç½*õh£XÄ"šÓœ5¬áfnæ8ǽ~xµ_ËŠH#IâãíHHÁÁö&m%¿*(€¯¿vOöï÷y“Îî”åѽDDjÀæÍö }ð`;X…ÓàÁö1=½z먩² -ð…§db2“yžçiBæ3Ÿ_òKÎq®ü¿!›YÀ’Hb;0Ww$€RªTVD‡.½žz n»­ìzçk§OÃ_' ©©pê”Ï›kA bˆ!®hêNweu/‘°p!ÜpÌ ‡Ùnöî sæ¯w¨–¸?CU먩² -ðô-¾·g^à×ÏwMž¶]4•çGx”G«TVD˜À@{¡³óŽÎ}úØ{*´lYñëþç`Ò¤r‡N­üC7 p% ýéï6RRE7ÙTò "R/†‰!.Î^ŸVÒªU°dIõÖQSek‘0Æ222ˆŠŠb׎m¾`mòj&Ü?™Ý;·е[*o¼¼ÂSRa0^')À&0Œat¡ {ÙË V0›Ùà@•Êz+¡’¡E¤öåòÃp°CEDp "‚Û·'?°ì÷(-O"âÀr›5#³K·u1))Ä$'û´íðÉú.Ѝï¢è’Ù… ¼âk% ›²¿Ó~¾‹úŽï¢¾c_§}ÌxrF¹õÌL˜YkñJˆ·Ÿc 3õy&"õ›WÇe¡¡0cŒg» 8‹Á¬YpæL‰Rg |©£&ËzÉy¼_ú¸Þ“®Ýz`Œ!íó4\·]˜Ê;óPÑ¢½µ¾hªî²"Rw’‡ ‡Ã«ƒ÷ÜfÍ8Ô¡#"8Ô¡""8Ü®…Mš”ù¥Í±cD8@Ä¡Ct8xˆƒi^â9yØ0’cb|JZœjáJ¢¾‹"ì”û…¬ð,WÂÙ%“¼fyu–(ˆˆö@|Ú4;Wxðê8ÿ:j²l- T‹©ãŒW\qR¼3âã¡è >99ÙýÂæðpÛôª«Š»!]rI™ù&……ðÍ7ðå—¶iz:&=£'OrØVÙö’(/}¨ì:†ƒdu‰é@ÖÈ6øsÌõ9¦}R1S¼t&J D¤¾&¥GBЉ±÷TˆŽ† /,ûšœœâd!=û¯¾š ~ø§žx§M»ºNÎt?ªnJÓJ¯cH&Ù•0l«8=Q!"rÞ.ºž}ÆŒ)»nذâŸOž´Ã§nÞl‡³KO·÷[(qsLjˆj}kÇ8æv¡s>ù¤’êJÖ³ž|òõ7%""5–,\u•ûì¼IŽ'ï¾ ?;w_ÔV.æbëÂc;Û] C2Éœâ”þŽ""¢BD¤Î’…¬,Û)4®¹Æ}ÝÌ™îÝšªAÄMÃ^aÑ‘ŽU¡MDDD „ˆ4>E{uïk²PrÞ»×}›ÎíUSòЖ¶ c˜+i¸œËÝÖå(mhSîk•<ˆˆˆo“‡’ï%®®d¡<3‹®bö6q)GP^#Ép†K,½èEЇuÍ&›µ¬%‰$Ö°†¯øŠ ô7Q!"Õ’<ÄÇCl,œ>]½ÉBeI„—‚ fƒˆ%–»ß¼›Žû;º% 9äð9Ÿ“T4mdc™ Ÿ}¹ÿŒˆˆˆ€xùe˜0¡ìº¡Ck&Y¨Ò‡Y ýèçê’4lW~oïøœFkXCI¤‘F9úûŠˆˆ(‘óÒ±# dçíÙš6õ\~Éxì±K\÷b(%€zÓÛÕ%é®qZµBÒI'‰$"ÆG°§Ë¦'N×ßWDDD „ˆTý zõ*N¶×2”TP`ï³—}ûº¯«Ñ¼•EV™‹œ¿å[W—¤R8º%èo-""¢BD|@ÿþ6YèÛš7w/sâ|þ¹ÓÒ`Ã8Utƒ ©"‘Dz\׆6dáê’”D9¨¿±ˆˆˆ)-yØ0;"QEš4îÝÝ»#uëV¶ÜŽÅÉBZš½‹saaùuVÃhHiA bˆ!®hêNwe£ˆ"ƒ 5%"R¡øx’cbìÏ Åò-ZØ3 Îdaà@hÕÊýµ§OÃ_@jª=³°~½½øÙ>ކTñP àJúÓŸÀKÙd»]×P’’%"âEòPf(Õ믇  ¸â p/¿w¯Mœg¾þòóëôWèAWÂCŒ[‚O>©¤²ºhZÏzÎqNw%"â5‡.½žz n»­ìzç…ÍçÎÁ¦MîÝ‘öï¯ó·I¤+aˆ#Ž"ÜÖog»+aH&™Sœrÿõu/%"âi ´×-DGÛ¹O;JRË–¿î­·à׿†³gëüW¨ì:†ƒt% «YÍèï.""¢BD* W^Yœ,\u•í†\¶ì÷ßCzºM$œ×?8ÕÒPªžîÇД¦•^ÇL²+aØÆ6ýíEDD”@ˆ4BññÞFÔ²%ôîmÏ(ôîm“…Ë.³gÜŽÒ ìÚ›7Û„áË/᫯Ü/t®å¡T+sŒc•^ÇO¾Ú‹ˆˆˆ‘Fž<”

ôätmâ3‰ÄF¦¨Þ¸3Öÿ’mÌËýWüæ¡qU'ˆ `W±.æì¾U¨õ@ØùaªúEÆpª\ÃglD¬,{‚qs×lÔ«h‘ÊTm„y~Wr¬7,pú´® kCÅÆ¨ôM+,Þ]m=¾ååæÎáUèÒØ f·#ë¶€ÓoujKN}‘UlÐ_×§-ÊÛY@,2„“›~ÚC§8æetSp¯+áÙ–‡_ñÇq0u£Õ¾e¶G!‹ÆÒ±ß¢Œe)bÕg¹ísqÆ ³þÌ7§¶hsLå´ï…a۞瀡ÍTËÌ+ U¶w÷6½˜ó ãqM}Q”c:¯}æ3·Ä1•׸å;i:Öty¤çöÞ¹p¯dŸm¾Íí¸Ï-¶ÚwšæÕÌó™Çó{® Eva‚±„„€…?ÊñgçÖ5Œ1–ëçym—YÇ窋ö8)i £^Æ„ Å6ì®4¥Iï2±™:øl½â—[[Þ_šÃÄÇìNd#¤,1ê)›ÔÈžqœˆÍ¾ô^mûOë3Ÿ¦öŒãlʹ0­ëç[/cŒmãÍöÿsÅHSYZÒGvfë€Uú§j°³“Çq̾ñ$ö$Rʤ‘OؤÆöjõFÞXÊ$Ž9xLb÷߯²´Ä¶ùûZ ²'DëòòÚW«ƒÙ¥§á,-MÊN¯ïÃ0³òcµnËçu~þ-ÌF,dÆv-Ù‘«Á,%=•½{|…ÍÜPë8jÚ¿}í”ã îúlË××µcXû}!:íÛþÙ Øå§áLÆsÜg ú˜Êmßu©;/¥ „ ‹“)T˲X€  eÎÓÔNMŸ‡û‘I„Muš÷øôEQéÜb in-ìcŠoù|5mÆhØy_&à8f[{!eÒˆÇl¼»m®ã)§}Óæ¸ã8NãXä;çç\ñµ ~¤–³­Xº@ë<.3‡KOOÓ˜fÆ>2*2³/Š/ÁsÀRÚMîaç½VsÒ%viRM€y+1 ¦oy3€­{“ Z–ðv}ÆAä«¶}¶õÂ6(×+磶^ÖŸœêç[oŽé WW-š\VYÞú·êåe­wFEs€ŒJR-KOa˜Äº«ÖååëmaRÕ2yZ¸rbˆµn‹¦“öü*– ›~/Z»A‘C5íŸ,ù9³ '°;Ò4ÆciÒÛL"à˜PlÍž'ËtÚ·½‰ZÛâŒAAS¹í{A'˜ÂŒ9Nž½G3N¸¢B™óršr›#>÷ìø,f,0ÈŒ-<ùR§yO_õ˜Î-¶šæÖÂ>¦ø–Ï÷XÓfŒN)§ì§5Ybÿú—\ÇSNû¦ÍqÇqbÞ ¦¦y³™˜ã˜}ãÉìId"KŠaSš:0ޱYê/$¨¯Ç±ÿy«ÃK>üêèbÁ°aÛXRºŒ½{x†uw6U+ïí?3´žÌžF%²Ä¨§lrZGßý…™ ÌØ¡#;ý ŒÉd©,êõcöÇîÕ¬wÓJZ——ŸÛº|Û ·?>ÜÈ,EfìЖ¿ÊRei,"ä[èÕTë8ò³÷—7d˜¡•!À.¿Ÿís]÷ís5K)]9å9(}‰AASy<çõYzâ}VÛÄ€YTÁE$°„ˆGl¸«30©Ã&¦È\†|Þ"7 ˜@lÅVäñâ 6qãÛE9¦sÛMskAÕŸÛç|Ëçs¬åuìæõ’OéÓXHt"KŒzÂ&äñ’O~úzLYå1ßoóy–”.c‘!WØðZÖ¼ëÒõ܃¯ø–ùWÿ f¦wÿc?xvf.¥­™¡HÀDf[¦kÖ±×™`2ÆXð_ëXç†Õ˜‰ J±ª :²µç¸ý¿;f1w&™µs6sÇ:×ϧÞäè+lt×FÌÊXÌ" s®ÑŒ-Üs-Çò®mŸÉê8[3¡@Ä*¹³YÛÿÍq½ˆëÙЮM™ƒ…1D̲t%ÖÑóæ1X§òtM0ù¶…ÏDõáÞ 6ºg+ædmÊ1+S­)[´ï?­ãÈw̦%\gF.ãy&#v#!Mm]öís·V`eÌô2uLér#—dò*7þù)6´½;371‘‘9so?”ýó"¡Àæ²ü&˜Ðð"PZü 30mÀ;f|ú¢(Çtn1à3·Dýy}ÎwnÔt¬åuìæz¬ïžÍêV°e¢ŒùöÇmÔ^ÈÑTŸ¾Nx}Šy¶®£< K1W÷vlÙo7uN0ùž+(Á,Þ“ËX©T SSS„?Êñ2g`ÀY åg!AZ] 8‹£'Ò_/ÈÇ­JŠ!¤¸<Þèê?ü‹êãþÅ£ Mhný‚¥|ø›o!±îޤèìYH*U®ž-g;~ì|¦ÎÖ*ËÌáÒÓÓ°×oSžy ‹«cˆŠŽ‚­~ü-rB!úiÙ‚»ß9u(_˜º½}pöÎ ¤ÊbÞ<Àüã½W­¤à|£“BH®ü•oÿ³7¦`|a¶{:béȶ07Á¡ZKœLü+Þž!.’o" þ¢Û7„Bska©ÛÛgzûP H¡ +˜„B!„LB!„B &!„B¡“B!„íÙK>111mB!„¯]Á$„B!”`B!„J0 !„B%˜„B!„P‚I!„B(Á$„B!”`°È;cÚÈ~¨ïæ G{[Ø—.ƒjµ [ßaªu¬¬¬`eekGÄ¥ª•‘GkÕzÅ!³nM?Y×-ŠöèmÚ¢Oí.©ñþšÚŸßvç¶}aÄ£¨bùô?l]:›TÓX§"= ›fFýêakë€Zݰæè¯çKG9­ûâøOhR£"l­­³}öùºE'}è¾m(éã‡èa‚ymãxÔn7éÕ°áh^„½CèÃkزh<œR©­Ï)˜2å‚Úò S¦ EÁŠu_>~ü˜íGÓrB) ͇Íà ”Ç¿€¼WT¤`ZǦ˜»óÆoøoÞ½Á?Ûg"ö䔂­ç+àå½OÞÅÂÿÁkšç A~ÑzNb¯E·Ùþ0¯>—w̓˜S.7´.‹æÝ† y·!jÛx»X`ý‰1¸¾* L i ×1æÄKX¸x#6t-õj–Ä–ÚM(î_Ÿ'WÿæµÞË^Øq'-7ü¡­*JWmŒ¹ÛÏh=_ñr/1ÐÖ±W´ÿÅ|óĸ 3†^›¼UÉ¥&ã·†B–€ ³¯ª–]5 2o_â:àþïѯ}c”s´‡½c´ì1 Þ%e[çý•_1ìÛ–¨ää;GÔmÑ+ÝÖXvn·f4Õ™¹ÞõýKѾìmíáúMK,ñ¿›gùyÕ«iMåf.»â7ÍëT†½}iÔjÚ›Ïc×ü±¨_µììKýM_üþ,>Çm5í6±¾óëOhõ+ìmíQ½A;,Ý=Ç}yøƒª~[{G¸¹7Çø;'cZ÷ Ä==)þC-WgØÙ:À­q'¬:t§PÆKJäULÚ5]agc ç*ß ÷¨i8~õEžåðÙN›ÛÒ|ö™ï±”S}šÚÄëåÙÏÚ|ËÍ# ¯|º8i}L„œŽ#¾·”sZÎ7^|ŽßÌr²Xã3Õ+”µµ]®sc,Ïy7¿ýœW{tÛÏÏl‡g‡Æ(WÚv¥Ë¢Qû¾Øvúïh[†.ó'¡Sg›ƒc#]ÌyocSg–.…çþ#ñ0)éI1ò·ç0qˆùulJ\|·ô&múÏ^½À-q?ð†uš£ú<úÎZÔë>×Ò›âÁxÿê¼Ýc°xL[Œ;ð¼PêÌ4xW6üu/Ÿ\A?‡÷X1¾-æ†g[‡ã4ÿfÓãºúá’Ž\ ‡Æàíã+˜Ù§Ö¾®…“w‚qíÀ(<¿s?tŸã¶šö‡o¬Ã/ÎBÛ +ñήþ}ü7OnBüžÁ9Öyú¸¶9‡oÃñîU6zׯ¯«}Ñnâ­û%.x7Ü›„ÿU9ÿzoÞ¿Æù= r~j¡Œ—™í<±ó@Œßö7Þ„¿ÇýËG1¶ƒ þXÔ§@¶ã3vøì³¶ãZ۱ɧ\>ý¬Ëq ÍøÑÅoáÊDyg{¸”- ÛҨѰæï¸PèsŸ6ÇŸ±Â7^ÚÔ G—ïD£q«ñàE>|ˆ,”9N›~æÓMmмö3{NÃE+œ»ÿ¯  îazÿÆXr-’WÚ–¡küIÉÅ`Œ1H¥R˜šš"4øQŽ+œÅðQÞx¤Ug1bôÄ8{kk¤3†÷>ÂÓ|u%ó@ ¿äêßîCõ±'±SÐySÂÚfÙÖ+nyµ%ó³5Ao1ØÁ€òa{û*àb|ˆŽ,¬ëŒ_^ÆÃ/ä¾µ6ÈRŸÃ®´;Œ¬:à]¨?ïúùÖ™¹ÞÒ‡o0*ãvObø”­î S§ðêþBÕz'Ƈ÷[›~ÉkûƒÏߣ­…!²°±sø?{–†`ŠØÙ–‚3À‡è÷jÛjÚ¾±žU³<6†%`Ù£7Y:£¼÷ÛQÖmªæ}d2XYÛA,©‚ˆ°«Zõ˲ñsh,þw)sÜr¾"RãÅÑÆ© Ø~î.zÔ) ž7xmÇwìðÙg¾ñÓö8ÍW¹9ô³¶Ç6åê:ÙY[CÆ*ô\€ßWŽ‚ ¢±Í§;æ}v‹.áÀ87ÞíÖvßøGÚÌ3|â¥M½°ùiúÚJtžãr›‡u'rj¶}2·vy¬{“}N̈iÙ xuo¾Æ:µ-#³ ùš? o£ß£RåêÙr¶ãÇŽÀgêl­ò¸Ì.== {ý6噺¸º1†¨è(ØÙÚïÌ FÊG@_§Ê´ÚÎÁc%:YáéN/xí| #ëNXåáP"A?{ãO—“ÅÊ+°L‘®Zæ÷V ^ÙQu«Á®´; 5æ\¡Ô™É3Ëzƶ}2³}ŸýŠR´C¨¥¹¡²Ý¢OÉFk ÃŒ¦A€)RsÜVÓþðõþˆDeí²”g×W­¾ÔØ»˜3Öîn•á`g£,3ãö’,%Xë~ÙòJyëß»Še®ñ)Èñ2 Œ cðj]öNÑ EŒ¾w>¤Ìv<ÆŸ}Öv\ôñ¢m?óUXåfe!RöÁêU£PÆÜ†æe0jÕjå‰eé”»ó¾Çß±Â7^ZÕ à;I¡ÎiÚösA´gÏûDõ91#‰ï÷ðªSÛ2t?)¹Šõ%Ÿ1®ð¹…Ïâñ³›Ï÷pbü´ªþúÞè¶u D\Éìîó ÊŸíjÆ¢{ï£PÖPX$uæ K+Ü›Cs³>¿›ù”. :Ö Ú}‡MÏâÐyÎ.ü5¢=ìÍŒ–+kûÛYýRû°èŒ?Ä?®Â©Àx‹Ð7úàNþW÷Vøvù;…Ëa#O IDAT5®5•«m?ÖøÑE; CøG%¡¡©¡j™¡iC@Zâ]ý8s+…/q!Ÿ[´m·¸Îuâz~%9 8[$õëÌ€ãpdÜzhûÌz¹.›ÐÈ̆f°©KÙ/v x9™Öýmƒ‘Ÿ^dHŠ:(e?0ˤÃ)R#S¨­§žøÿ ¥iøÆz@Æo죲”yPm=¿Ê«o›&tSž4HßúéÜþÑåÌëBb‹d¼Ù5Á’m‡qçé+„¿Æ?û•Hßý–ïíøŽ>ûœ_ù›Úô³6uôøÉq¼ô.ø/áÓÕåÔ„ÿ”ýhÝUµ¬0^òá{ñ+|ãÅ·Þ¢R˜ýœÛxœqk:Ûœ˜ƒR¥ù=©kúÿ¯ Çq1z¢V?%2Á´¬æ?z"áÑ4÷Zˆ!áHSÈ!ý†+'÷aÜw s’À'_¾Çû—'a,ør½ú~÷T˜øµÿ8<‡\ž†a!øç·ÍÖ©^¡Ö½|Ø„F'#åãs,¾ÇaÐúTŸÌxîfʾ‘"“#úù Lë57DzªI”Ë“Š-–šö‡o¬Ç¯Žã°lè<ûŒäϰdØrµú†9+“£þW"“#âÉEŒé¶HçöÙ; "67'ï¼@š<QÏï`…w§B/ ¿ûûþºŒ°RKYÀÆJyb0-7$ßÛñ;|ö9¿ò;6µégmê*èñ““Z³¶¡–‰&ùlGX|*RãðÝg8ŽƒçŠÙ…z<ò=޸޾ñâ[oQ)Ì~Îm¼ßò=Ä—}N±'˜Íü¾E×2ô-þ_›Ëçtú)q &4·÷Nï‡à!Æv÷@y{T¬^Ã|Á+QÕ¯~0XÕ‹[§w Ç7R|ß¹ìíP¿­'¶Ÿ}Žî³ ÷·¾½CŒ1¦ã7(çÚ¿¾·Ç¤µg°¸EiÕç OíBÏæ5qnF/”+[F-ëäÃ9–µaV_”63DÏêNÅö×4íßX—nõN¯™‡ˆßШJy|Ó~4ŒïU«oîéƒÚÁOë 'DzèൠßÌ8¦sû-ªŽÀ­ {Ñ·¡Sû´€£½Z˜ ®ÙâB/¿ú´Âíƒ+Ñ©¡ìmJ£å _ТÇh>=?ßÛñ;|ö9¿ò;6µégmêÊïøáóu9"Iuœ¼vMG‹êåQÆ¥>v†8aÎŽ‹XÙ­\Õ“¾Çß±Â7^|ë-*=OðovfàÊo?£Žâ,ZÕ(‡²Õ›ãŸôšXòëUÌllÇ«l]Ëзø“B¼ZŠb|‹œèiR«GoâÓþBó!D;¹½EÞ¨qSÊkظYÉz‹œB!„|y(Á$„B!JD! ŸûÒnMÑ­6Bèx%„-º‚I!„B(Á$„B!”`B!„J0 !„BÑ^‘½äciiIÑ&„B)d£ß{è &!„B¡“B!„P‚I!„B(Á$„B!„LB!„B &!„B¡³€…ßøúwA';ˆ``T ŽÎUѲsÕ:Çã8„Æ8›ªVFjì ªõŠ“>´¯gg£FY+ˆ‚Óæ/¹ùÖ[Tí+ê8äTŸ¶m(Œ6g–™ÓÏ礯ÏaD熰46€±%vsoy×tj'um'[Kˆ `ië„]aç?A%z®!„P‚Y¤.¯çF=p6½üNßFLR2¢ßaß*”K¹¯¶>S$cܸÓjËO‡d£ÕR¿‘Ëðèm þxÆ(~„ä…1¦ö“•,)-jvƱgn¸üâ#>¼¸ŒêÏŽ¡sx’,ÓXþá©àÖÉ AV­qôßÇHHIÀ㢵U¼:º¡ó´£Ô „J05ùøpZNÙ “SpÿÐR4©îC‘f6åѺç(ì9ÿTm›©U,ñüÐ \‰OS-K‹¿‚A‡žÃ²ÊTêQ-Ý–¦:9™P0H® Õ—Z_A»» ?nǧ¡ïep³7©½–ýÖiñ·ÐÁ½<·¸â‹>ËOÁ¾á|ÜÜ3 \`(2„ƒkÌÝssëÛáïe½0õj LB%˜y94t%䌡ÿž©ó¼Ë3eÿH(dñðš¨Zèã…x™#÷O)ö€f½]õùí«Ì+dÑX:ö[”±,@¬ú<ìü0Õ:"c8U®ƒá36"VÆÔʸsxº4vƒYÆm¸ºmàôÛO·á’Ã/a\ï6(gg±P ûŠè8`^z–­¬Ì“yN·ÚBOn@×&n0“@ldŠê;cý_!jû›×>e~¸yêT°…åk¶ÀšS±eúT)m ±•ëwÆáà8µx†îBŸÖuamb¡Ø•¾i…Åû¯kÕ†Ïñ‰M&MqÖ6N9M·8oîšzí` 2@™ª0Ïï ï±XPãMÛØñé·¼ÚÌçxÒöøãÛWù±mÏsÀЊfªe敆*ëÞ½-ÏmýGùîŸÃÄ,€·ß@ÀÎQ¿é4Nós,jsÌBH–‹Œ%$$0,4øQŽ?;·®aŒ±\?Ïk»Ì:>WÍX̰ÇIéLå(Øð2&L(¶aw¥i,Mz—Ùˆ…ÌÔiÄgëŸÜÚ¹|ÿììòÓp&ûìó-c¼Ùþ®³i*KKúÈÎlÁ°*CÿT+êÆ`véi8KK“²Óëû0̬üXÕzcÊ›1lÍ™,9=ņ‡²¿÷¯cýš¹ðjëûKs˜˜ã˜]Éìq„”%F=e“Ù3Ž±Ù—ÞóÞ§ÌÏ+ô]ÉÂÓØ³sSUË*ö[ÅÂÓXÈé) 3)32Û¶‘7–2‰€c“Øý·±,-1‚mþ¾À†ì á݆Ïñ‰ ß8k'Žã4Ž•Ïÿvv2ã8ŽÙ7žÄžDJ™4ò ›ÔØž×8/Èñ¦MìøößcGÛc:¿c:¯2-MŒÇ ™‰•#kÒiÛqæY¶õJ'S¨–)d± :æYGe‰r>|šË|˜žô”`b‰«Öã4¿Ç"ßù„¢Bƒ©ål+–.Ð9§IOOÓ˜fλ‘Q‘™sKñ%˜bŽcXŠB»“FØy/€Õœt‰]šT“`^çÃJL‚¹7"‘_AŠtå ŸºZÛ¤ªeò´pe#«–Iã8Žývó%SèÐVߌʺ7 ªe o×gœ¸|yïSæç'?&+Ûš­ZöÇå2…<‰ 9ŽqÃlÛΨhΰƒQIŸN²É! “XwÕ9®|bÃ7ÎÚĉãÄZ'˜“Ë*Ë_ÿV½|¾ fAŒ7mbǷߊ:ÁäÛW9qiÖ­Ûÿ7{ËÒÓSXÈ?YJæŒã„ì‡C/Të 3æ4y¶­eý/ʳŽÌù05·À*RÔÆßqšßc‘ï|BÑÿS—N—³Xo‘»HD€)2­¶sl¹ Ým$Úè ÏAØtÇæ–Ž%æ’q?[cµe©1·à;¤+*;ÙÂP,TÞÎʸ)K~¬¶þÒ¥>Ý<Û)/E+ÒUˆ•5c žîÎ00±BÕoš`ˆ÷|ÜŒNáw«/LªVO)‡AiØ6^û”U; #e[EÖªe,•Ë8 L‘ýÛ6¿Nôµ5VÝÞK*R>žÒº ºÄFSœµŠ§ýá¶ó½²üÁêååxÓ&vÚö[QÑvLgøÆ舊væ‰ áâÞûW19v~?QµžXÙÇ òO0™2»<ëp6R·¯r™e)¯"à ZÓü‹ùO!_ŸbM0½«Z6†Äiù £«7w‚<5 a©rtÚ²¢ôM9=o:£a[¬ØûÜÆoÂËh©òeEZæ3 jëd+C½À•×þ€wÿ¨`gYb žÞ½Š½ëæ¡ûÿŠlŸ²Ê©²n“Ó>f>>÷2E¦öæ®"‡“'ßçxµ‰¦8çïá”´3Þ´‰¶ýVR•rè¯LšcþQ-ëj-o-\K›Búáîÿ÷/Žü¶—z?ŸBž>“§!îÃ;ܹr[V¬Cí;ñÃ/{áݾˆB¡S¿ä7Q¾½ãw\».¡ZnaWÍ»•Gón¨÷ '4€…3ZõæÛbTËï°~bo”;€¥)@„BÈW¨XžÁ|pt¾mÝ U«ÕF“ý±öÈ]µu\\ݲÝvÿüÿ5Ý’ÿcö1Àw‹{ónWÄã?¤7Ük×kµzhõí0lüýÚz¯.úcT¿î¨]³6ªÔ¨}¿ÇÞ€W¹îà ÿUèÖÊU«×Eó®C±+ð9üWÌ@»¦P¥z]´éù=N½LЩ=yÅ%óß y ¶Ì&îõP¹J-ÌkÙ.®nð¹™­¬ÂÅÕ 5›ÌÔ©_…Få°ä—ÖPȱlʹìûrm¦ª=Uª×CÓv=1m¥?âåŒwó)ƒB!_a‚yuzÎØ‚Û®8ùï5œóÿ 5ÿó¬W4Cƒi¼Â¹ÿÐ×±¯v}|¸mÏ­ôúØú‚nŸÁè:qX5žÇ_«Ö‹ºµF/Æ}E ¸†»—¡9‚°`L7¬¾cÙ¾ÿYÃïdÎì„wÁ7±hd7l}[ þg/ãô¶xõð¦^¡S{øÄåÏõà>|>.ݼ…§÷1jNc@àÂSÙÖ»´ø< Ú8/û׺ÎÈŒöï̶üÂIS¬Úy·ïÝÅ£Û°l”ŽlY„Þ3yï Ÿ2!„Rü8Œ1©T SSSoMó}Éç§ ±ó½ó.ÝÀ {å-Ô¤Ôj¶(Ûzù}ɧj•1† §`ÀåÞÎ̲V´i„Ío°î¿[èd©|IEžúUjv‚‘E <¼¾°´UCl “bnà vÈÞ~“2#p÷‚Z];nÜF sC(ä±p­Ö°õÆm´67S¤ j5w(81BžÜQmË·=yÅ%sùÊ«·ð­õ§o˜<ê6Ç‹TŽÜ¾ZÆ"ÈÓÂѰN;Ä)8të&ê”kìëœú)RP¹j=p1BžÜͽƒ˜.UjA$©„'÷~שs+ƒB!EËÅÕ Œ1DEGÁÎÖŽÿ3˜g³ý{ø(o< Ê5‘ÌÍáÈ$@‰j™Ä¦+€Eº£å„x–,Ë9ªH„jíû<Ñô—˜Ð°žZY©q—Uÿ \ÙþïlÕÛŸ~€Úöf†ÐBµ¬yÆ2N`¦HÓ©=|t±ÊþV7'4Ç’ÞÎè·7‹Ž¼ÂÁÁ•qe1be XTœgr©‰<å@hXAµ,-îV-Þ€3Wïã]tÒåŠ,ë?çU®6eTª\~ÛÖÒÑN!„ Ür¿œˆ´-8ß ŠËg3Ì}ü~cðs]ësW9/>¼2Âm‹Ë!ðY–1Æ µ=¢ê¯éí á¾ïñxãf`ðrœøù þŒnùª+ú΀UõaªeËûxÁïeÚúüÿÍagj0\ªÔÎqßs¢MÏB‚²UB!„ä¶n´~‹<¿‰e/; üÞ'âćd ´SÞbNŽþ“×¶ÇñNHº,„ùß®Ãß>Ë0ýìϰæý¸é@ÇRØð:[ƒã0¿†U®ëõu0Æö0)ŽG'«nñg¶ßØ¡wu$ßöh—Læ˜^Í‹ƒNÂïYO¬y¡Ès›ØéÜfyÊ+Ìð¹ÐSV¶U-÷­|vÅÈv0ÉȶßÐj_´)£$üD!„|ÉŠü%Ÿ‘‹{‚ã8¬›°/bRó«½7ñÚÖÕHy%ïrd²Æu-ªŽÁîÉ‘òî$ÚõöʼnË›” …<o‚®ª­?|ý8” ptÌ \Ž„\žŽ˜÷/pþø^Œ÷ì¨ZÏkÅ ˆ8ë½×ãùǤľÆÚ‰›ÁqB ]>¬ÀâÄ·=ÚÆ%«ow¬; 2ƒuÝépkwµ”)Òõ ŽïÄÀ¶½p%¡~X}=³¼\åYÖ°ðèM¤Èåˆ ¹ŠÉƒÖhÕÇÚ”A!„âUà߃™ÛË>™Ï>Ú{LÇáEÌÚxSUô³¸3PcÙË&wÇèµa˜‡{¶2sÓxÌ2Ôoƒ »cõ´1˜þ1 NS KT­å—*Õ²$¤Cpþ =–®ß ßðAšSkGÔnàž>[TëÙÖ›€S[­±h½?z4Û‡TÀ¹Z=ÌÞ<CÜm ,Ž|Û£K\2YU÷…‡ùA\ÎøŠ¤Ž?6Õª•«Ô€@dS ”vª€º='`îõ¿äã{h3R¦-éE#qlŽŽ•ÜÐgâvœ›ÚŸwkS!„BŠï·ÈÎjõp')‚ý<ÑyɈ$•q÷Î1 8 !„B´Ê?‹\@!ûzÉÓâqùªò»;»L]FÉ%!„B „ˆBðuÚÙ¦–¼•ÂȬ4úÿ¸ ºRP!„B &Ñ݈s×0‚Â@!„B@·È !„B%˜„B!DÙ-òJ•«S´¡ü"ñÏßÔÿ’cóµí/ʼnâG}A}Añ¢XÉ1Ó» ¿®òùßsÿÒcóµí/ʼnâG}A}Añ¢X 1ãƒn‘B!„E &!„B¡“B!„P‚I!„B(Á$„B!„LB!„RÌJÄŸŠV¿..Ç¥bé•[èec¤Z8²-F¾‡ûZ\ùµjyrôqÔlò#„bܺ!W7Ðùûœô<õ5êÕé©\Ðgî^AyCá·ŸšúQ×~þ|»’>^2ÛŸ•¡Äå*×B÷Aã0¶GB‰am[\¢\ÀÆqùæC¼ÿ™@ +ÛÒp®T¿nÿE¯ÆØ—:Çeî'0‚ßõ«ð03ÈöyZüÔm0) öEÏñºûB±¬Ë£EGOÌú_”r:•ûúä:ŒùùWô"æz{¡y£F¨R­šv„M¿?,ñƒ\—¾ü|¼ñí W7Ôi=òÌ‹%LŽ­ÂÅÕ ¦/±0²jŸqb¾=F×fªö¹JõzhÚ®'¦­ôG¼œe‹InñÑfüÚ‘}»£v­Ú¨Z«ºñÅåðd½ŠÓßÓ”óK·å# Êã&ȼ–Êþ÷¹™mùÇG áâꆚMfòc™ÿæŸG×áÛÖÍPµZm4éÐkÜÕyìkšôÅÈ•½¡K1ã盪e×—Ì‚T®@ß•ÃrÜæÕEŒê×µkÖF•õÑ¡ï÷ØðJõùõáâꆷ£³mu{6\\ÝP«Ù¼yNøœØDy‘F–ªóaŒåzìë:çjš34Í9Åí¶4 0ÐgN_½Èø´<×ç3Gò™‹ êÜ6ƒgáVz}ì?} A·Ï`t8¬šâ ßã¯õ.>Ïö¬…‚1T«¼zéý}0¦Àª=Ïyïsü³ChÓ}ŽÞãÇÍðàá [?)——èä² úò»Ÿ÷¡KHß÷ åv/OÆ¡·R˜”í‚Kº—ˆx¤|ø'ã„S7Ûò 'M±jçܾwn_À²Qn8²ezÏ ÌvÅ-·«oÚŒŸ!ëŸàûe~¸uû¶Ok‚ k'1¾ÿ ½ŠÓ®çÊ_X9›å¹Þ¨9 Oe[~i±òÊFµqÚ_YÓŸÈ«ËÐsÆDØvÅɯáœÿOH8èﱟӼ WjLFo{c¼<ê‹ÇÉ2È’ŸâÇ^£”COL«a¥¶~Ô­õè0z1î+šàhÀ5ܽtÍ„cºaõ-eB9zªòYäó ÏdÛöŸ…€º¾#Jä9ásiRå/ âR5t#yûºŽ;>s†6õ‡ucšžžôø¡ýÑ´~]¸7ïŒaçâÈ¥ìç_¾s$Ÿ¹¸°Îs_e‚ }Ú:ößû¨œÀÿQ>cø}óqà8Ê ýã=åó˜Žmñ*— †zÎÖÈú:ÌΉۢ`˜³q"ªØ›B$±Bß™k”W6~Ò·[‹ +ö<'0À¬ÞåÎ}¦C,àð|Ï0žû¼{Ü*ÄÈäºk5:Ô)¡vë`Ò2½™¿á}þó¹‚êKÐK­€£çæŽCH\(FÏ €Ð° Ö\ ¡žJL†°'W1cˆrŸ[ùLËö±ç‚èîQf1DFfhÚGyåæõ©•¼Š×füLÝ9îÎÖ‰$hÒïG@âûÃz®W)r@Y /Ê9¶˜ŠbC~ÁýŒ[ˆò´p,¼ N ÂÌïÊi]·¦ølŸ~Œ1Œ_;­$XUÀ¤µcó=ösšô ‡ÉË;A.‹Á”Õ÷qwõtÄÈäè¼lBŽk2Æ0~7*YK ±tƤucÁ˜»¦ì8u˜ ‘¯ÀãdeÿÉ’ãçÇ1Š,°¨C™xNÈ~~HŒ~‰³ç*÷™\(ó£.e–´sNNOÜ‚?7ÏF{÷J0p`Œ!6ü.ÿ}Ó¼ºaüž­÷W—¹X_ǧ¨¤tdÅ¡MÿçÞ æa‰ÝI00©ƒF¶nhff€Ë‘ Ÿ„'~Êm=²¯r»X©-ó—˜Ð°žÚg©q—õ*.Ò·;— Kש¨]Jœñ[j-øºXà§àKØ&Ř2&÷y÷©òŠŒ‹y‰šÞ"/Œ¾4²i†ßÖ@óï÷¢W¯þHJ–aĶ=hfm¤·qʉ)ÊV®‰ÉËÆa\ŠŸ®nÄ=ªÅpæê}¼‹ŽCº\¡úLžòœ_‚©ÅøùÎVò)q)¯<1…L¯âVÞHˆgÉ2¼I•£’Qî)'4Ç’ÞÎè·7‹Ž¼ÂÁÁ•qe1be XTœ€:Ǥ64Åçpd ‡Í§õ$6],ÊרÏi^Ð7v ç å_Ø? #ËVXÔÐ.Çu„'©Å33NIá‡ø@hè„lá}9 N¼¿g¼:¾) †ÒMfÃ)㌒tNÈm.”X7¿oB?×ñ-³¤srSµµ'6¶ö„<-¡ãÖÕl߸¯Sä8¿f!0dïýÕu.Ö×ñYbLÓrcPJø+>>Ú‡äè7ø(“ÃÚy esތľÈ$Üx¡Ø?”5倞¯â2–]|xe ôû«~n/?ˆ ^×eê“ì²»³ÆCã>© º/cß(o7˜! IxöüСÄ%âY-ïã¿— hëó ü4‡©Àdp©R[õÜUAsÙ¯J飡Í0çÑGì•€9U,ò\·¦·/„û¾Çã›ÁËqâç[€ú3ºk|´û%b^àD˜½Àç&œE€«f ¿_â1§Ð~®Ûxþ„Më‚}æ4-‘焬Ç>“§âݳ{Xå; '_ÁÊG1˜]˪P÷«$ƪ  ÌP¥vCT©Ý=ŒÐ çVÈ’‚´*C×¹X_c^bn‘ DVYºRã®àïþ”ëS Pe€òÖð?œA`\*Ì+Ï×× t,ا×1aòÌ»ðB± þ z zF%4ø‚ƒ.ÁV,DØ…ÅÊ5' Cœ”W9·=‹ÿ¢ú‚ìË„W'ÐÿçKWÇñý‡QÇÄ—– Ãá— %:Fþ¯•¿Y¯ÙN9¡H|w —‰Œû*ÆOç¥Ã ä8ü1ÕšsL¯f‰ä'á÷ì*Ö¼Œ‡Pd‰¹Mì ¥m½ì”WäN|øôâOrôŸ%vÓV™v?ÃÝÔ¦u±¢­c®ëõÍxÛùx´zœŒz«–™9VæFHŽ:wãxt2Œ,Z`¼³i‰%'4D×Xê¿&BŽùl+ô1·L¾sFnsŽ>³¬6R97˜6Ôjµ™‹K±^¢þ’OÛ¾Êç™~Zûв…=À¦òÍØ'›—ªŽmœ¯z†¯‡RBŽŽ™ËÁ‘ËÓóþÎß‹ñžõ&Ñ÷—âuŠ6õ¦ÃZ$PKÈgÕ³<å5Ýÿ ùŠÍ†‰0 °{¸Î>xƒt¹ ^=†¡$+¨¾T¤Gâý Q®@×å«áTÊkWt…Bž„ùý§ "]QbcäYV9ñ-¼V ‚ˆã°Þ{=žLAJìk¬¸'ÄÐåò§|ïª<±_­¼h1æÙNŽ%=–"c7üXÓ ñ¯ö`Mpl¡îß2ùιÍ9ú i×aX²~.Þx„ð˜È@jBÎî] ÌY|§hµ¿ÚÌÅ%áX/Q f¹qqi%h¯üM^bÓ"!dRåoß7Íß•‹ªCpþà tª‘ßPÍ­Úö‹}_¡£Ï½‰ÇÙ…íf4Êñó&3Z×X–yeOœ;¾ß~#Ç<¯^ps«‡îß/×pZ‰N0 ª/ûÁÅèX¸ Á²vÊÿ[/€Wes$¸Œþ¾GKlŒ|m†g«Ú8·h$jÕh€¾“6¡ÖÄí9®»lrwØ›b˜‡{¶g¼¾Äñã>ü'\<¸ ¹§˜2ø;Ôv«ƒºM»à‡ùÛðVì’m]«ê¾ð07DbÆÕìŽ?6-´vÙ{LÇáE£`y7@ë>S!é½¶ÄÎc…ŶÞœÚ:5—УYÔnÚdU1{ó˜”ñÇ;2Uêÿ# ÒâÒÀ 1¯Å/.–­g+Ï{'î*Ôýâ[&ß9#·9GÔ/gˆÿNÀ´¼ÐºiST«^ õ[õƆsɘ±ú7¬îSA«ýÕf.. ã“ÀcJ¥055Íõ™­À€³>ÊÏB‚tª¨Råê:oû¥ 8‹£'ªÅøKÍ×¶¿§¯;~Á~žè¼äD’ʸ{çŒõeŠÅú‹‰™¦<0óûR£¢£`gkW²®`Bˆ>’§ÅãòUåw+v™ºì«L. !$+…€Bt·³M#,y+…‘Yiôÿq7t¥ B(Á¤BˆîFœ»ööî;<Šêmãøw³©@ šHU@ÁŸREQT@šô®/Eš¥)(MDŠ AQŠ‚" ÒEQ©R¥÷š@€$¤gÞ?V" )»É&Ù$÷çºöR&gfΜçœ3ÏÎÎÎÒ]Í ">"%˜""""¢SDDDDrˆ ½sǶMjqµú‚ÚIí§XˆÚKm­Ó>²âÏ=©mt¼j'µŸ(j/µµ8p‚™ÔÜ%çµú‚ÚIí§XˆÚKm½éL±+›®`ú/˜©û$˜Ýz Pk‰ˆˆˆˆýLý¼ˆˆˆˆXC÷`ŠˆˆˆˆLQ‚)""""J0EDDDD”`ŠˆˆˆˆLÉNìþS‘Ç·¯bî’5üuè7ïÜÃì– o_J–.ËÒùÓ³E£•õ« è'¦DDDDÒ=ÁÜ8¹ý>ÿ'Úfḙøñ$äæþù«¿^¢ÖQ‚i½À}Óè÷ùïøÖŠ÷»Ç-÷ò-Aýæ%¨ß¼ƒZ[DDD$°Û=˜?Œþ€W'¶¶zë»×ЯskjV«Ž_Å<ûrW>ýþÐCåÎo_N¯¶-¨öX5ÊWy’&mú²dÛù‡Ê•õ«LY¿Êì^>æÏÖ¥B¥'¨ß¬ ‹wœaù´‘4®ó4å+=A£–}Ùx.8Uõ¹ÿñøƒûKøïؘ >ÛÚ5kP®|UÆ5xв~•ò×xÛºuä}ÊúUæ±Ú£ÔEDDD fBË.†Ð¦hn«Êß:ü9:½ËÞ¨'Yöó¯Ý÷ ½«ßaúÐv [s!®\ÀÞÙ4é=‘ƒ±µùvÛøu%õ9Ê{}š3co`¢Ûögü×oã—E¹rbz6gþ¥Š,ß´“Ÿtàüá_y»Ó´TÕçÁû.O8’è}˜ëfCÍnãùuÏ^N?H¯1µØñþÆxå~¸€ŠoöPO%˜ ]Šˆ ˆ«9ÞòûWõ^í[4pá±c>HùBž8{xÓfÔ'lø`Òå†.!Ú0è7ke xà‘¿$ƒf½aİxè‰Öeüøvôp¦Ø“ÿ}T?z|[ z8óh­~˜M&¾·Žµõ±†Ñ±+5Jà~K}f<¥=œ¹}òcÞ‹ &òïÄäą̈WUO‘lÃê{0wlÛïßÝz àôÉ£qÿ.ánætX4gÃc(ïñ_’yÿ ߃É%Àò+¡ôªÆCûЏ³3îÿ¿¹v€W}<â–ylLàÞµ•À‡Ö¯›×Í’=›½â–Õÿw™ÉÉXÀˆLU}¬ñ’·{¼›Ìùø°uIÚ.9Å„ÕçYÑ© ןÈíèX¼J÷§zn—xåË”«„ÿ‚™ê"""â0æ~vI0ïoø¾„;è\2/cÝÂÿX“ž(˜â¶L&Ë·>H±W=ÓÊlJä@XfFºÖÇ9‘ý?6`æ¥}9öé<è4•µ“öðäÈæ•=}òh¼¶ÉL¶^ø²ù[äIe®/MîÈø—g±aÈFlš„—9ùOß_/š›9‚™âã«x'Y®Má\,¼šÀ0:Ê@Xà:rnm·†³¶>–dÔ”h’š×|uQ1?®ÇÿtK>9w³s~ÆÖöµ©EDDDÝîÁôªÐ‡/7%üÊz·ÆÚ‡¸}/‚ؘ.ÝõPùn³ß$·Ù‰oûŒdç‰ÄÄDtõ,[Ö,¡_»âÊõ˜Ög“‰ÙfsæV8á·/0sà‹+çS£?ç`Âìå¼Ro)¸R²b FÏEçšíVwkë0ep zÏü‘®ukÖÿ¢w¥aÔÍ·‚ÿ>"é…wꨊˆˆH¶c Ã0 ÁÓÓ3ÉdiǶM6ÝÜ)‰;áߎ¦ÂÙ£ö‡»“I""""-¥<°¬_e à 0__û}D.)‹‰¼ËÎ]–gw¾ôö%—"""’-9« 2Æ¢FOóá¥Üó¡ý;_ðþë~jQ‚)©×}ótW3ˆˆˆˆÌ´Kø€vIõ<÷ÿk¾[êí <lÌç2ä f÷Þe‘ bÆC_Èòöh›·c2™, ¦œ3ò@³ªÔ"""’ À¤fpuë<Í«¯¾JÞ|ùúÛÝ;AܸšµÌ€C[ùtÑ vî9ÌÕ›wˆvrÁÛ§%˔㫅§ûþËúUàÔ‰#vY7àÔ~6lø‰õ7²çd@ª·mïcºô÷V¾^½Žíìãìå›Ä8ç¢dùê¼ÚùÿèÝì±L‰ýýz&å~ý¡M%ýãìˆ}Tìçs»×³xùZ~ýó —o†`vÏÃ#¥ÊSÿ…V îÕ '% Ù!ÎñóÊ(¦uxŽ]ÕßãïÏßÔî@n\Ms"é æÿwèµ{\r™œëŒ¢N絘Ý)X¬u_xwÞjG^³e÷/ÝŸ8¶“ïæ‹wÅÉã8ôí,Þ½‚ãWïâýh%Úõž£ƒorÊ@TÈAQ•L ô¿'ç\j‹l$ôòÏ´ò#ü°žÒîf5ˆƒHËÏ?f‰sñ™»t,™×ªò[×{2}Ñ74¨Qž\¦0þü~*]ÞÀþEùyò3ñÊ®›ý 5»§çøÜïÒ7vM¡åÈ/)P½ëW  טþF—ÝÉþ˜3 w¯g5âD}T2A,·¯žæëioP±õX5I6q‘ÿk=’ç'­¥ù£yÔ ó^.ã.#gZ‚y><€ânÖ½«i÷ÞÈþåBׯÁ»ßraãG Á4:v¥F÷xËŽXaô›ÙŸÒÞ@)Í|ÿzrd'Û½xÝ>³ÜCÓ|Ì L­KR7ë&ðìÅÖ8;RûÇ9a¹\…jóѰ§Ô€Ù$γzvæN³©Œ{ñ5–1RñËÔ&¥™–`–p7s:,š‹1”IáÒyä#LŸ8‡_väJà¢bbÿ{—~æ¡ò/y»?´lÕ{¼RÐ#n™GÁf@ÎK0ÿü|§lœxyø|>hš¹€ÉœÁ–8;ZûÇùÔ‰#MÀÅã,™:„OþNÝ¿á÷åÔˆÙ ÎË#šò먆j(túäQ«Ë¦åãôL{Ðz—Ò–Æ—N±ìÔ×z°pÍvÊuÃö¿vsêÄNÿ;ÉlÜY7'é÷ùƒy}òzÀ‰ö¾æ£O«QD}T2‡“3>%*3pÚ\nþ=Gm’MÜ<°˜Jå+SÖ/þë¾”w$Ù`xgÖŽ›NîŠÙd⇷ý‰IáŠíò !LëÙ_OËÕÉÐ+ߨ´¿V¾–+—ko†Å- \—£‚½sÞ@:Oû ““3'­â½×*iˆú¨8€û_òñTSd§NIôõàßE fºðòëÁ²-9þ9ÍÍ`ÿ™DÅÆzû»7­fX—fqeÛ·Ü üþ·{‰áÆÉ] îø‰Mûë9±%&“‰Yýgs6(œ° sÌ07ÇzÛì~t¾ ““+]'¯bì«~êý¢>*®q§·ùjÃ..Ý &&6†›2sh_ï2A $’MdêƒÖkvû€í5ñ©ÿ*†vz•«·îãäJ>oÊ”¯WnØÊy„ŸÂÆ =ùnŒ3EËTæµ Ùüv{«÷U¨îVMðàÝOWðB­¥x?R6}fÂþ×í~\ /ý§åׂì¥çÌ­±‘ø{ÿa¿ÛtdŽØ¦¢>*¶›×·6ó—Ìcö˜#ÜÄ=o~Ê”Œ¡“ß§Ï«5Õ@"J0í÷j#Æ}Ü(Ù2n^Õ™ðÙW}çÿ^9bÓ ¨Úkùáµñ– z-õ'­¤ö—Ù'ÂÄöïˆ'g[ê¤ä"ë²éK’íã\¦Î+L®óŠ,›ÇYã\œÔ""""¢SDDDD”`ŠˆˆˆˆL%˜""""¢SDDDD²‘ }LQZ~ÓÒ8jý³R»fõ> г(Ί³8ºú žË9 ¦É”µ ÜQ럕Ú5«÷QœEqVœ%+p„çfX‚i†"."""’ÎNŸ<šéuÐ=˜""""¢SDDDD”`ŠˆˆˆˆL%˜""""¢SDDDD”`ÚÙ¡õ hß´.Å|¼p1;ãžÛ‹âe+Ó°Y›xåšx{`2™X|ý^¼å›–Àd2Q¬þšxËï]_ŒÉdÂÙ­wcÿ1I׎þƬñoQ¯JQL&“Ã<ì䎯é×áEÊõÆÕlÆÃÓ›Š50xÒRBcÓ§]C.l¦{Ó§ÈŸË×\ùyªiw6_ µûúŽ\î~Hê•QmœÖX(Î9;Îi׬Îýù=#û¶åq¿bärsÆ-w~ªÔjÊ”å)ÎpŽ±Ç±øf2Ï=Q–\.fÜóúRÿÕ7ùíZXªÊÙRŸì8ž…a†lÆ©G}-šÿ‰aF’On½ûûHÌʡπQ»÷$cß™ëFdt„qóò còYFÛúeã•ý©EI0žùêT¼å­}r€ážÿ¹xËO}õŒ>ÕçYAáJuŒc?1~=rÅ’m·ŒT®~;cöòÆÉ+·ŒÈ˜(#àì~ctËÒ`”m»Üîû‹ =b<‘×Õðòëf¾lܽvØèêçe¸æ­a»e·õ½\jû€5ëÙ»®Š³âœ^óšµóO‰'›?]n8uÙˆˆŽ1n_uâÈC9Û´ÉïÙœÇÝÏᢢ"SÌï×ÿFÀûÇ“y æµß†€Q¤Þ«põ÷v`~ê¿I%êÞqÃl2ÅgOpdÜß¾~ª°Vœ6²GJ0ïèG À0»øØ}Û»‡W5£÷þ€¸e7öõ2£úˆ=v[ßÑË¥çDeïº*ΊsFÎkÖÎ?‘!û ÀpózFqNçsLZ·×Î×r¡hsPxܲð Í`T}û/›ËY[Ÿì:žs|‚ùqå` ÿç–•“ÊaÃl2®ž5â–îm†K0:î½÷·šž®uD%˜vJ0ï3ÃÙ£´Ý·Ý»H0~»·,âÎN0òéc·õ½\zNTö®«â¬8gh‚iåüvÒ ““»âìà ¦›“åBQDì c# ÀÈ]¸›Í嬭OvÏŽ`fê=˜Ÿž¹ @Ïy­*2Ý å&2x/?Ü àŒÿ.Ì|€=Ÿ üÖ:öG’˧ ½Üt·­ÝÄrëâa¦ö|€j=æÚ}?Ü´ÜKS%·KÜ2—ÜU»õƒÝÖwôréÉêª8çŒ8gæü³íýxh¡8goOœœœñ,PŒ:M_gѦ3V­÷DW~»·,âîoÿžÏ´¹œµõÉÎã9GÉç\x4ÅÝÌÉÞ$û î¯`îŸ7øiõF¾0“ÉÄ• køëS}e€rB»ÞÄm¦À£1ê«ä)Ö˜%“Ú}?7¢bÈcþ/ö&sËé%ò†ÝÖwôr)Ý4žÒxIn¥W]gÅÙQæŸ_gt¢É‡{è0k’âœÎÊÖkˬeØsú‘‘¡ìÿi>¾'~¤çó~ô[u.ÅõçŽ~€ÞoÌæâ"î\dö½-Çds9kë“ÇsŽN0Ëx8p",:á·Ž°\1~X…8<ý Fì=f^Á-o-ž-Rƒ&ùݹ:;1§ ùÐJÊ íÄ0 Œ˜H®žÜÍ;-Ërù5™g÷ýøºXºeðßü7¢ƒ-ÖÕ×në;z¹„ã!á+#Ú8­±Pœç̘¶MkÏ3ƒ—aàDÇ©›Xж”âœÎ,ßöÒ¾ùpvv£lÍ—Xºc:†â¾S\¿ÚÐ ü£æó]ŒŸÎ[= ­YßÑË%ÕRêÖö{“â¬8§e^Kêx¬liÇœçô:ÇœØö•ñFÛçÒ…½ g“ÉðÈëcÔlÔÚ˜ûã?VÏ_K'u+=b¸šÍFþbåׇÌ0®GƤªœµõÉ®qv„ÓôïBBBðôôäÔ‰#‰^æÜ±mÝz àôÉ£6]ݱmÝ{LóÍ­""""’²Ó'R¦\¥x9ÛšïV3äíÑ6åq÷s¸¨¨H–øÏM6,ëWÃ0 À×Ç×1~‹\DDDD²%˜""""¢SDDDD”`ŠˆˆˆˆL%˜""""¢SDDDD²çŒÚQPPZ[DDD$ÐLQ‚)""""J0EDDDD ¦ˆˆˆˆˆLQ‚)""""J0íìè/_ҳ͋T*Wß‚>)V’*5jñr»nñʵ*]ooo¾ ‹·|s›ªx{{Sé¥ã- ø ooo| W 8Æpø`Ü8þ'ó'¢iíŠx{{ãíí#ëu‰½¬uè»OxµA Šú¤È£~¼Ôi(ÞOU9[êzi;ýÛÝ:Ðø™'y$¿mglÏÞ hùûïeJ‹G“]ÿ£au©?f3ƒ†,díG=)H ‡ ²LGQ·m.gm}£bÈýÀý¾÷¯ ÄFÆ-³¶\Rã!á¸HêïÉ£ôª«-Òºm{Cf•Ëîq¶—„Ç™»Hæ«—dù]sûÒêã´žyqvv£ôãÏóÙ1Œ–™âúUú­äÛ©o‘ÿÐ\j”)F‰JõøúriË;*·Gm.gm} ºX†SH̃ßd ± 4ׂ6—K8Òrã|BéU×ô¨CFCf•Ëîq¶—[·nq+ð:ÿìÙÌæ¥½º—[ù'Zvçìž4{w%N´yï;>yµ„âìàó¶­ë§Ô¾ïû<+ŽQµçtŽœ»ÊÕóǘѻAǾ¡qßïsÄxÎÑ fŸ²ù˜{ÈúFÏ[r0yÌNþ=Ÿ{7¾$0*†¼e,ƒt­ŸØè`^ eÁߘ]}Z2Ÿ2¶l —o+"no±ª|ƒcøåÃ\ äÚ¥3lZþ¦e;EÚ¥ªœ5õi’߀£÷þû¢YTØQܽšØ\Φo"Xr[fÕ55uHëúŽ^.»ÇÙ¾g,|K?ÎðÏ,_êÜ;ù¡"Û?éF‹1ßfº~²‰yýžqˆ~ãqvôyÛæõ“é#Öà‹÷;Q$Á—|Î=ðe ì<žst‚ùÊœ>8™L¬íõ.AѱVÎ/>ô{$··²öû•–+¡ªP©{Ö­úžÍAä÷™%O$) »¹7¯gã–Ùò\± k¦Pwt+»”K¬>]Ú”àëswã–Ý=cyTVɶm.—ž¡®Ön;©8Ûû2«\v³µl{N åÔe2Ç¿€°uzg^¿““ =go壎Õ¦ß8Bœ³Ú¼ØúÖöSr§~“SŽÏ9:Áô®2„oG·"üÒjþ׸'+·î#(4‚ØèÎÜžäzM;Y>Æ|wò7. €o™nyAå!Ï(3Ë‚žx¡ s¿ÚÀÉË7‰ŠáúÉßôÊ(L&'ÚOûЪm4êùž¸NTt‡¶øÓzÄø<Þ›…-JÚ\ÎÚú<6â3ªävemñ%4à8ã{þ€kîÇX0ü1›Ë¥'G¨kZ·mïcȬrÙ=Îiõd‹Þø¯ÝÎ…€»ÄÄFpîo¦ôi@;³âÊý2åuZMX‡ÉɾŸncrûÊÕo!ÎŽY¯•£[pzóBÚ6ªI1_®+'}ë1íë?øè•VmcZ“<ŒïÒˆâEáåþsyºç{ìÜønN¶—³¶>ΕX¿ó+š?J“ª¥(Uµ GmÊòßÖSÁÃÙær ÛÚž¿‘^uM:dÔ1dV¹ìç´Î_ nÀÞo¦òÂS•ðõ)Âã Û²éVÆÌùžÇÔŽ+×vÒŒØæö­“d;æä8§ç\žÖyÛÚõ­íÍ?ÛÂÇC:alžÄãe‹Q´t5>ü%†Žƒ§³å³æÙ~<;`†AHHžžžœ:q$Ñ‚;¶m¢[¯œ>yÔ¦ìØ¶‰î½¦ùæVIÙ­À«”)W)^ζæ»Õ y{´MyÜý.**’%þs“ÍËúUÆ0 ðõñuŒß"‘ìC ¦ˆˆˆˆ(ÁÇå¬&ÉvlÛ¤SDDDDìÃdʸgƒ+ÁÉvîØœaûÒ=˜""""bWv3þüjm‘tv+ðj¦×AW0EDDDD ¦ˆˆˆˆ(Á%˜"""""J0EDDDD ¦ˆˆˆˆ(Á´³Cëоi]ŠùxábvÆ=·ÅËV¦a³6ñÊ™L¦x/g·\+W£>#8ÆÈ ¹°™îMŸ".W\så穦ÝÙ|14ÃöíèoÌÿõªkç¤ÄF]gÆ×)_Ìgg7JTmÀä¯÷8D;X»¾#—KØß¾2ªÓ³O*Ί³â¬8+ÎY'G°•a†lÆ©G}-šÿ‰aF’On½ûûHÌʡπQ»÷$cß™ëFdt„qóò còYFÛúeã•ØV¬qûÊ?ƇmË€Q¥ÏÏFVzÄx"¯«áå×Í8|-ظ{í°ÑÕÏËpÍ[Ã8v/*CêP¸RcÀØOŒ_\IÐÞ ÄÜ3Þ¬éc8{”1>ûé€q/2Ò¸tx‡1¼]ÍLok×wôrɶ2¬YÏÞuUœgÅYqVœ'ΧNy(g›6ù=cçŽÍ©zEEE¦˜Þ¯ÿ€÷'óÌk¿ 5£H½)©@Äíí`¸æy"Ë'˜»‡W5£÷þ€¸e7öõ2£úˆ=^Ÿä:üé¯[€Ñxñ ‡kk×wôré9QÙ»®Š³â¬8+Ί³ãÄ9Ç'˜W.`Æðn¥>±`˜œÜ²|‚Ù»H0~»ñ_}g§yŠôq¨sBi/0¶Ýw¸v°v}G/—ž•½ëª8+Ί³â¬8;Nœ!ÁÌÔ{0?=s€ž%ò¦zwÀÕóÉ,ÿå7è’Û%n™Kî*„ÝúÁ¡êúÅUË=“›=MAOÌÎî¯ø4#>ý9ÓÛÁÚõ½œ#ôµô¬«â¬8+Ί³âœ~qÎÑ_ò9 @q7s²7É&që(Á×OðqŸ^Tî9)Ë'˜7¢bÈcþï˜Mæ<–/ÔDÞp¨ºžý7v'yýƒ <ÉÀêLþ¿&¼4ý`¦¶ƒµë;z¹”nOi¼$7ŽÒ«®Š³â¬8+Ί³cÄ9G'˜e<œ-IJXtÂoa¹bœ8KÃ;‘·pyF~sŠ\¾Ù>¹v–O0}],áxðñFt°%P®¾U×üΖº.˜×Ÿâ^î¸{§ÿ¼lÿf¦¶ƒµë;z¹„ã!á+#Ú8=û¤â¬8+Ί³âœ~qÎÑ æ?/>>hÓz†aƹƒ[èX½÷nüÂ;{²|‚Ù¬€‡B£â–EÝ;€‡w3‡ªkSowêäu‹[æ–·‘!{3µ¬]ßÑËÙ2›À’›Ø2«®Š³â¬8+ΊsÆÄ9G'˜mÄÉdbU‡!ÜŠ¶í’®ÉìN‰ÇžeѯÉëìÄ—¯gýÈ{w, À—gîÄ-»sê JwêåPu}³C)~»·,âîo–Ž^ðÕ i‡¤n¡°v}G/ç}-=ëª8+Ί³â¬8§_œA¦}‹Ü0 có‡ g“É(øDcéO7ƒÃŒ˜¨0ãô¾_úVI|ËjáÓ… Às00K‹<*ô Q-«áU¾»qäz°|ýˆÑÍÏËpÍSÝ8•áõ!™oµE…4÷t5ʶŸf\¸n„ß¾`Lk_Ö0™LFßÕg3¤’ªŸµë;z9Òõyjö­«â¬8+Ί³âì8qÎñ)ºïÂÎFïÖÏ¥ {®f'ÃÙÅÍð.T̨ú¿úF»žS Àõ¿ú€á]qd–TÑÝ3.Ï×4ò¹;ÎîùŒšÏw1~:œ)‰eÂWB!·=›×2 äv5œœ=Œ274&}s ÃÚ!¹im;:r¹¤âÒDdígïcRœgÅYqVœ#ÎŽ`šþ]@HHžžžœ:q$ÑËœ;¶m¢[¯œ>yԦˣ;¶m¢{ïi¾¹UDDDDRvúäQÊ”«/g[óÝjž®U'UÛ{ªV=–øÏM6,ëWÃ0 À×Ç×1~‹\DDDD²%˜""""¢SDDDD”`ŠˆˆˆˆL%˜""""¢SDDDD²çŒÚQPPZ[DDD$ÐLQ‚)""""J0EDDDD ¦ˆˆˆˆˆLQ‚)""""J0íìè/_ҳ͋T*Wß‚>)V’*5jñr»nñʵ*]ooo¾ ‹·|s›ªx{{Sé¥ã- ø ooo| W 8Æpø`Ü8þ'ó'¢iíŠx{{ãíí#ëeý…^ÚNÿ6ÏQªh! -Åsmú³ýò½,Uîþ±'õJ+{SzÖAqκqNëx>ýû·¼Ýë5jV,M¡‚)R¼4O=Ûœwf¬à^¬¡8ÛP‡ôžË5žg<+Á¾ÓŠºmßâR±øzÓn._¿Ìѽ›ùddw †ŠW¶_­B,ßq-Þò%ntla¼å×v, ùQxšMŸ`Öï:޳”`Œÿ¶]¯´î/:ì8Íê´eÝÙŠløû §ÿÞ@…³ëh[»'ã³L¹ûnݺ•è+)ÖLdéU×ôˆ“✵ãœÖñÜîƒõø½ø+¶íãÒkþm-¯@Ï)‡³L¹ôäuMë¶ç¬ç´ŽçÝëÒ³eCJòÂÅÉ™>ưy_p~ÝÅÙ†:¤ç\®ñìXã9)uê5´ùU·~£¬—`®zë+Ë;ÔO:YUÞ»ÊPÌ&·ÏŽ[v÷Ülb —Ü.Ì;u'îo³ß`Pƒ"HÎñå×çh_Ò3nYÞRí8³üË,S.+µQzÖAqÎÚqN&Ë'R&sÅ9›ÔAãÙþã9)§Oµúå¿`fÖ¼‚¹è\0Š{ZUÞÙ£|rr€A–w°Ëv[²òI– {ÿâ3–«™A?±?$‚¯P?Ÿ›²®dcåŠvÅ\.qË\rU üöÆ,S.+µQzÖAqÎÚq¶¯X‚.cÖ€Téô‘âœMê ñlÿñœÙœ3sç",÷ s5Ç¿R™à>„ï[èøR1–øŸ`ÑÞ^xî6ÿpÉr•ò¹·Ùnú‰k›Öÿ#pßç<Ò´2®&0*€ÜÜwk2ç¶œž"³L¹¤ÆCÂq‘Ôß“GéU×ôˆ“✵ãl/ 3w‘ÌWOqvøi<;ÞxÎl™z³¤»%¿=àÙän†-×÷YŽÍ9‚Æü«¡¸y>I½BÕièåJèuîÆ™s €ú—WÆ•Ãt±tëž`D‡X:¼kÁ,S.áx°öfñÌh£ô¬ƒâœµãl/·nÝâVàuþÙ³™!ÍKzu/·òWœ$~ÏŽ7žst‚Ù§l>æ²¾Ñó–L³ÏçÞ/ ŒŠ!o™^t­ŸØè`^ eÁߘ]}Z2Ÿ2®¦I~wŽÞûï _QaGp÷j’eÊÙtâMdKnbˬº¦¦ŠsÖŽ³}ÏX.ø–~œáŸY¾ä¸w²âì ñÓxv¼ñœ’±ãÞ§¬_å‡^cǽŸõÌWæôÁÉdbm¯w ŠŽµr~ñ¡ß#yˆ¸½•µß¯´\ íT€JÝ˰nÕ÷lŠ ¿ßÈ,ñx"I¤ëÐ¥MI¾>w7nÙÝ3–GV•lÛ9Ë”KOŽPWk·­8gí8§u<'wê2™ó)ÎY¬Ï7žS2fô(5z6Þ²FžeÌèQY?Áô®2„oG·"üÒjþ׸'+·î#(4‚ØèÎÜžäzM;•àÝÉGhܸ(¾uZpdú»TòŒ²°è±ŸQ%·+k{Œçx@(¡Çßó\s?Æ‚áe™rY©Ò³ŠsÖŽsZ=Ù¢7þk·s!à.1±Ñœû›)}ÚP³ï,Å9›ÔAãÙ¾ãÙf³™Ó§Q­šå"]µjU™1}f³9ë'˜õßšÏþõ‹hVâ¾ñK£p±’4zíM*?Q›–ú>´NÉv/p;('s.zÎ@.ߎx»˜‰ ¶<žè­,øx¢„ïîå}2º^iÙŸ³G%ÖïüЦÅÒ¤j)JUmÂÑG›²ü·õTðpÎ2å»="½êšuPœ³vœÓ:ž¿Ü€½ßLå…§*áëS„ǶeÓ­ Œ™ó=?Ž©­8ÛX‡ôšË5žk<[ËÃß͡~ýº,ølîv;›Ã0 BBBðôôäÔ‰#‰ܱmÝz àôÉ£6í`ǶMtï=0Í7·ŠˆˆˆHÊn^¥L¹Jñr¶5ß­fÈÛ£mÊãîçpQQ‘,ñŸ›lXÖ¯2†a€¯¯cü¹ˆˆˆˆdJ0EDDDÄ®œÕ""""9ÃŽm›²W‚y+ðª¢*"""’IL¦Œ{tc†$˜†a(ª""""™dàà <"û$˜õ]´‚{sõæ¢\ðö)BÉ2åøjáÇéÖ°©©kzl;³Ž?+KÏØ‰ˆˆ(ÁLG:)ïñ‡Î“×R¼qw&û£J©DÞ½Á¡Ý¿³z©¶nN?~É& ¦£$ª·O|Îë“Öâé×gÆùßߊwÍ_”ZÏ·¦Öó­³u`súñ‹ˆˆHæÉ”{0};‹—Ö£BÅjÔnÒž™«’ß0|11†Aó©Ýã’«äœß¾œ^m[Pí±j”¯ò$MÚôeɶó‰ÖéèÆ/èÙ¦ÕªV£BÕ§iÑy;¯…YU×ûÿŽ â³±ý¨]³åÊWµ©ÖHã°þ»—O§ù³u©Pé ê7ëÂâgX>m$ëS»þÖõžL_ô ûþ>À‘}[™Ò«2«?›@ëQ;lŽ“µ}qb›7YöÓŸôœ¾„ƒGö³ã‡…t{¶?Mï­DDD$#ÌûW¾î[8b7ÆZ IDAT5†aÐofJ{{àá]ŠA3ß°û ¸›9Ų‹†.!Ú0è7ke xà‘¿$ƒf½aİxè•{Ñj–,€³³µÛ¾@èÕU6ÕÏèØ•% `NC=2ëøÆoGAgŠ=Ù=nÙèñm)èáÌ£µúa6™ ø>É}¦vývï¤EÝ*äõpÁÙ=/u^À…Ù'kûâwWC1™LÌ›W³ςũ߼Ÿ|µA3ˆˆˆH"¬¾sǶMñþÝ­×NŸ<úP¹”®,®ºq€W zÄ-ó(Ø ˜`×+ánætX4#b(ãž|’õÍ5K^õy¸N÷®­†Ä+ÿ`9'goKÂmSý^òvOs=2ëøêæu³¿Ù+nYý—™œÜ‰ŒØÈ$÷™šõ#ïaúÄ9ü²ë Wï÷·˜ð3í#¥8YÛ[ÉͲË! lÙ˜Áy)Q²4UkÖ¡K¿<–ß-®\™r•ð_0S³ŠˆˆdKIå~iJ0ïoø>kwYº”΢#·Xv>˜1å½ìºm—x÷4šRµ gSÖ=~³)ùc2 ÃîëO}­þç‚ynÈÇ,ïP_Ow0¢)[¾Z¢åí'€‘+æàüá|6ïú›K7ïræØÎ;À¦-Ø:6Þ˜xpŒˆˆˆd¶^@±ù[äiM,[ùzà5”µ7ÃxÝ7aë¬Z×d2¥˜¸Ü×trWÆ7ÿ˜Þöç5ƒMhîkS8 /‡°&0ŒŽ…â×)WáÔ}ÛÚ–º¦G=2ûøÓÃò !LëÙ˜<ÿPè•oÒ½/ºûÔdôôšŒ¢Boqøïyí©„^ûk×ñ!""’dø—|zNl‰ÉdbVÿÙœ ',è3̵j]¿?êÝy#,Ų^~=X6¢!Ç?§Ù ì?sƒ¨ØBo_c÷¦Õ ëÒ,®liq6™˜=`6gn…~û3ÎÃd2Óej×T§-uMzdöñ§‡vÅóðþ·{‰áÆÉ] îøIº÷Å&]G±rÓn®ÞÅ)W> ä·|¤ž§X+Í """‰°ûs0“z|Ðý{3 ÕÁª ¼ûé ^¨µïG*ЦÏLØÿzŠÛž2¸½gþH׺5ãm3)5»}ÀöøÔC;½ÊÕ[w‰qr%Ÿ·eÊWˆ+çS£?ç`Âìå¼Ro)¸R²b FÏEçšSÕ¶Ö5=ꑙǟ†­œGøð)lœÐ“ïÆ8S´Le^¸Ío·OÕö¬í‹óިâ¥ó˜õÎa®Ý#——/µ›¾Îà±C4ƒˆˆˆ$†a‚§§g’‰ÐŽm›lº¹SDDDD²‡”òÀ²~•1 ƒ€À|}|3çAë""""’})Á%˜""""¢SDDDD”`ŠˆˆˆˆØÎ9£vT¦\%µv&1™L=@ñPÌDñU;Šâ%¶ÆÌáLЯœd†„¿!¯x(f¢øªEñ’´ÄÌúˆ\DDDDìJ ¦ˆˆˆˆ(Á%˜""""¢SDDDDD ¦ˆˆˆˆd2gG©HY¿ÊÉþ=µÏa²v¿n?±eöØ®½¶Sb#©s|û*æ.YÃ_‡NqóÎ=Ìn¹ðöñ¥dé²,?=K“µã柅¯ÓlÊ <6€?W÷IuÛÜß_žb-øsó‡¸9%_ŸO[Õcú¡[<þöw¬ìé—©mY1ÉŠs›5ÇgmÈʱtô:¥$+÷9kÛ=+Ž/gG«’Ç¥Ø8¾“{Ñïóßy¢í`Ž›‰_OBn^áàŸ¿±úë%ÙúØØpFͱôÑþ3_·KÛ„\þž^_táËn’Ýwç™o2ýÙ ž3†ðî_ã®Ï†² kû€¤ÿ9'»½‰ÉîœÕdëýIθoý>ÿßšCXñ~÷¸å^¾%¨ß¼õ›wÈÖÇçät†F‘»H':Ëc—¶©˜Ë…?§öâ÷–›¨Ï-É}ç)Öž®E>fñÕCL=u›Ñ~^šK³ kû€ˆÆW|Yî}öêaÍ(ëW™ê ÇcÜ¿tÃȆOQÖ¯2MÞ^¯üÝSÛ; õŸ~šò«S§iGæ~8Þ;¢/Ã'üÿ„—è¯ÿ1*nyùJ5¨Ó¸%Ã?ZÎݸÊ$¿Ä¶y~ûrzµmAµÇªQ¾Ê“4iÓ—%ÛÎ?ôέ¬_eŽnü‚žmZP­j5*T}š‡±óZX¦Çå~ýbc‚øll?j׬A¹òUÿk·Ýkè×¹55«Uǯb ž}¹+Ÿ~è¡íúv/7¬G…ŠÕ¨Ý¤=3W°ª “Œ—ûµ¥m“ëOãXúà¿nÄ[çÖ‘÷)ëW™ÇjJ×ü0ú;^ØÚ.1³¥_¦ [Ú8±>`£³·Pþ¶in›ûæÒš˜è[ îµ(Ųíß(À–YÇ3}ðP¹ï&Ͳ[Ûyæ]†?åKàÙŒÜt%ù² _ü÷jé™:m‰5óYZbbUÌÿøˆW‡ÏãŠ×‹ü¸ó6õAËú;Ìœfm°v¾Iîüг–ßÿi‰SLÄ>»BÈ•Ï9óo<,ýË·V·TŸGó Ýü{Í›äp˜Ãç¯cB§'>?H긬éçÖö׉mÞdÙOÒsúÙÏŽÒíÙRü4½w¦sJõµõ<˜­ÌûYyÂW\…Í^L^9¢®f6}““wNÑ{Ü6Ìnصâ=¼ÌÿÒoN'(:†.‹gФz \Í.ø–®Î )ËS]¿vï¤EÝ*äõpÁÙ=/u^À…¥j{‹†.!Ú0è7ke xà‘¿$ƒf½aİxè•{Ñj–,€³³µÛ¾@èÕU£cWj”,€ùÁc¸€ðXƒ1Ÿ¤|!Oœ=¼i3ê6|0)®Ü«1 ƒ~3ûSÚÛïR šùFµ1§Ü¶Vî×Ú¶M©?}f<¥=œ¹}òcÞ‹¶œ "¯ñþ@LNÎŒzõÑtÏ¥O@E\ÍÉÆ-¡DcfS¿4[]Ç”ÚØ¶>߯w"häåf·¶è:÷cŠº™ùnÈÿq6<&Éý»y5 òÎo™:‡Ú;kæ³´ÄÄš˜/±‚XÃàÿæ¼e©oR ÓË¡ÎKÖô[ç›ÄTèSÓrÑdÉ1K’wð"b ŒØ¦ýmyudé9þ×Ç/Õç‘ÄÆüƒ.nýŒ&íÇàQ…Y?¬¥gýbYâTRÇeËy;¥þúÝÕPL&óæÆÕlƳ`qê7ïÀ'_mÈ”cNq|Ù¡_¦V–ü’{Áz|=³õû.¡U«öÜ ‹¦û‚/©WÀ=^¹/þ½jÑ«l>»Ô-òΦOœÃ/»r%ðQ1±q‹ ?“ªm~sížåʬGÜ2‚Í€ Ü»¶ÿ î圜½-ƒ*6Úabó’·ûCË–_  ÿS5ú[Äqÿ¿ê†¥-^)øp[<| 3å÷FÖî×Ú¶M©?™Ìùø°uIÚ.9Å„ÕçYÑ© ןÈíèX¼J÷§zn—tO w3§Ã¢9CyóCqK*J,f6õK“õïSSjc›ú@Q–ñXØÅl·¶pÉSÅcŸåùQ›è1ê'¶Lošø[_b£3uµ6vÖÎgi‰‰51_qݲý–”Ëåû*0ÙaÎKÖô[ç›Ää+÷¸;­åö©%Àóìûd?nùêð?ö°wæ~XÚÿSw19¹3 \¾TŸGó÷\9‘v£—“ËïEV.û€Šž.d‰—­çí”úk«"¹Yv9„-3Ø#/%J–¦jÍ:té׃Çògü=º)Õ×ý2Û$˜Öº}Ñri×5;÷¸Çé37á™ÂéºÏ©¯õÀÿ\0Ï ù˜åêãëéF4eËWÃ0ŒŒ™èâ}ir¸¸8'R¥ûŸ n?|b®æôÙ±•æýÚ£m0 óÒ¾ûttšÊÚI{xrdótoûÎ%ó2öØ-ü1鉂iŠ™½c‘ý·€‹×#c¸óP¼SÛ6÷•ný1Ý×ÃÿÇáÌïU;Ñ21Q–{o\ d‰94£æ3kcnrðöJ©Øcž3»¥[áÜ̽²¿î†2ýÐMŠ·ü˜Œ¦íê„ÜÉÇþHòí¦¹4¹1?à½oˆŒ5(ßO׬u]bÇek?O©¿Ž\1çç³y×ß\ºy—3ÇpæØ6m àÀÖ±ÿæ'…úfÈù7 YòaÁç×Ò~Ò¯¸äªÄše«¨žÇ•_§teÕ¹àø'•G,ß$]pú®MÛOêž²å,W°¦õllé¤@è•olÚFBm ç`Mà7冮³¼‹/Üšìàõï{›âN²åZùZÞ‰­½ùp[ÄŸDL±‘Ü~àhbå¬Ý¯Õ œýÉ5_]FTÌOØÍõøŸÞÅ'çîbvÎÏØÚ¾éÿî}rGœL&6 ™¯mRÃÚ~im,¬emHL¼®lº‘mãÄ Åðt‚YÝßI´DÄí-ÿöÚ™:Þ¬µóYZbbU} Yê»îVxܲ{7Ö8àL–|°e¾IîüÐô5Ë­4Ÿnû˜3aÑ´éS–r}Z~I[æPâµ&évY»úCJ{8su×R^z¡/¿]½—¥Ï?¶œ·­áîS“ÑÓç³mןÛÿ++ç³lóÚ÷qeå jéqÌÖ flÔ Þjÿ¡1±4›:ƒGrbæ´fÄÆÜc|û¡\úïäÑeÎ@ò™ø¢Û6ºHTL47ÏaÎ;“݇Ÿ»%Ëßy#þ7±Ú·$ﻇð˜nœÜÅàŽŸØ´„zL눳ÉÄì³9s+œðÛ˜9p&“™.S»f‹³Ûì7ÉmvâÛ>#Ùyâ11Q]=Ë–5Kè×î…¸r='¶Äd21«ÿlÎ…tŽæ>´½×þLÇ®´ÄáÖùŒï>-Õûµ–µýéå‰/0ãADÇxbD¢ÛÚ›W…>|1¸)áWÖÓ¸õ0Öî<Äí{ÄÆDpñè.›¶em¿´6Ö²¶$¦EUËÇC?n¹ž.mãQðY¾x«a7·%ú÷«[,÷`¨Ö4SÇ›µ±³v>KKL¬Ñ}RœL&fšËùÛá„å£ÿ›ïsYr}À–ù&¹óã­,_Û5z®žÓµpnrîD<®¬³€f­Š§Ûy$ŸßK|·n•=] ½ü;=š´dé׳ìùÇ–ó¶5štÅÊM»¹z;§\ù(ßò,O±VYúü›#Ì”¾H²jXg¶†ãU¶3S[n<.Úð=z”ËGØÍ´öí¥\;6¯™ÉËÇ0®G+*W®A‹¾bzjx²u˜2¸…<ÝèZ·f¼}[9vÏVcó„žT­ò?Ú šKÕ mÚFB>5ú³qþ(ªÄþÊ+õþGµ:-Ù]Ñó~`PÍ‚d^:³eÅÿ·wßqMœÀ?!L®º*ZiÝÛª¥hÝ{€ã'PÁmÝZ÷Þ¢µÖ½g[TuÔ-ŠUÜ[–ÊÂýþˆR‘•„„\ÈçýzñjMž»ûÞó}îÉ7—»d.¾¯ž€‘½¾‡ƒS´ê2¿|Œ¶«ÒÛ•h4;§{Á&bÚÖÿ-ºŽ‚Y—Å™Ö7vë¸Õ³Ç©žpv®‹îסòÕ*oWá‰WÁñdå8Š˜ áãõ¶ãæ[_׈-óЦl,Ž„úu\àP£:zއ}M¸uí«Ðz—ŠæBQŠŽ¬8ú6ÜY±Uc}SÝk%Úgs'úï+ÂM‡9huŽT4wŠÎgyɉ"lë`ÏìA°y±­ë}‹]GâçügúÄwWvc@™ù&§×ó}QÖT Y¢ e¾ûéã‹´¾+ Ù¤¦_a@ s¾Ž˜—mŽ­GWâkS¤&=ÅwWLÚ|I'_”yÝVÄÊ! qcßJtoÓöµÑ~È4pí =®5ýú« ‚ ˆ‡¥¥e¶7rœ †»—/©´¡ÊUU^–Tw*$Þ~™òªKùÐÅ_o¸Ô®3CahV×®î©D¯r¦ BZ":|]·Þ§`Ò‰ èûÅ—­kRüóßQ«ù ™;áÊåm0Ë!ßÌoî>¼=§o‡Á´hsÜüg)û‘¯E$‚œåVV±s‚ ˆŒŠ„­-øƒfDj&KŽÅ™sò;‰¨TqIyx·l`†YCåoF–úlÎ×mÿê#ÿȸúÐé9—”µö>ø;ì’eÞ½¼‹%þÓmÇbçé(Cv‘ú¬oY3ŸÅôp)ô¿ÓzÛ±Sò‘ƒ÷fÜÓÂ÷Ý}CÙý*›ùƒ-Ç„׿/ [¢²C-Œ]´¿/ÇÎ!bI¤ºôѸDZóð`ʈ”âÔv6¶ÀŽ *@ø9±À$""""˜DDDD¤'òõÌS!Áìqa>˜3b~ÙÄ|‘N˜Šþt"1Äœ1¿Ä~d¾ˆ¦BtéN`}À|0gÄü²‰ù"Má5˜DDDDÄ“ˆˆˆˆX`‘žÈ·k0+Wudok‰D"Ét óÁœóË~$拔͙è L¸Æl峜¾þù`Έùe?óEÊæLüˆœˆˆˆˆÔŠ&±À$""""˜DDDDÄ“ˆˆˆˆˆ&i™¡ƒªbç”áßR#SX—.¦m{à矺Â\*Qû¶>}ÏÓ—ÿÎ˺r{\Ì>ÅlQ¦=.› ˆzŸ¾3_Êk~]N ýrçäN¬Ø´ÿ„ÞCô»÷š‚•-*Tª‚ßVÏ×ɉJÑ~ýwmo¸^ƒu _\Ø5Hå¾ù´=‰Ä†ÆÆ0/\¥¿ª€Úõš Gßîp(nša½Ë;7ÆüÐÔµ;<íDÑ7±÷¢g—1¸û>®«±È»NçVLÛÔ¥9½ ½.©óµ  Í{,0U ïTq‘°yÆÌ]5×ß}…ÃS€òGüóýðÚØ¿ºÛëD¼m²TÖÑÙ^¶î,¾îî”%â£_àÆ…¿±k립ïBZÆ-“çßgqoµôMøP²d¼‹~«gcÕÜ%è°v=þ·`|[—Ko×oñPÌo>7—MD’ÇV˜jù³¡¨+Ûйÿ ¼H‘ ×´­˜Ò­:'3Ò+úþZ :ð¹–61pÚtÀÃý 4>(Õ=05±ÎüâPÈæxáì»fÒ)¨OÔ•¹¶î,l]°}Ú@8~eC©ŠÚ–G“v½°hó‘=™½ Ÿ )0/Õ}ÊX¨­o$Rcµ­€æ<°9x7ZÆc©_ì}ù>½E™žPÊ) ¡˜sï­VûáYÈj´í3/SM0xÁ^—¤ws!±ÀTŠ‘…3 5é^¦ç^Ÿ‡*vN¨bç„jŽuÐð»N=o beB†v¡»—àÇaïàŒmzbñ®k™Öõi=Ê®ÿóe¾\GVë||r ¼º·‡s gT«þ ÚtŒM!³Œ%ìèFxvkçšÎ°¯YíûÄ™W‰ùÒï«u,5þ^ësmûúâ^ ë×.ε`çPÍ€åûCUÊ×§çÓdo°jÒ04p©ƒªÕjæy²Ì¯‚qI‘ñ”y“|<и^=T³¯‰ÚõÛÀÝ_zªö\˜°ÐqF¥ú"»>VfŒæÖÏÊŒeEú5+aKOª éžç¾ÉŽÔ´f.h4YGËð\Ï!UÇ—ÜÑÚQº??9¸t\ܧàô¥Ë¿sCíû§LÜŸSt<Íè6›ÿ¸Ïù›pãÖUœ:°îÍ+âùÞjß—ÍOãÝJ›+µ\V}¬Ì•H¿&:·±œ—ãôÀ•h€[‹j뛬X×òü8v2¾é*ÕâûgKieŽ<4FoBŠQLߺ”ÌóxÏéøË-—ª[Ú–Û~å4׫«™#cïï@Ëö>Ø}Q†ñ+·!ôæEìY:Igfø×%uè8ë7üPÆñÏvÁwŸ<7öúcdzxX”ýÛf¶W:¯ŠäDÑ9SãŒf¶$D=Âú U»úgjÑcêX´oT…ÍŒ`hZ »N<9:/½ÍÚ1» †-öA%+3˜YUÄðÅCŠ@‘õ+cýˆMH [â‹ÊÖf0+V× ȰaÄÆLíG­Ÿ— Ö044Cƒîã /wæ[¬X€Ò&Rì ø&ɲÞ'¿5HJ0q¹ª•°„¡™º[8òË,•ûSè3u*XCªäYˆ/ÿ²Í…qNÑñ´çe$ Š6‡±T ËâeåÉþ®þ«Ÿ}禔±4Ç>Q¤•£R…cÌm,çå8=ý.в¨‰Úú&˳˜&å²3E¥JçUñœHó´oºrl‰ú&Ÿ/'|3ëØ2²VÆ3›ïnaþŒeøëÜ ¼ˆz‡YZús²¤éÿ¿3B~½T‡âfÿ­¯¸€é9Ÿ9UpýÊØöJKG›Ì±¼µ@@ÆwZŸµ30´’OLi©ù–#‹ZØ0©9Z ÆÀqàø|×Lm¶¼HøÔ­“é¹ïΨܟ?X™*«²×)÷—OK™cóóxøuúþf…Q¾B%ÔtiˆþâF1µæ©¼©÷Sñ0I†jfÒL}’]•U+5F%Š¿OÍm,«zœ@TŠ|,•4’ª­o²"Kzø±ÐÌøñ³ÔÈ–¥•ùrÛ„öè>m?NŒëƒ ¥vaÀ·6yï9¹åRÕcKëg¶ò0ߪ£#7~<+ïU¥ˆzÆŽ½.©ãµÀ´xcl]Ü MoBçÎ=ñ>1k~EckS•òªpN$y;·§+Ç–èï"dðâþuÌ9ûnŸÅ¼[o0¡¦Uz›9]"èQZ,À–^M`ki ©¨RÍ‚ ä9M¯_¡/ÃÙt‰VrQ©ËxlhŒ C£±Ú+ó]üŸÎøŸ¼yeŒ¥jëOC ﮢq«jìöe0œ¹ÇÎ]dzèX<¸} n_CðñH\;1I½g°*ƤÛ1ºý³¾.®ø$ î>R´2–­ ð:Y†W)²L¹Tµo²,d¯®X9ÈXx¦DÈ_l¬µrŒÖîó ¶K$è6u~ð#’Wï†w£’yï9Ür©écKŒó­:úW ¯9ºòº¤oŸÊ?R6¶0Å{¼ÇýÑ@Ó’ù;–s˜3µñº¥.¢ÿˆ\"5A»o1{ËjXH °'`MÆJþ‰üÃ\Ïïä"€„Û2­§³­üÝÖ¾èÿ.BNŒ:˜û;×/OºbY·’…{£2ÇR¨dÑ•á¦ÃÒXâ1>Ó³½?^Û¶úî;µõg~P4nUÇ“© &Ì_spûêiìX1R¾Ï¯ö«}_~˜Ý Žâígg=T¡è5”H ¤%gØž"ÇU^û5+ ‚ß~ÐXßÈ’clÀ H aļVϼ=.¡*¢½¯Q«Õ{vLìÈb1×ëG,>þL-ã=?-]Ý\¯Ž}VtŽì÷•ü›ÖÜU)Ö‚ñº”7q÷¡ç¬Ó0*䈽›w¢–…1NÀÎGq*åU‘œ(3gjrœ±Àü<)…œ0¾†bÿŠEwÿûeå ¶û’d2D„ŸƒŸE™–÷œÑ ‰K|–âá›$$¾y„…¾+rÝ®¢ë;Sù;cÚ& IDAT‰39ßI7pnJ$Xê»b’ôö û­„D"Eÿ9D›³âͱñ§:HŒÉôœûÒ¡0—`÷ ±8s72Y Þ¼|ˆã{7aX¶*õg~P4nUÇS›ã°#ø"^¾M€A¡"°.&/ ,ÊtVû¾µ„þ®Hzqßu‰}gBñöý¤É>àiØ9¥Ö¥èíúñEiÒy>c_ÃÕ/ôWõ8€ö?Ù8tüµZûFHKÁ»ÈÇ8±w=z·êŒ³qæøßÂèôÅ C/˯«µvvÕêqêÜ{:vLê¤%`Éÿ~ÄÜ#ó<ÞóóØÒÙÍõêØgEçÈþËüPDj€î}ŠY*¢ß²ñ}ôêuIUi)ø©çT$ÈÒà6g!¾2/ÅsÝ&{)=GàuJšÒyU$'ÊÌ™šg,0¿Ðb‚ü"úM~Ò¹c%z4wƱ鞨Yý[t¾5ýÖfZ¶D£1Ø9Ý 6ûжþ·hÑu̺,Îu›Š®ýÛ£„¥ 4rÉñš.›:>8ºzª§F‡Æß¹a'œHµÇ„•0Ü¥¸¨sPÝk%Úgq'nQû~8¾}.¾¯ž€‘½¾‡ƒS´ê2¿|Œ¶«TêÏü hÜªŽ§•CâÆ¾•èÞ¦ìk£ý5hàÚA;4²?õ"dË<´)‹…£¡~8Ô¨‡Žžãa_Ón]û*´EÇèØ­ àVϧfxÂÙ¹.º_†ÊCV«¿ªÇ)8ú6ÜY±Um}SµZuØ×¨‡–<0ËYTë䃽'ÿ„_›ò™Úþ¾"Ðt˜ƒÖSç^Ó±cRG¤}Àªá0cïÝ<÷ü<¶tAvs½:öYÑ9²HÕ8¶w1~¬-ÃäáäTíÏ„¤îh½{]ÊJn7ùìÙ'£’P´J?~WPºÅT ¬Z‰ÑgÐsän¥óªHN”™359Îòƒ€ âããaii™í…±§B‚áîå‹ûáa*m¨rUG•—%Õ †‡·_¦¼2ÌYA#¤%¢Ã×õqë} &¸€¾_|Ùº&Å?ÿµšÏ€‘¹®\Þ3 óËㄘ¯•³ÜêÀ*vN‘Q‘°µ±Õ­3˜DDÙ¾[60ì¡òwùK}6çë¶õ‘Œ_}èô‹K""}aÈ. ¢‚ÂÁ{3îyçÿv‡î>¡ì~"¢t<ƒIDDDD,0‰ˆˆˆˆ&±À$""""R^¾Þäs*$˜=."ÌsFÌ/û‘˜/ÒéSÑŸ«"惘3æ—ØÌ±ÀTHv_àNÚÁ|0gÄü²‰ù"Má5˜DDDD¤VJÁ Z³˜=FDDDDê)0ݽ|Ù[DDDD¤¾“?FODDDDŠà5˜DDDDÄ“ˆˆˆˆX` L"""""˜DDDDÄ“ˆˆˆˆ µÿTddè ,_¿g.ÝÄËèwH50‚•M)T¨\¿¯]ÀÏB;'üÉ,"""*ÔzóRÐx4íꃳ©U1;h'®„^Á¥Ó0oì”N¾ËÞ&"""Òj;ƒùöî:ôžµ–vî8´Ø†ùãÆÅJ£~ë.¨ßº {›ˆˆˆH¨í æ‘Ñ ´›ã‘^\æäñÉ-ðêÞÎ5œQ­ú7hÓm06…<ÎÔ®ŠªØ9áâ–ùh×¼ì¿F·þØpê¶Ì‹ïÖC5ǯѲÓ`}§öå_Ÿ—¾ŽjŽuÐð»N=o beB¦m„ÝÏníá\Óö5ë¡}¿‘8ó*1ÃúBw/Á-ÃÞÁ ÚôÄâ]×2m3)ò2&ùx q½z¨f_µë·»ÿ ¾ô”#–ˆˆˆô§ÀÜð ЧBá\ÛF^^Š6Þ3p#­v‡œÇµÓ;Ða˜:¨^ŽÊr™‘¬t8­ïƒw/aºg;¬~æ€-Ágðçš^x|ó4Fõ›í6U]þÄaKÌ_¿ W®_í+'èå„]«¦£Ë¸S™Úö[ú/áò•óX;ºÂÎưžÿ­3â\ :]…×6n8ü÷yÛò â¶gþ÷݆bóà9nܺŠSÖ½yEü1ß›#–ˆˆˆDO@ñññ°´´TùFûjÕ‘*»s ƹœÁœÝ¼.Ö<ǤSÑ·d!Àû×[P³ñtX”ñÀµém?ݳîâ4-b‚4Ù[Ø94¬¾x-Š˜@HK‚½ƒ Ò$Fÿ÷j†måuùLªT« C³Êø÷úþ ÛøåÌ%t³5¤¥FÃα $†ÿ÷ºüù¦u±þe<&Ÿ¾ˆ>%2î7ðßM>Õí«ãƒ,Üõ'\«—†„㔈ˆˆD¬ŠA@dT$lml¿óTHp†»{ùâ~xXú¿Ë›Jq?1O?ÈPÙTšãº¶½zèhc–þ˜Yq7ÓñþÕ™–iTØ` -šþX“I L‘@HKÎv›ª,ŸüîæÏX†¿ÎÝÀ‹¨wH‘¥¥?'KziŸï¡•¼MKMlg„|¿;ϼߟë\Ê›ŸÇïÓwð7+Œò*¡¦KCô65Š™¤·«\ÕAksT‘Æ}YûåÄPÙòåúW*Œ‰·b°ùq&V+ªö’fqïók=APûòsºDУ8´ X€-½šÀÖÒRQ¥šs–í2lCõóŽc·/ƒáÌÕ8vî:žEÇâÁíkxpû‚GâÚ‰IrðyNˆˆˆˆ4AÙZJßEž]åê:{¦´[€£‚0~ïð, ºOº•,„µÏã±7*1ý£âĨƒ€B%Ås·ù–'ñ€¹žßÁâã%¼Ø¦òú:Ûš!èeöE'¢·mÆýþœ© &ÌwÁ) 1¸y~?º™ƒ„WûLR(DDDDÚ¢¶›|ŠÚ Äæ1íg܆/ÄÕHI“!áí+\ Þ…‘ýÝÒۜۆ –ú.Ń˜$$½}‚Å~+!‘HÑÎÑtN²€i»/!I&CDø9ø÷Y¤òú…6ÌÏNÑů8ú¼sÅ¿Xãb¬×Ä<sMÌ3oò!""""˜DDDD”wIII8|ô/$%%±À$"""¢¼IM•áÈÇðôés;q꼄—&‘žIKKCðñDDDž={ŽSgΩ­ÈdIDDD¤gΞû?ÍðØ¿ÿÞÁ•k7Õ²~Cv1‘º $ì""­F ë¡cÇŽ(\¤X¦çbß½AdÄKÝ.0#CO`ùúí8sé&^F¿Cª¬lJ¡Båªø}ío¿ŠàÞÝ[jY6òÞU9ò=ŠKá‘*¯[Ýûôìú lÝu'Ï_ÁÃçÑB…jµÐ±ßÿàíVCkùÏ*ÖGcÖ}8}ážGÇCjj¯*VC“¶áïå3‰hbÍXW¦`n¯V8Wk*®¯ª•Ü«k³óiÄ0ÎIóyë¼AêϵXç]R-ÏŠÎÇ‘/ó\HвÀ¼4ýfïCÙï<0;h2ªW´FrlB/žÅ®ß‚t2Éí}çÁõû¶±hz¸6M\½§î@Înô*eŠ#)òÖLþý{àFì~,íUY4±z.<½úÁ}l ”±6GÜËplœé‡¥óÆàøm)Ž-teîCæôÇ.¡Nj ‡uº=Yå69‰uœ“zó¬Kóå-׺:ï’ryÎOZ+0ßÞ]‡Þ³öÁÒ·ûÃðã›#ãb¥Q¿uÔoÝE'“{îðo¢Œëä®åþmTÒ¾ –`¹sgŸ? èµA4±ož“áßÅÊØÃgÎ ,ý³žý9€ø&ºgÁ³á³ËûNúÂHÞè‹uœ“þΤó.‰›Ö Ì#£7@&h7Ç#½¸ÌÉëóãаß>€ÔÐÅË”G£¶]1þ§(,•¯àÓ)â»·Ï`ÍÔ Øxè"ãR~ç t÷ü¼t;…U9Gôð­×É—¤ÄßÐ`?ÃB¢ -áùŸèp¿8ŒJ¦RÎ*Äyƒ H²Å;ï’êòòó:Q`nx èS¡°BíO¶ÄüõÛЬN5’$âÂþ9èÿót\(?g7ÍÐöàÒmpqŸÏ)Öøôrq.Æþ ëZ}qx§/Jáæé¯×ƒìü²‘Ó¢ÍEeÞ¾¼­s8t™$ªèdžâ]Æ¢õ¬}hW΂3qÞ @Üó.åå=Cþ}Ħµóq’ PÖD±3>=¦Žýì_FhØu2ðón<9:ø¢Àú @kÓ ­³ ‚ `ØbT²2PÃAPãéz9È.n÷Uòk5ÚM.Ê¿¼h¹P‰˜7²®¨b\âÙïÜæ`ò÷_¨ñ‘ݼ‘zg]˜7(o¹Ö…y—rÏsvǰ Â—\ªZ”j­À,o*ÅýÄT<ý Cå\>VL~w óg,Ã_çnàEÔ;¤ÈÒÒŸ“%=ÈÔþ+ÓLíŒxèPÜ,ý1³ânô¯À¼°n$ú`€G¯Æ/®â,Žîݽ¤¥"òélš€åžE_m8»¥—hbÜòÁ§Çµ(pc„…¤~P&Ϻ2oPÞr­ ó.å-Ï÷ÃÃ^_^>N×Ú­÷¯$ÿh|óã¸\ÛÎé:k÷žDÕ>qòŸ‹¸w÷îݹžm5nÈoSÈÖÙÕþè=û0ôœ¾óÖwÀ†°)+Ñ×—‰*¼èkàXÍ Uì2þåvÖ€ˆóqÞ¥=Œ´µa×Ù •Hp`Td¹œ±Ýò$0×ó;ØZÊÏN&¼Ø¦Ôö:ÛÊÏ\î‹NL,1ê ^%ûÌJ?ô›û$†è3k'¦vuÔ¡è?]ln)ºw‹Yý){Ö€ˆóqÞ%˜jPÔn 6iø;ëà6|!®>ˆ@Jš o_ábð.Œìï–Þ¶GYùÍÓv_B’L†ˆðsðï³H©íyÎè‰D‚%>KñðMß<ÂBßz“è¥Ã0`~0$Æ0{'&u´m¬ßõ…ߜóè8ÈÒdˆ~†Å#j÷ŸÎ£–ˆóqÞ%‘Óê­»¸ÿ‚“uZbyÐNŒèÛ/cb!30F+T®fŸÞn䎕Hˆ£Ó=±g¢!JWvBW¿µ86ª§ÂÛ*Ñh vN7ÃÏË·£mýß`õ•=º Z \í­öýúòcѼüZºx.>Ò’4²‚Ff|^LgÚVn€Õ›VbéÄ[ˆŒM†iáb¨\­FÌž†A]xÔŠ„Ç9éï¼Aœw‰f¶5[bò‚–9¶1)Z ÓWýžévœÿu¸¥ÔdçÜÕºúexlxWÕ'Èì¶§íI7«í‹õ… «¸*7ì€Ù ;èD¬êhË}$±æ™9ÖŸ\‹uÞ%Ý ˜""""bIDDDD,0‰ˆˆˆˆ& L""""bIDDDDH¾~MQ^~ÓR Ä¿.õ+cå~óLÌ5i6ÏMšµÒŸS"ÑíküºÔ¯Œ•ûIÌ31פù<‹á{1ó­À#‚ˆˆˆHÃi=^ƒIDDDD,0‰ˆˆˆˆ&±À$""""bIDDDD,0‰ˆˆˆˆ¦š…^ƒž®PƦ(Œ¤†05/вUœÐ­[†v‰‰E*ôCRZæõ|z^W½ ûK¦ü„ÆÕK‹n_⟃‡k]+d ãBÅP×ÕÇž&ˆ²u)V]Š?¯q)º¼˜Û}:.³û˯>Öäažõ#Ï̵~åZ[A„¸¸8€pïî­,ÿÖ¯^$‚íó9-÷iYÙ1¢µ@hà=K¸ò൜úAˆ~~W8²y‰Ð½I• m¤ÿµœw5Óº>=§«J:6|'-Nßz!ª}II¸%|]ØX(jç.Ü|'ľº) °+*®#Ü~Ÿ"ª>Ô¥Xu)þ¼Æ¥èòbo§êq©Èrꎕyfž™kýÍõ½»·2ÕlsgOUºŽûTÃ¥¤$çZ~êˆÈˆOý£½óÕß#B©ÆJ%´–…± 5²‚£ T)Ö}¹8º¦@ð¾™þXÄ/y.Æ\U¿éR¬º^ãRty±·Óä‹‘ºcež™gæZs­÷æ'k€0úߥúäÐP€P¢Þ˜ùÀ»”…@øû݇ôÇ>¼;#,J U¿éR¬º^ãRty±·Óä‹‘ºcež™gæZs-†S«×`. ð,_X©åʺ.C`³Òx}~<÷=æ•´v :PÝÜ(ý1#óê€Ä˜ŒUâÏk\Š./övbècMÆÊ<ëGž™kýʵ^Þäó()U^0šHs¼è6+~ûv¢œ©!~íÝwSYjPDŠüŽ* é¹H-iÉŒUâÏk\Š./öv¹ÝÛ–Óܦ©X™g晹Öï\ëeYÙÌ2ˆ‚ @~:{Æ…ëãÏeí‘’ ×;Xj­‘|˜ÄÉþˉ'@ƶŒUâÏk\Š./öv_ÎQ_þåGkrŒ0Ïú‘gæZ¿r­—¦¯]QÀ‚kQ*-_ÍcükXãÁÖ>¼ÍJPCܬ͡ )饼˜Y¹1V=ˆ?¯q)º¼ØÛ)*»©œ^¼´+ó¬yf®õ+×zY`vÛà‰;{ &5M¥ð§ýµE¤À”6î¬5Ä»O%À¯Þ¥?öîÞF@¥¾^ŒUâW4®ì.kQty±·Ck2VæY?òÌ\ëW®µIkw‘ ‚ ›ÙK0”H„â_w~ûã‚—(ÈR…ûWþÊt—²¹këâ/M3|G&ï"W¯”„‚³…±P´š‡pëuœ÷ú–ànWT0¶¨%ÜLÛ÷`êN¬º¿¢qe7n]^ìí ÑïÌSo¬Ì3óÌ\ëo®õþkŠ>yrf»àÝ¥µP©¤•`,5 L«e„šß6zxúåšÐ4Y‚Ыœe(0?/”ÅT4Ç>8*ôoí"15 M‹.­û <ŒeêR¬º¿"qå4^Ý/1·ËîøÌí8Uô8V÷>1ÏÌ3s­Ÿ¹C)ùøâããaii‰{woeyšóTH0ܽ|q?8ùü}¾mÿÉå#˜êï¦ß8¢tI”,S ZwÃâ]W2´‹¸s«gƒk‡LùÒ÷>,¨ñ‡îY„ŽÍê ´mq”*g‡úŽÀ…ˆ$…–RßbÝ44sqB©6°)Q N.Íà3mÞ¦ *í¿6Ú):gå5¿Ú:¾=þÕ1~™gàþÙÝåÕ.•P¢xq”*[ u›·Ãø…Ûñ>Mý\Ã\çå•D"‡·ŸR:Y`~“å_Öí¢qÿú)x;'`ó´y²À—©‰wàÖ°;>tÀ‘ëpÿúØ?<ˆî Üž”š/1´õ+,ª»aÙöãxôü5î^<„ŠßÁd¯V°þNz»&&ã!ÊcbPûPâr Í<§âqÅ~ø'ü9…GkÃãèP·î)×®-0rÁfÍp9üžÝ»†Ñ­$ؼ`$š{ìTzÿµÕNÙ9KÕüjëøRôøÏëþ1Ïr=~9 »ï‡`{È<‹x…›ïC‡rϱbê`4ñÚ#ê¹Fßs­Hª©XóâÌ©c*ýél©dýÂ%ª`è‚%òw€;¦˜34Ð×ã’ÑaýdØÛ˜ÃÂÆ“×ýˆä¸kð ¼™/1\?¶þP½bIK P¸´#F­ý ðÇ´éíþ=w3GB½j%؇zÿÔ[!.Œ¯Š˜À¤ÈW¼p!>¼» ÷Y¡¹.?îèSÀÆýQº° L,K ÷” €gþ¬ôþk«]~åW[Ç—¢Ç^÷y–»xp-<;µ@¥Ead`ër50råVÀãƒcD=×0×È÷>Ò5:{“±¥ %ñßS`þºõ gËôÇ Wì x°åWí•ôRs@rÜ%ö¡žÆ(ZþQx½Â&é™®x¸u}®Ë2||{˜Åø’˜+½ÿÚj§ãS™ã_ìùÓ‰+R QÏ5Ì5ò½X`æ“qÿÈ M‹Ú¦À<úFþ"îPÈ(ý1£B€¤·Gµ×ßs¼¦Vß³õ4þ𿯀 q>;/ÈÿûöÏ\—Ÿ×[¾&nÆ«¸HŽÀï“ÜNýæ)½ÿÚj§ãS™ã_ìùwžÓðæùm,ñí¨Þwž¨çæùÞGºFw‘gwCÖ×?ˆ|€µc~Ø÷T` ̨”4€¹T’éìAZr”Vb:·b0:/¸è2{ûPOãŸ7²šL<†ák±ož'Š# k†ËãJy›ëò-fíE·s.ؾæ'8®ù)ýñbݱgF3¥÷_[í³²z>&&FçÆ§²Ç¿Øó'Ö<¹óRͰrrcQÏ5ÌuÖË}^·h*V]¡S7ùÈ/ªµF¹jß`êž0³i†ƒ“¿-0fq#y:>¿3^H—'ʸx¾Çsf©'Ü~Þè6uu,Ï>ÔÓø«ÛÝs~B±Ð¨S¹ Ê;6ÆÖç•äïRMÊåºüþÁ­±ýöÔôœ[^âåãÛXèíŒ7··á»Áû•ÞmµSvÎÒåñ©Êñ/öü‰5Ï111ˆ‰z/C@»ŠHx‚;‰z®a®‘ï}ÄSÃ…htäK\?³ÝjX!12Ó¯ënuÿ¥6ÅLaïSÒKI ˜m“¯±œ\äŽöwbÀ¢`¬Ö”}¨çñ78¿‰W‘Qxõì‚· *Õ#×eÇ|Ø8­/J}q“Ï£ÏnfPtÿµÕ./ošui|ªzü‹=¢Î³l+ÕÆèUò›|¢.Ïõ\£ï¹ÎíqmÆÊSE© Ê:6Æ’Ã;`ih€­Þ LÙ¿[ÀÖG±éÅ>بн_¾Åqb~?tœ²#x.=y}œÙ‡Œ?“'{çMèœþXv_Ý!‘ätP(½ÿÚj§ùUäøÏ.ÏbÏŸnäÙàãk]QÌ5̵æûX×_· Lù‰‘ym̨Uï¬À¬°5ƬBuscì8w"yS<ÀؼÖŒ®‘/1üا„ÄÀƒ—‡`vO'ö!ã´ôœŠ w_#%õB¡Ë˜ó°©íµí+äºì¬ä¯fu“Oùf*½ÿÚjWÐÇg^±çOlyþ¦½7‚öÄ“ÈXÈÒRùè:u¸ ^"깆¹Îÿãf>j3Û°ÆcY(0 ÍqøÌïp-†65+¢bÍ6+çŠ-†½YþÜÕ}Ö€ö+7ÌñW ²ûÅ%}ïÂÿÜ6˜Ò¿%Ê–ú ?ú¬@=Ï©8sô˜(0‹´[u úB86 µ«”AéJΘù— }üçãøªvJï¿¶Ú}9Ö•ýÕe¶£ãK™ã?/ûÇ<Ëýîß —·ÍAÛºŽ°µ)…Ú-º#8Æ—íÇ¡‰ D=×0×È÷>Ò5‚ ˆ‡¥¥%îݽ•eÃS!Áp÷òÅýð0¥6p*$Þ~y¾X–ˆˆˆˆrõ•«:f¨ÙöîÙ…zõª´¾ºõcSЊëÀ*vN‘Q‘°µ±Õí3˜DDDD$>,0‰ˆˆˆˆ&±À$""""˜DDDDD,0‰ˆˆˆˆ&$ùö žÅŠcoiXLÔK­ÇÀ3˜DDDDÄ“ˆˆˆˆX` L"""""˜DDDDÄ“ˆˆˆˆX`ª‰D"Éñï“ }í!‘H`]ÃÉÂ+’áSÉöý6è|B⟃‡k]+d ãBÅP×ÕÇž&h5¦Göcìàî¨mW…L ab^ Õë»"pË?¢ë¿WacÉ”ŸÐ¸zéLãˆc@»ýªè~‰¹¢s–¦s¯É1’×u3Ϻ‘gæZ¿r­wfz(Yþ}Ò/èu¯cjIDAT,zT,Œ˜›KÑfæù Ëþ芥7cP¸bOœ]ßO§“‘ú> Mk¸bÏ}'œyƒè‡gàx\«7Å¿‰©Z‹«™ÏX:wĆ#ñö}2"îœB›0ŒîU]W„‰ªkw{B%ÌÜ~™c@Dýªè~‰½¢sVvo¦ó³´1þ˜gÝÈ3s­_¹Ör}'qqqáÞÝ[Yþ­_½H!ÛçsZîÓ6¾ Ûç¾ôþÕ¡œ©¡` 5Ö‡¿Abþ&XH CÓò‘×ï]wqtM€à}52ý±ˆ+^¡Ö˜K¢Š59þª@0)ÚT´ý©ÌøâÐl¿*º_bo§ê˜Rd9uǪñÇ<ëFž™ë‚Ÿë{woeªÙæÎž*œ9uL¥¿””ä\ëÀOý!tæL³mqf‡„´÷ðiÒ‘Io0°É$¤ ðÛymmÍtþãñ5¿>ô¯T8ý±"•ûîm\#ªX%R @rì~ŽMì—ØÛéRicü1Ϻ‘gæZ¿r­×‘+ª¬Û\ìõ­„—ûàÔÈ;žÆ¡¶ï^Ìý¡l(.D'ª›¥?fd^s@T±†Lë%/ü­Û³*ÔÓ1 ‰ý{;]ê#mŒ?æY7òÌ\ëW®õºÀTæâÚïg¬‡¹Ô‘—_Á@jŽõ3¾/0ÅEDJÀB*Ét¦0-9B4qž^Ømf^ôZ2‹U¡ŽMí—ØÛ):g)û¸&cÍÏñÇ<ëFž™kýʵ^˜Ê\\» ³di¨ï^i²¸u^X`Š [#y:âdÿí»'O”±­8Î\Î퉦þ›!À}æcM÷Ь õl hr¿ÄÞN•9K[}¤ñÇ<ëFž™kýʵ^˜Š ]Ñ£ÿx›:cpfÝŒ®cƒgŒB—•¡¢¸p³–_Gš’þXÊ{ù¾™Y¹i=¾c³»¡ùÈ­¤´ælÑ’¡žMï—ØÛ©ú¦9·Çµ«:Çó¬yf®õ+×,0sû`3šøî…Ô¤4¶ý5Lùk+J›H±Ç§ ~§óÅ…wŸJ€_¼Kìݽ€J}½´ÛŸ¿tB«1; 10Âÿ‚.cÅÀ¯Y êÙPDv—·(º_bo'†Ük2VE×Í<ëvž™kýʵ6‰þkŠd^ ?”4]ÖÝÎðÜíµ‚y)7áå™NMQJ ÁÙÂX(ZÍC¸õ:Nˆ{}Kp·+*[Ôn&¤h-®CSÚ ‰‰ðÓ¦PéOèà׉u (Ú¯Ù=§è~‰½4ø•&êŽU“ãyÖí<3×?×üš¢/Þ!ew±lPÿÆ8ô*¶ßŒÅ6û ËÚÜŽ±ßØ"áåA4î¿A§+}ÃB5púÆ~üXþ”/†bå ´Â8zN… µ×“öË߉¤}À¾5ÔþKš>‹¦K¿è#Ö1×~Ut¿ÄÞNÑ9K“¹×äÉ뺙gÝÈ3s­_¹ÖÚkÆÇŠñññ°´´Ä½»·²lx*$î^¾¸®Ü/·œ †‡·_ž/–%"""¢ÜÝC媎j¶½{v¡^ý†*­¯nýÆØ´"Ç:°ŠA@dT$lmluë&""""?˜DDDDÄ“ˆˆˆˆX` L"""""˜DDDDÄ“ˆˆˆˆ ’|ûÏ7oÞ°·‰ˆˆˆôÏ` L""""bIDDDD,0‰ˆˆˆˆX` L""""b©&VVV°²²R¸µuq”,UUìk Y›Ž1c9B#“ L2>ígVÚ–ðì$|ºµBÅÒ%P¢tE´ê惓Ïß‹²u)V]‰ÿþÙÝåÕ.•P¢xq”*[ u›·Ãø…Ûñ>MÈÓØþr|+ºÿÚh§Ì~h*÷bˆAË3ÏêÛ'æš¹f™GÑÑQxùôþ Ù‹qî-¶ù´¨Q ³<(PULLL¦?mJM¼·†Ýqð¡Ž\€û×ÀþáAtoà†ð¤TQõ.ŪKñ÷øå0쾂í!Wð,ânþ½Ê=ÇŠ©ƒÑÄkJcúåýÍ0”H 5²VzÿµÕ.§ýÉé8UäÅJÑíKmŒ?±çO—ò¬é¹€¹ÖŸ\³ÀTÄÐV%+£uì¿r Í ÇaŽG3l{žÀóÑè‰ëqÉè°~2ìmÌaacÉë~DrÜ5xÞd¬zÿŃkáÙ©*•( #CX—«‘+·£Ò:ÏŽŸˆTA@9·eJï¿¶Ú‰5÷Yõ¥6ÆŸØó§KyÖt¬Ìµþäús ·Pú¯Q“–úQ`~Îд¯qEš,Sb%¨!¿n}èYÁ2ý±Â{lù•±êkü‰ü?R ¥•}xŒ!»A"‘bÂì&Jï¿¶Ú‰1÷Ùõ¥6ÆŸØó§KyÖt¬ÌµþäúK÷ÃÃþ Z³XÎ`~©ø7~€èk‹QPT*[ ÖÖ6([Ùm»ycóÉGZçèùu®…ŒÒ3*äHz{TT}§K±ênüixóü6–øöTï;Oé5ÜÛ0É2X9M@‡â¦Jï¿¶Ú‰1÷Ùõ¥6ÆŸØó§KyÖt¬ÌµþäZk'u½34­HMº§û…eýŽäÞ ß5ý_3Á“Г˜äé ßN{p=è2Û—ÓJ\Q)is©ä¿“WRsy©‘%ª>Ô¥Xu1þ/¯92/Õ +'7Vn%ÂŒ˜yÐ{yo•ö_[í²ë‡O>]³•Ýó_>þù5^*å>‡¾ÔÆø{þt)Ïšž ˜kýɵ¶èüÌÔÄ» M]véÐ:xui‰ 6…ahh‚Jµ[cÕ¡~󫵸ŠɇI¼ì¿»……Ôxù2..ª>Ô¥Xu1þ˜˜ÄD½Æ¿—Ž! ]E$¼ Áƒ”ZÇ«¿GàïØ0³é€‰Õ­UÚmµËÐj¾O•ÜçÔ—ÚbÏŸ.åYÓss­?¹f©¢È‹‹äï"jCATȶ3àÃÛãZ‹¡M1ùÇnaïSÒKI ˜m#ªþÒ¥Xu6~#ØVªÑ«ä7ùD]ž­ÔâK}šÌž˜iRtÿµÕN©B<‹©œ^¼T‰!§¾ÔÆø{þt)Ïšž ˜kýÉuv&Mž†*vN™þ&MžÆ35é>|½Â@jމ«Ý d™½`R´¹Öbèß­`ë£ØôÇblTèÞOTý¥K±ê~üòéC"-’þHn_Ýÿt5–?Š…‘™–¹•SyÿµÕNL¹Ï­/5Cvy{þt)ÏšŽ•¹ÖŸ\ggâ„qhÙ2cmѲesLœ0N? L!-o_ßÇŸ[— ý×Mq2Ö#Ö‡ çWÐu_·í¿Aøóh¤¤Éð:ü,†w‰Ä=çÎÔZ\5ƬBuscì8w"yS<ÀؼÖŒ®!ª>Ô¥Xu)þoÚ{#hßI<‰Œ…,-‘®#pP7€Ëà% ¯ç¯üf<;ïå°24PyÿµÕNL¹Ï­/µ1þÄž?]ʳ¦ce®õ'×Ù‘J¥X8.œkœkbáü¹J¥§ÀTôô­­­Q¢t¸4í€AÇáØkއ^ǘv• ÄÙÊÚãþ±µèÞÒellQ»Õ„Û6ÆÜ­ç1¯Cy­ÅehæˆÃg~‡kÙ0´©Yk¶AX9Wlùû0ìÍÄuŸ˜.ŪKñÿîß —·ÍAÛºŽ°µ)…Ú-º#8Æ—íÇ¡‰ ZGrÜ?ð?ó Rs, ¨‘§ý×V;eç,Må^‘¾ÔÆø{þt)Ïšž ˜kýÉuNÌÌL±fÕ24iÒkV-ƒ™™©ÚÖ- ‚€øøxXZZâÞÝ[Y6< w/_ÜSj§B‚ááí§õ_£!"""Ò1Q/Q¹ªc†šmïž]5A©:îS —’’ŒMA+r¬«Ø9ADFEÂÖÆV÷oò!""""qaIDDDDjeÈ. """Ò§B‚ Võ’Y%"""Ò‰D’oÛÊ—Sf•ˆˆˆHKüüÇÀÏLÁ)0›4k¥ôçDDDD¤>†çëöx“±À$""""ñÒøGä{÷ìb/å#?ÿ1ùþ±x¾˜0j‚ÒËH$ÞDD$r‰gNcGiHÃÆ-T:.óó†­˜”þi"U–#"¢ü“_ß§G¤ïT­¡´‰×`QžÉÒdâ(0AÀÙsÿ0#DDDD š>cÒÒÒD£Ö ÌÔÔTü|¡7ÃPܦ$G ‘6lÜßáHJJbù¹¤¤$8ô>z(RÔŠ£…ˆˆˆHAüŒ>ý<ðæÍ˜Ÿ9ˆˆHŽ""""]»v#Lj26­˜-š5ÆW_•áÈ """RQ­ZΘ7g ÌOLMMáÚ¶8:ˆˆˆˆ”Ô¦u+üöëz+VL”ñjkÉMÕEá–%DDDD п/Æñ~Û¤¡¶¨UÓïÞÆp´)àçñcD£(JߨÈW-DDDDD¾ÁTõ§‹øSdDDD¤Ït±Ê—S"‘äërDDDD®ÖB/0ýüÇÀÏ G‘’RR’ ~´f±ò[àGÜDDDDzEáÓÝË—½EDDDDê+0±·ˆˆˆˆ(Wì""""bIDDDD,0‰ˆˆˆˆ& L""""Ò®Lw‘W±sb¯‘R„4!silb A4²ÁÔÔTö:Q–&¤e,0cbbø!Ø9DDDD¤š”ä€,+‰ˆˆˆHþ$a¿Ö˜eIEND®B`‚xnec2c-3.4/doc/images/radiation.png000066400000000000000000006133731257141547200172610ustar00rootroot00000000000000‰PNG  IHDRÉ`ÞQõbKGDÿÿÿ ½§“ pHYsÄÄ•+tIMEܵòÛmiTXtCommentCreated with GIMPd.e IDATxÚìy|LWÇ¿3Ù­‰])‚‰¥¶"±UÔÒÖNµÖÖÛ–ZZªvE««]mUµ×µÔ."ö B±ÄN"È2ÙfÞ?bF&3If’I„<ßùȽçœ{Îyî9çþîsÏ=W ÑhˆŽŽ¦páÂ\  ª«»AAAÈ\ P¤Ý§H#’5ÚmAAAÈ( ±¬É …B“Z^‹ ‚ ‚ ¯4n.nzbY+”µjY'Co…röÜY±˜ ‚ ‚/x¿Óû¨’T8Ø8p%$@¡'’Co… dAA!ÑñŽz"ÙšT^äK—.aem¥‹Ü¾m{³þï¾ÅÂB¾åû™ßsøÐaÜÜÝøñ—Q*•zájµš1#ÇDËV-;~ì /óµ«×س{gNŸ!,,ŒÂE S©R%º÷ìNÝzus¥ ÆÆʾV–-[ð~·÷±¶¶Î‘<µcVÚíœÊ'·1f[…B££#îµÜéݧ7•«T–Î+‚Å´ßËžàè±£Tuu×è]ylmlu·nÙFÃÝ{wu/òiÐòïÙÜåT?ˆx@ýzõ9à}@Z˜/9j$ dóÆÍôý°¯^øê¿VDÉ’%9z¤^{Q|öégzÛ"ñ(ògýÎ2nü8Ú¾Ýö…”+..ŽkW¯qíê5"##>bxŽä“öd圴nÙ ñ//œk-†GáëãËÉã'ùå·_psw³x½M±‹ y‹ìj¿¼>|ÏC­Ñ¬V“¬û_m°ý0VEý¶íÓ§t"9ôV¨·æî½»œ8}kkkýŸ•áö–­[Rha ¼,8991~ÂxFͪ?WÑij ®®®@ÊSš¿þü …BÁ7¾ÁÑÑ1O”¹zêtèÐú ëSºtiäåpüØqzöºyã&óæÎÃÏÏ4àêêJ^= ò4VfSòЦhÑ´…îoíqŒ7ì~Ë–.ãÔÉSDEEQÔ±(o6z“ÁCS¦L™,· S…ª££# ßlHùòåéö~7‚ƒ‚õÂ-YïôÂÍiË©m¸kç.6oÚÌõë×QÅ©8zâ¨Yvzúô)+–­àøñã„ÝC£ÑP¦l6lHûŽíqss“ALÈ÷¤Ö~ÚßÁýèÜ¥³žà56ÆKoL g–~Æô–³OŸ>FÓ«5¬•J¼üýèZ»6c==tY»ÿò¨‘™jWÝ^++£µJ¯°}úôÑ;x^z¬(/‚_ŽàôéÓ„^ å÷E¿£Ñh¸qã•«TføˆáFûÈè‘£õ¶¯_¿Îœ_ç`meM¯Þ½ˆˆˆ`ЀAD„Gèâ=ŽzÌ¡ƒ‡8yâ$ËV,ÃÅÅ€'Ož0tðP®^½ªw\ü¿òçô™Óé–?&&€¢E‹ê•ÕÜcš;hã'&&òàÁ6¬ß@µêÕ Žõ÷†¿u'&&r=ô:‹,B­V3xð`îݻǧC?åñãÇúe}6@+cêmSòȬ.i·ïÝ»Çàƒ‰ŒŒ|.<äßÿròøIV®ZIÙ²eÍn¦Ú656Ö69^ïôÂÍiËZæÏϺµëÒÍÏ;M™8…'NèÅ»uó·nÞbËæ-ö AÈO¤È©5 Ö9š‘ö3E g–Þœ›ÿÔé“Õj¬S9¼üýéZ»¶îo]úTqÒ»žç ¥µ¾WBÃó»Ã¾‡3¬´–´Ç„ü†½µ=3fÍ _ï~lܰ1¥_(•|7ë;ì ØMSºti¾÷5õÖ'11‘eK–±aݶlÙBŸSî–—ü¾„ˆðúÜŸî=»SªT)b¢cس{?Ìú 0wþÜ”¸K–põêUÊ”-دÇP·^]¸xá"«W­N·ŸÆÄÄ0mê4š5o¦ÏÜcš;4¬ßÐ`Ÿ££#£ÆŒ28ÖŸkþÔý@`@ ƒ>ÄŽí;úéP–.]ÊãÇqwwçÛIßR±REn\¿ÁŒi30ZÆÔÛ¦äqæüêש¯û;=´Ç]²d ‘‘‘º2Ur®Äõë×™15¥LK–,aêô©f·ÌH]¯èèh‚ƒ‚ùí—ßp¯énñzgnN[Öâ}È›Ÿû™zõêQ¤h‘,õ!?¿”Ç·KW,åºoÀÍ79}ê4»vî’ë— ¤Ñ~i²öïþýû§«ýR§ÏH g–Þ‘œ:}ò3Oò‘O‡Òlñq :f´žHN¯ïër°³¶ÃÎÆ.­¥t•JýÈ,5WC¯êÔà‚ »†Z­¦@h4âââ¿NíšµÆÿnÆw4ñh¢ÛþòË/Ù°n·oÝÖõ©£¾)ªW­\Ū•« ŽqÎïœ.‡øþûïiа.ŽG<šx-Ãýû÷öé0.‡\æõ×_g䨑zýÙÔc^ ¼hQ[–,QR¯ñªxæÍ›Çþýû¹ï>IIIÏëpï¾.îñ£Ç˜:}*Õ«W v­ÚL™6…ît7:^i·MÍÃXZchÃN;aX¦šÏËtòøIƒã˜Ò62C+XÓbcc×_~™cõN/Üœ¶¬e欙4|³aºù˜b'ggg.]ºÄˆÏGP¥JJ•*E­Úµhß¾=”KÒh?c³fLŸÁÀÓ×~©ÒgèQÎ$=¤L³2–¾šKµtÓk=ÉÖ %§?û ,4*S‹äôÆ1] Æ=ÉiæSòÖVâI-=búôéŒùz †éS§3mÚ46nˆ“““AšèõÂE )»µûS?¢7FLLŒ.îèY§¦I}20 aC‡Aå*•Y¶b%K—Ô‹cî1Í%0$äädE>âˆÏf?›¨¨(–ü¾„Y³géâýøÓ¬_»Þè1’““ue{ôè•«VÖ+o•ªUÒ¯´Û¦æa,­1L-Sdd¤ÁqLiæ T*qtr¤Aƒ ýt¨ÞÊ–®wzáæ´e-uÔÍ0/Sìôݬï˜ðÍ.]ºÄ… 8pàóæÎcÖìY¼Ûé]ÀÑÈÙÔ~©Óg$3K¯Ë'tzé“5j½—ô¼Ò”}äÞ},êÐÞ‚ØØXš4i¢ŋ(R¤H¶Ž™ìmìÁ ¾VÞ½zSµJUzöèɾ½û˜={666)shì; tíÚµ£P¡Bu:jµšº}À?þ®÷ÀÔcVz½×o]7ËvimШI#ª×¨NpP0§þ;E³fÍtSœŠ9áPЛ·o2ó»™ÇiÞ²9›ÿÞÌ·ã¿eÖ³¨\¥2×®^c·ÒÍS»mj $&:†€ jÖ¬‰B÷!SÃã6oќ͛Ò/SóÍÍšÛmêxkj|ÈÄoS:ÝÄI©ìüüKf•+3aâ¾÷ ¿H³fÍ(V¬˜IýF6vÜX|ørþÜyºtê’iÜ“'NÌ'C>I7ÞÔÉÏ_Û¼i3›7mÖ‹w÷þ]Ýߦ3«c±ømÛ¶%8(oZ¿•òqŠöÚ³vÍZœáq¾úê+öïÝÏùóçéðN“òÔn›š€KUÎ;G§ŒÚ-uü¯Ç~Í¡ƒ‡Œ–©X±b|=ök³ìhªMgÉzgnN[6µ¦ØÉïŒ~gŒ¯½Ú¼ys¹~ Bí`Ò‹w–\"uXFBÛÔÕ-RÏAŽÿ %g¦Lß3ou %Æ×INgIêíÔK É:ÉB~åÛñßòðáCš5oÆ€ ƒÈ¨Hia‚ ‚ /ÙÕ~y"ý§Ÿê¾¤gRzïúôNEP%©ð;퇧‡§þt‹d›d]¢è˜h ,d–q£c¢¥… ‚ ‚ ¼„dWû½ìéÓòüÅ=…R÷’‘–¸„8i1‚ ‚ ù„ìj¿—=½Q‘ ò!AAA0ÉñIñh5bAA!ßààà¾H½Ê£¨Gb%AA!_âVÃÍP$“õk×ë‚ ‚ ù’¸Ä8#"ùWBÄB‚ ‚ B¾¢ª«;öÖÏ?Q-ßàAA„4ˆHAAÉ‚ ‚ ‚1™~¨¾Š‹›X)£P( æ‘ûxï yË6zû½¶nƒåF=QŒ‡û¡ XŠy}V(h4š|¿¼Ã%"€«—ÅRyíE؆ 7zÞÆŒ$†{…ILL>ûôCA°/¢}¥nóù=AD²ðŠáës@Œ ‚ ÂKw›OçD$çcš6o¯Ïùÿù_A²ËÀ¡#òlÙ4M®>=P¤ä©!44”Ê•+̱©ââ& óðßÀ¡#ŒÎ…4ö˜×këfÆŒ$Âê¦Q“fX[ÛHŸÍÃýP,Å‹º>kÛ|n –¼–ÿ«8'9µmóW/æx›¯êêŽF£áØñcxzxÊêùȯM›·#‚ ‚…‘,ÂJAAD$ "¬ä†GAÉ‚+¹á!ß‘˜˜Htt4*• µZ-3±èêU]Ý3 ×NrׯKo;§éðnWBB.³dñÞz«¥Ñ8z3ôÓϨæêÊÎ[s½Œ/BX…‡G°aã&Nž:Íýû÷%ЧJ•Ê4oÞ”vo›¿ìŠVŒ[RÈøJ¥Ç¢ŽÔ©S‹þöÅÅ¥j¾ºá1ž¦öO-ÉÉÉ4jÜŒâ%гçßí™öSûHVlj¬ŒE¦¤}}ÛÜs!äìyxUíOTôl¬m(` ¶¶¶(Š\êñññz/‚) ìììte4fccóò_gcÑâ%\¹r•§O£qtt¤Âëåqwwcâ„o^úú;wŽ+V°{÷nnܸA±bŨY³&cÇŽ¥MC½ÈßÿÍÆ Lyù./¾ ˜c"ùe¡s§Žüôóoü³}gº"yÛ?;èÔ©c¾V§NÿÇÄIS‰‰‰Õ‹wûÎnß¹ÃaŸ#Yɹ…Z­!òÑ#yûà{ô8óæþBMw·,Ù%#QŸ¢?'nx,Áñ'‰zü˜~ýz‹š„—ääd©R¥—¯\ÂÁÆ[ìííu"5§‰‹ãÑÓ'¨ÕÉ©œV8* À£è'z^n¥Ò §ÂE(šƒ"Y­VZ­ÆÖÖÖ@kñ·³Ë’­¶mÛÎè¯Æéí '<<œÿÎøˆä—ñ†­nݺzÛ÷ïßçþýûìß¿ŸU«Vñá‡ê…»»»¿t}(GDrf'ùE7‚Nïväç_æpààAâââpppÐïÔ±±RÏÎÏÙ9'Ú´Ë—-毿ÖrîÜyâT*Ê—/Gï^=èÿa_]_L3*Vþ¹ŠÝ{öz¤¤$jÕtgèA´nÝŠºõâ¼ÿf͘F÷îè•sÇÎ]|9ò+jÖtÇkËF‹œ»wï1gî|Žø#22’bNN4mêÁˆáŸë®æÆÕÚdþÜ_ùcå*ƒ‚ÞlÈ7ß|­sVd¹kR<¢ÉÉjž<}LÉ¥([æ5‚/ð(2’¸xì(T¨ ÖÖ9#’ÕÉ$&&¡Öhxð0Ç¢N$&&‘ü̳œ˜˜„B¡àÉÓÇ89Ó ³$ ‰DÇD§R¯¢REg®\ ÁÞÆÖ¤ps¹qã&ïuíBÑ¢Eô®§½{õ0Ú¯Òþ~–Sm*5§NÒÛvvvféÒ¥xyyqíÚ5ƒø/ŸS ON·ç½z¦Û÷èÑ#vïÞ‹/7¬¡z5×låѹSGÎøeûö"ùŸí;S<ÎLµ0§ŒM³ñïMøû_Ð oïÃ:ä­Éþþðôhœ«žä”‹&|Ø×¼ÇêÿÞœÊc‘Èõë7XôûR“ùø£3L;ækýGM×oÜdÎÜtïö¾Å뛲šÊƒòÉÿˆˆxJp=æ·'Nžfñ¹Âeî¼…zeËŠrâÃ0gÎøñàÁC>x¿ë+1.ܹs—=ûõ¼Ž~g9ãwÖ îˆ‘£ñõ=¦·/ôúuB¯_gÍšu¹îý1óþX¹*[ö¸}û6=zõåñã'™Ö0yÎjVÎÉ ÁŸˆ÷ïf| ë‹QÓ§ïG„„\Öo—~gùdØç\  ÿ~Œ3–õþ6É›·xˆ‘¬rçÎ]ÞïÖ“‡#Ÿ×="‚-[·qØç[6mЉ_sâjÑÞ¨hñ>ìùóþlÛú·A\sP(”¨T*4hHHL &6š¤ä$*Vt¦²³ çΟ!<2‚ø„ 8¤ˆeKÏWV(”$&&¢V'“˜˜@rr2‰‰‰(JÝx¬P(°±±Aù,®6Ì""=9™˜ØXbbc‰zE‰R¥¨ß öv\ ðGá¨äÉ“§ÄÄ¥žjT¯Æyÿ tëÑ›íÛÑ´©'M7ʵ±/§ÚTæ×Á”ë_ñâÅ_ oyެnQÕÕÝèÏT~3Ÿ°°0† ˆ÷¡½žç¿SG™2y±±±üôÓ¯Ù.c‡ï`eeÅߣG|™5s»vxÏT;™+M韻3˜j‘ÝþÕãdg\˜;oQQQÔ®U“¼6qáüþñÚDíZ5xGþ`Ýš?¹äÏ…ógØþϾýf,îY˜çž]ìÝ·ŸÅ çñßéc\ Љtsì1wÞB?~bRý=®¥Çê2eJ³há\üþ;ÁÉãGø°_Ÿ{¯îñ3g>!!—yíµ²,\0‡Ó'}¹è†5­Ô½GÒ±Ã;”,Y‚óþ ¾¤KÆÑ£Ç)X° Î‘]æÌÏÇ‘:û]ô?Ãöm›©]«&F2gîü,ÅÕb,nTTsç-ÈV¹­”ÏD²ZMbb ‰ Ä'¨xøèOcÓ°AcÞ¨Ó€ˆÈ„E„ó(êqJ| ¾Le¥L¾)ó£žy–±R*ua …k϶­”Ù—&†¸8QQO¸wÿOc¢ñðhN-÷:$$Ä£Ö¨Q©TÜ K?<«eùnúJ–,Á­[·ù}Ér>ì?ví;±|ÅJÂ#"ô⦾ñÖöñÔû²ÒÏrªMeÄ“'O0`@Jÿìøj¼Ï•'=ɇ½}XºlK—­0?ýß™lçáääD³¦žxöa×®Ýô}æEÝõï’““iÕ²NNN)c“ÆQ(øûûpîœ?QQQ|3î+f}ÿ#gϧAýzøûû£P(²|·™UO²Ös`l`L»’„6]||<Ë–¯ä°ÏÂÃ#HJJJu‘ Ï4ÿo¾ùІ ê붇 Àæ-^ܹ{7KB?566Ö …Î]»éÅ­RÙ™ àK 2 —ªU(UªuêÔæÝŽï0`@ÿ\¯÷ìïgÒ¨QÃlÙãˆïQ“ëŸÓçäûYßÑÔÓC·=òËáüµz-7oÞJucÒžš=‹7ß|^÷FêlammMï^=™;oë×odꔉlõÚŽZ­¦s§Ž(PÀ"çÀ˜ýjÔ¨®³_ê'æÄÕ=-H'î‘#G³Un[[»”åß4jHLJÀÊÊ:E*DÇ<Å¡€íÞîÀíÛ·øïÌ)J/I©%(PÀÁ"¶³µµÓ‰äĤ÷ØÖÖN÷·R©ÄÆÆå3‘¬ Ëqq*ÂDð0ò!yR¼xqâIJJÂÎÎ+¥ª87ïܤћ鄫TY.KÕÙ½k;^ÛþaùЕܽ{O7åiþ‚Å,^8Ïh¿¶T?Ë©6•·nÝ¢cÇŽ\¸p*Uª0cÆ Éé‘ÝÇ‘##3 ‰‰±H9;uêˆ÷aþÙ¾S'’ÿÙnڪ攱xñb¸º¸pùÊUââTxöÁ±hQúØ—E‹–àí}w77._¹J5¢_Çü IDATW½—rÒ“¬VeË”æú›\¼HƒõLJ?Áb¶zýc4Lëψ´ó: (ølÀÌÚ J¥‚¢E‹R§vmúØWW‹•ÕTR?Ê7Fll¬Á¾š5ݲm'srfýÓßÿ÷+3[.§Æ‰ìŒ ‘‘)O‹œ+éíwv6œŸ7kætÆ}3àK!º›}ûðëosùqö,:[pÅSlÞM”9ö0§þéÝ0ÇÇÇ[䜤¾é(T¨ N,iÑ>²­Y3ã6Õ§wO-^¶v0nìغղS-L±_j;˜÷y˜éqÍÁÎÞU\ÊÉ©² 6Ö)«:(P V«qv®BùrX½öO (€ƒƒ½E¦^ØÙkErVVÖ( ±³O-’­P(”X)­ô²s£Ëí»wéÕ£/±qÑÄÆÅ`og­­=¶66:aÞ¥S·tÃUqªl•¥hÑ"|Ô¿½zvçïM[8yê4>>¾<}ú”©Óg°k‡WŽ}9Õ¦ŒáççÇ»ï¾Ë½{÷¨Q£{öì¡téÒ"’sŠâÅ‹ξ½;q®T)Çòy»mkð;{Ž;wî¢AÃÙ³çqpp m›·,ZFÆ\ áb@‡¼ãáÙš6õäà¡Ã´lÙ‚äädšäÂT‹´ÂªI“Æ\¿q“E¿/eAÍ_±··7ˆ—Ök{Ø'Å3÷íø±4oÖ”‚ Í;º˜è]°5¹Ù©C†wáÙ,«©899òàÁCÖ­ù“×_/oRšÌÖ5ÅN–ö$k§Z´o×s""â¡¡×õ¦â„††¹qqgÇö­„‡‡sãÆMÂ#"8uê?Ö¬]ϯ¿Íµ¨HÎJ_ÉŠ=Ì©¿µµ5IIIÄÆÆêybÿ;ãg‘s’v¥cS;J”(AXX/èy’ ã§cÇöxyýÃŽ»pq©ÊÕk¡ÔªéŽ›[ ‹ƒÌìW¬˜S–â>3·x6&žMŸPÈ6Ö6ØÚÚ£T(¹q=_oª»¸R¶LY’žy}³‹ƒC” gS*”ÏD²ƒCç"Y¡ÄÊÚ F£ KJŒÏrž …‚²eÊŸÏšuÒ²ekÊ–.‹ÒJ‰­NüGD„g®R©²]m›ï×·7ýúöæÖ­Û´jÝŽë×oäèØ—Sm*-Û·o§wïÞÄÄÄЪU+¶lÙ‚££#¯ yò‹{oµjÀ˜1ã8ïøøxbcc â?VÑõýê¼´iÝ FÃö»Ø±c†¶mÞ2X.»elÒ$EüîÛw€  `Z4o@‹M ¹¬[bÍ£IîˆäÔ¢·WÏn)R˜K—B8øSþݽ—°°p’’’HLL"<<ÂÐûlÊB‘Â…±µµåö;̘5;O6rsʪ—.…õ¦eîáÑ€éßÍ"0(˜„„âââ¹|… 71hȰ¿á±ŒHÞK©R¥2œò² Íšz¦Ü(M˜LPP0*•Š  `&Lœb·{Ͼ¬ßð7O£c¨]»mÛ´¦eËæFûÂË`sê_±ÂëÌ™»€GñôéSôfÜ7rm¬~»mÊø4æëoØ»o?QQQÄÇÇãçwŽÏ>¡÷£þý€”9ͺöz÷°ìxé™±ý´áæÆÕòí„ÉÄmÖÌ3[å¶··G¥R¡P( ²­-övDEE±zÍJ._æí·ÚR±b‹ dmR½œ§´"1!{{{]˜•••n<Õ†e—¤¤*;W¦í[m¹pþë7®3ø€J¥âí֩£ óZ–Žï¾ÇÜy 9uê4‘‘‘$''Åî=)×úJ•*êÅ/X0å‰Êŋז¬ô³œjS©™;w.]»v%&&†þýû³gÏžWJ çYOò—#¾À÷èqÎû_àƒn½r4¯NÞeûŽ]lß¾ šgû:Z¼ŒÞl€•••n®ª¶¡6kš²>äºõ±²²â͆ rÝ“\¼xq~˜õãÆOâæÍ[̘ùC¦é›7oÊö»kä™×0§¬+¼®›jÌV…ô1§OÿG`P0C?ù,×êg®'9½iWB æÖ­ÛôëÛ;W¿Ê•ÓãÂð/þǃ‡ð¿p‘N]>È0îÙ³ç8{öœÑ0Ï\zÒci{˜Sÿž=»3sÖl–¯XÉò+_ÈX=bÄçœÃû°Qû9991bÄg©Ênz\-þ.Ì /Z´_|ñ¿lÙQ¡P<É @¶µ±¥€CAT*¶­ÃÎÖ–Ö­ZcccJkñ/ i§W( l¬mQ(º—õ´ždFó\$§ Ë. ñ*”J% 4àéÓ§lÚ¼žÅKÑþŽ888èæ7¬ß€§ÑOÙ´Å0<«e¹Â¥æÎ3>ìÓ¡zÛU*;ãᢞàÕ¶¿¬ô³œjSúýôyß\µj«Vé¯Â“¶-³eê}yñë{yÒ“\¢Dq¼¶ndèAT©ìŒ­­-¶¶¶Tvv¦w¯lÚ¸Örª™'ŽŽŽ\ !$ä2ŽŽŽ:¯‹%ËX°`Aj×®…J¥¢Fõj”*YRwww7âãã©S§–în27=ɵjÕdõª|Ô¿..Uqpp@©TR´Hjº»Ñ·o/V,ÿ]ï¢ÛµK'œœ±±±ÁÅ¥*“'Ï“"Ùœ²þoØ'”/W.Ý1£ðbNN,_º˜¾}zR±B…”‹’ *¼N—Îïòû¢yyÞ“¬›jñN»Wj\(_¾<ׯ¡e‹æ888àèèHýzu~pfÓÆµôìÑ ^ÇÚÚZ—ÇàAøåçÙ/¥=Ì©ÿGýûñí7c©R¥2ööö”)SšæÍ›²lé¢\«‹eóßë5r8nn5pppÀÖÖ–zõÞ`ñÂyFÊÜH™7ݹSÇLŸšKùråØºeïuíBÉ’%°²²¢dÉtíÚ™­[6P¾\¹,ÅÕ2oÎ/Ô¯WGGGìiѼÖ­6×<šâ U*•ØXÛR¨`allìøw÷.ÖoXCƒz hÞ´M2ª¸Ø) Åó—óŠ.Š•Âê™~–m˜¥P«ÕÄÅÆ`ogG—Ž)]ª$¿ü6ߣ>ÏD0ÄÅÅ`og›nxVøqöLÞëÚ…ªU«àX´(VVV8-JSO–ü¾Ð`啱_¡bÅ F¯-Yég9Õ¦òŠñ®!44”Ê•+¼HRÅÅ«—ÅRyïý :ÂàœùxïgÀáçÍkëfÆŒ”§>©,X֓ܨI3¬­m²ÜgÛµïÄ£GQ?ê•••7úa^ãeünZnܸI›·; ÑhصÃKïÅÝWÙö™]Ÿ‹ubêwSùí—yÄ©Tœ9sš£Ç|iÝò-œ+¡Š‹#))1Ëm^£ÑdÚ¾ qäïÍ›ˆŽ‰Öí+T¨=>Hñrnܼ‰èhý°îïwãé“(‹äŸ[;{¬¬¬9vü×o\§¿þzyežQŸÚTjÛæ5®^ÌqMZÕÕFñãÇðôð´Üt SßlÏ *§ßÂÙ„•ðrcÉó¸çßíbPá¥a⤩zë+¿Ó®íK#sí§žƒ/±Õk 6bð€A$$¨ˆ~ú$WÊ¯Š£G·îÕãUqôøÀ0L›cåIˆO™£íѤ M== òÊ,\È_XL$¿LBòU½/RX rÃ#/’Â… Ó¢y3¦O›$ÆH…F£¡R¥J2èãh4jb¢Ÿäª—0!!ž„„ôW‡ˆW½»¤LÁÈj¸ "Ya%È x™Ó§Mfú´Ébûtˆ‹‹¡o¯¾¨Õ)sŽÕjµ4xéÏ‚(Å"¬„—ÿ†G!-‰ D?}LlL´dA‘,ˆ°’AA²L·a%¼7AK!«š¥ žä|,¬äÿWãÈ‚ ‚¥Ðh4TqqË“¿ÜFÖI~‰‘u’…´dwd!çû¡ XŠu}ÎÎ:ůRþò’Ü«G–ÖIöñÞ/–„—L¸ ‚ }]ò„¬“©HVXòûB®0`ÈðtÃÄ@¯8Ògó~?„W¡¯ç÷ü…|ÐÇÈdº… ‚ ‚ ¼ê¤n!/î ‚ ‚ BD$ ‚ ‚ ‚ˆdAAAȘL_Ü“7GAA„W S–è´6õ@‚ ‚ ‚_ÈT$7oÙFÃAAò2'YAAD$ ‚ ‚ ‚ˆdAAA0 k1A å]ÝPÁ ûaØ¿Àñ/°öªü]}િ|éRAx5©ââ–ëy*ŠlEZD² BÈ2˜¦Ñ¼e9'Bžk+BÞ!7°Ô!"Y!!FÈF“ë« É9‘¶"9ˆdA/î‚!/RðÈ9y1(Š,Ù^¡PˆñÉ‚ ‚ ÈÍ‘ ˆHAA„äÊó¬8ól‹Ð¹Új—m‘£ùÉp‚ ‚ d›ÈÈHþ„ÈÈH1†`q“ãYæ7†no¦S«Þì½½˜©‡:qïéUÉ‚ ‚ äMââT ùä3|||òÉgÄÅ©Ä(‚EÙò;5«ÔçõUI´ÈГpw«ÍÞ«+^-‘|ð 7ýúàzp¯U>ý>æàAoƒxW®\eî¼…¼Ó¡3U]Ý©êê.­DÈw|1b”®ý›Ú‚‚‚™6}&mÞî@ ÷7hâÙ‚>ÌÑcÇ â¦>¶±Ÿ±‹áO?ÿF‹Vm©áþ-Zµå§ŸC¥Re¹ ù™ÀÀ@¦NŠ»»; …Âì—›Î;ÇðáÃquuÅÎÎŽ²eËÒ¶m[öï7¾Rll,ãǧR¥JØÙÙQ©R%ÆO\\\®Ô7m»2Öæj¸¿‡gKþ„»þ5ùØ–¨[HH½zõ¢T©RØÙÙáêêÊ´iӈ׋ϬY³hРEŠÁÊÊŠ"EŠP¿~}fΜiÿEÛ='INNæËQc8Þ€óçýùrÔ’““³Ü>:¾û^º/j4:¾ûžÑ1*³q2'´Dfc¨)ãjzLžú.Íä©ßåêyÍKº+<ú¾77Ó¡Á‡==ÀÕ’4‰„‡ß§ŠSÝË7×ç$/þ}?ýü«Þ¾S§NsêÔiƒEŸßéÐY® B¾æàAoþýw  66Öätº| ·ñ€ˆˆ=vœŸfÏ¢k׬õ-Fðÿ}ïÑcº}wîÜeñïK¹x1€?V,щ¼œ*놻{ö.Buëê_ îß¿Ïýû÷Ù¿?«V­âÃ?Ô;]»veß¾}º}7nÜ`Ö¬Yü÷ßìÙ³'O¬@˜˜HxDáøøør÷î=† ˜iÛÌnÝ‚ƒƒiܸ1?Öí»|ù2“'OæÔ©Slß¾]wŒ>úˆ 6è¥úô)~~~øùùáïïÏúõë_*»g•iÓgràÀ!½}bÚô™L21KǼÂÞ}h÷¶ášÊ{öîçRHHž²9«}˜z®ãããÙ¾}ìØ±“ñã¾ÂÎÎ.ß“«ÏM¦só>D©oñ8ñ6 ÔçZ¸?‘‘ð¬ùAŽå›«žä€€@~ùu… bÖŒiœ8æÃEÿ3¬ús9-š73¼‹©Z…á_üwn“+©ïˆ‰‰aÒ”iŒeÞš°µkÕdꔉìß»‹ €sxÜCÛ6­X¸h‰Ñ4WBŒþR³cç¿ø=FùråX¿î/üÏfÃúÕ”/WߣÇô¼~Y)C~ÄÍÍÉ“'sñâÅ,¥oذ! .$$$„øøx®]»F×®]˜1c†^Üõë׳oß>*UªÄ‘#Gxúô)¾¾¾TªT‰}ûöˆ¾Ü$u› 8Çþ½»èÙ£«þZ“izKÔmüøñ<~ü˜®]»‚J¥"$$„®]»²sçN6nܨ‹»m[ÊuiáÂ…„‡‡“˜˜HDD .Ô Ïëv·S§L4:vdU k™?¡øÔh4ÌŸ¿0_Œ {öîçÉ“§¼Ý¶5mÛ¼ÅãÇOØ»ï@¾#ÏÜÞC²MoT|‹Ð˜“$jpvhÌ6ïU|üƬ½ÁÌU‘¼zízÔj5ã¿ùŠîÝ? D‰âØÛÛãѤ1Ë—-6ˆ¿{×? ÿâ3\\ªÊ•TÈwüøÓ¯Ü¿FÚµø°_³ÒnÙ¼¾}zQ©RElll(_¾<3gLàæ­[Y.Óöí;øæ›¯iP¿  ~½ºŒ÷ÿlß™ãexÕ`Ê”)Yö(Ÿ:uŠaÆáââ‚­­-ÎÎÎ,]º€k×®éÅ]»v-?ÿü3M›6¥P¡BxzzòÓO?é…[‚k¡¡ ú?jÕi@­:õéÙ«»wï5)­ •*Uäë¯FðàÁÃLÓX¢n‡¥xC-Z„‹‹ vvv¸¸¸°hÑ"þúë/]\gg甋¨R‰R©ÔM•±²² J•*/Äî¯ eÊ”&(øûÔÛ¿oÿ‚/…P¦Li‹äc©i™1mÚ4¼½½ÍJ³iÓºtîD—.øûïÍéÖa÷î½ôìÕZuêS«NÆÕk¡YŽ›šºõ¢ª«»ÑüwìÜEUWwº¾ßÃâí@•Ãú 3ø Õ®Ç$"á*õ»ã}a5Š{R¾hµm‡¹*’OŸþ€[·îÐáݮԬ]ŸozòÙç#òÜ£Ax‘œ={޵ë6`eeÅÌ™ÓP*³ßU#Eàääh4Ü£i+ªÕ¨Mí7Ò©ËüúÛ<¢R=v¸@½ºoèí¯_/å‘``P¶Ê X†P¼xq½ý~~~)çÚÃCo¿§§ç³vwÖ"ùß¹s—=ûqÈû0qqqÄÅ©8ãw–χ4)}RR7oÞâç_~ ò3Aš–¨[fóƒµy,_¾œÊ•+óé§ŸR¢D ¬­­)Q¢Ÿ|ò •+Wfùòå¹n÷W‰O?ÀÜyϽɆyóSnX†= ÏIlll,rœÙ³glÖðí;w8~â$%JÇÓ³ M==(^¼ÇOœäλFÓ|>|$güΧ"..ïÃ>ôìÕÏh|sâôï߀õþ6ۼŠ€Þ½,/’½‚æÒ°V tâf씲«Š2ÑŽ£þûyßmtŽ·\É÷ܥ/^BHÈeT*QQQìÙ»Ÿºõæ¼ÿ„|Obb"ã'LF­V3dð@ª¹ºfû˜ÑÑÑŒ÷--[_W2<<œäädbcc fÁÂÅt|÷=nݺ­‹óèÑ#ŠsÒK«ÝŽŒ|”­2ÙçÉ“' 0€Ž;Ï%K–ÔÛ_¢D """,R†¹óEíZ5ùÇkΟá¯MÔ®U3Ý4©½wÕÝêðV›wX»nöööŒÿµÉ7Ù©[Æ Sذa\¹r…øøx®\¹Â°aÃôòH¹Ñs"111Ý>\´hÑ\·{nâã½ßìŸ9ôèþAŠ79(X7ßyÿƒS¦Liz<›ŠcJ{ÊÈ3œvŠÈ¬™ÓQ(ØÚÚ²`þœlÛiáÂ…„††²víZƒóŸ›7oMyA±C{¬¬¬°²²¢c‡öh46oÙj4¶¿]ô?Ãöm›©]«&QQQÌ· [q:vx‡’%KpÞÿAÁ—tûÃÂÂ8zô8 ¤Ó»̶ÏcU8ßûôdÄŽF¼ºZozÍí'!œ»¿vuûp5æO’éW´;›}–ÐÝ}ö6…^>‘œQ£LJJ m›Öìß»‹À‹gÙ¿wmÛ´F¥Rñý?ÉNÈ÷,þ}—/_¡bÅ |ñù°lïÞ½ûôìõ!çΧB…×=R~s­šîLš8žÝ»þ!ðâYüþ;ÁÊ?–R£z5˜1ë‡LóÈ쥕ÌÊ X†[·nÑ´iSNœ8A•*U æ$§w¾,ýygŸ#¾Ìøn*nn5pp°ÇÍ­ßMŸbö±T*wÓñnYºn?üðvvvxyyáâ₽½=...xy¥xÊR{GÍ­[·èر#AAAÄÅÅLÇŽ¹uëcÆŒÉu»ç&† 7ûg¶¶¶:oò¼‹ ¼È–òò¦f«×6¾0[[[-œË[­Ì¿™_½z5·žM';uê‹/fÎóĶZ­ÖygµÓ,Rÿ½y‹jµÚ ¶¿ÙÛÛS£Fu];räh¶âX[[Ó»WO֯ߘÊfÛQ«ÕtîÔ‘ ˜×·£ùõØ Z7êÌ„þ‹Œ9ÈoÇòXF£á¯³x¯ÕGD&…rGu÷Âï|÷‰±Þ,ß!WÚy®®náääHDĦMDÉ’)wЕ*UdÚÔIìÛñ$ ‹§¼Ô6cúÔl¿ÅÈ¡ÿ#<"‚*U*³rÅRJ”пuËFƒ‹SSO*ÌŸÃ[mÞáøñ“zÞ³ððpFFR*•WDûñ€´fSË d???Þ}÷]îÝ»G5سg¥KëÏÛ,Q¢wïÞ%""‚²eËêök=™æxº2BûDÁÙ¹’Þ~ç ¦M¤~I499™°°p–¯XÉŸ«V³lÅJºwÏø vKÔÍÃÃcÇŽ1}útN™*âììL—.]øþûïyýõ×uqMK—.ÕåW­Z5–.]Êk¯½†¯¯o®Û=7ÉÏR÷èþ‹/% §D™2¥3m iÛSZGž1¶ïØÅØq°µµeñÂy4mê‘¥2¯X±‚Ï>ûŒAƒÊرc±µµ5ëÇŽàîÝ{¼ÿAOƒð;wîrìø šzz¤é_ÆûÛC#w1'®–>½{²hñ¶ý³ƒqcÇàààÀÖ­YŸj±ììWÔ¯Ù„j•Þà~|ƒÚMäøå|wèê”iM¡¢p/ׄ“Q«±VÚQÁ®!³ÎðÆËr­[Ü“œÑÛñ5jTÏ0­-‚ßIHH _ÿFŸÈ˜úBÉÁƒÞôêÓŸðˆ7~“¿7¬¥lÙ2¦VJoWM÷)‚ìŒþÊ3϶ÝÜjX´ ‚ilß¾æÍ›sïÞ=ZµjűcÇô–zõêé ¼´‚/írrYE{³z]ohh¨Ié­¬¬xíµ²Œþ97ofþ¢§¥êV¯^=¶nÝJdd$qqqR©RŠ hÞ¼¹.^fó—S¯ž[vÕHñ&`ÃÆM@Ê\esEgfüûïÆ|5;;[–ü¾ Ë9eÌ;ˆ¿¿?99™»wïñÛœy-Z$Ó4æÔ-£¶tèÐC‡GXXË–-㫯¾ÂÊÊŠÏ>ûìù cÍ”ùÕC† áÒ¥KÄÇÇÂ!CôÂsÓî¯"={tÓ=)]º4=º[vMܽûöó娯°µµeÙ’Åx4iœícV¬X‘;wòí·ßšý40êñcöí?€B¡àÐ=NÇCRÖÔÞ»o??ÑKûí„Éô·fÍ< ò1'nj>zöߺõŸ¿°×;k/ìõ«3Óÿc÷™5¸8¼Ee1®ª|‰±¹Çû->æ©â.×ãNñš}-Tq‰œ pÕ?ó¶k¬§×öMí;™ÅuttdÃúÕT©ì¬ó*<`ˆÑ¯æ5õôÐû˜ˆ9eÈËøxïgàÐ964³5>µùjã¥-‡©éµ¿ýöÛF¿Æ×¶mÛ,}Ôâêå@ª¸¸é=~¿}û6]ÞënpÏhüΈO†â«1£2<'æÔ-=[fdÏŸ~ú‰Ñ£Ÿ¿M¿mÛ6Þ{ï½táååEçÎsÌî/ú†-uÿF… ¯cmm““;´gËæõzY„ÜaÓÆµôêÙÊÎÎØÚÚbkkK¥Jéÿa_víØªÈÚÁ}ñ¢ù|úÉ`Ê•{ kkkÊ•{O?Ì¢…ó^ꯆåoô¶mÛ7n+¦¬_]±bEƇ———ÅÎ_ùòåÙ¸~ -[4ÇÁÁGGGê׫˼9¿˜| {{{ªWseÜØ‘RéF IDAT1Œ2áEOKÕÍËË ìíí)R¤­ZµbÇŽz K—.ìÝ»—víÚQ¬X1¬¬¬prr¢]»vìÝ»W'sÓî/ŠIÇÓºu+½}­[·bÒÄñy¾ì ävªE¯žé{g{=›ÿ›vZƼ9¿P¿^]qp°§EóflX·Z'z³×ЛÜHù"`çN3Èa­´¥o)¼]ñS~Þð·î]£~‘^Ø(í‰K~LÂ]9ãöjG“òKëIÎˈ'Y<ÉyÝ“,¼rÚ“ü²cÌ“,çäÕ¿ÙJ«ââTôë?€óçý©S§6«Wýƒƒ½Q/]n¶•Ü +Ó=-©µ²ë}7—7nÒæíh4víðÂÕÕ%Ó4¦Œco³ðÔpœ+T¦k“O¸›pRÊêÌZ7Œ¯›®£x×Ì#²ëI¶–î.‚ Bvpp°géï óõ7ü4{–@~•É/Îʼn“¦².Õòoï´kk’@6'û×øÚs-[æ—M#y¯õǬ=û#MË÷  ²ñññº÷ ´_¹´Ä‡¶2BD² ‚ Ù¦X±b¬Xö»â§pá´hÞŒéÓ&eûXjµµZMrr2jµµ:™ŽÎùQ—Uÿ̦|¡j4ªÞ˜˜X”J ¥¥B‰••¥Ò ¥R¡ûØJNL[‘,‚ ‚ð’bŽ';;^ïéÓ&3}Úd‹—_£Ñ<û©u×(Ö×›QkÔ Ö¬HF£Qbh”ŠTñ•9:§_D² ‚ ‚ë(•J”J%ÖÖÖ:¬õ.«Õ)BЛf¡j!Ó-AAÈsøxï##õÚåVVVy¦\"’ALàU{#_ΉU²úÈ>¿®ž%¼¼ˆHAÈYjLΉ "’ó-·C SèÙï•#ñÙïifmžý^­O '1Ï~é¢ <û ùšæ-ÛˆÇRΉ Ùäeœ¢#"YAAÈ1^Ö¯JŠHAArŒ—u>ºRN ‚ ‚ ˆHAAÉ‚ ‚ ‚`™ÎI–ÃAA„W‰C†gºJ޵©AA„üB¦"YÖ£AAò2'YAAD$ ‚ ‚ ‚ˆdAAA‘,‚ ‚ "’AAAD² ‚ ‚ äÖb!7©êên°¯@T¬XŽÚ3xÐÇX[[çHžWBŒnçT>yÁ¶J¥’bÅœhР>Ÿ û„5ªK#ÌA{ãE´sÛâ½{÷Y±òOŽ9Ê;w¥J•¤z5WÞnÛ†.]:½týÁÜrä•òÊ8 "’AGll,AAÁsÿþ}¦Lžç/@/Ë…T­VóàÁCvïÞËÁƒÞ¬ùëêÖ}Ãâõ~UF~lc¾¾Çø|øH¢££õö߸q“7n²gïþ,‰dáÕAD² äZ˜˜HXx8ýµ–å+V²}ÇÎÉ9%>òŠ@L]Ž'OžÄ³âÂÅ~úå7ÖüµR`œï—ñFáλ|öÅ—ÄÄÄðvÛ6|ú骹ºpëÖmNœ<ÅÖ­Û^êþðª–WÆAÈydN²ðB±±±¡|¹r|þÙ§ÄÇ'ÄÙ±sU]Ý©êêŽ[ͺ¼Ó¡3¿/YNrr²^¼k¡¡ ú?jÕi@­:õéÙ«»wï58žöXææ‘:6®±}©¹{÷cÇ}‹GÓVTw«ƒ‡gK¾;ž;wî-ÓaŸ# 2Œ =p¯Uví;±òÏ¿P«ÕY²o‘"…iÜøMæÍýÿ 9RïŒÂ""0yÊtZ´jKu·:4lԔχäêÕkéž›Í[¼xïýÔªÓ@·Ï;+Njœv™-Mí¦°â?‰‰‰¡m›Ö,\0‡Úµjbgg‡U«V¡_ßÞlÞ´>K}2½þaé6n)²[^SÛxVìg¬/Xr0µ}¶|«U]Ý ¾¤Û·}GJ]¶ïØ¥Û|‰ª®î´|«]ŽŒ‚[ˆ'Yx¡$&&ÁŸ«Vàæf8Wî•éþNHHàÊ•«üøÓ/$&&êÄõ;wéѳQQQº¸güÎrÆï¬Iå0%¬xéÞïÖ“‡#uûÂ#"زu‡}ްeÓÊ•{M/Í Áúy]½zïf|ÀÇ}hqûçD½ÓÎ{ô",,L·ïÑ£GìÞ½_6nXCõj®zifÌü?V®J÷˜¹m§ì•v[çìÈ‘£|úÉà\k7/Ó¹3µ¼æ¶qsì—Y_ÈÍöéѤ1ÿÞ„¿ÿjT¯€·÷aò¦Ó»ôD¸§Gã!§O²ðB½65Üß E«¶¬øãOœœœ?îkƒ¸›ÿ^Ç•®„xñ,ë×ýõÌðUgî¼DEEQ»VMþñÚÄ…ógøÇkµkÕ4©<¦ä‘úñ¥6nFhçÌÏÇ‘º2]ô?Ãöm›©]«&F2gî|ƒ4eÊ”fѹøýw‚“Çða¿>¬[¿1Kv~úô)'Nœú?{÷Eµÿqü½Ùd7eÓ@ !Bï±#¨(ÍŠŠ],(* ¨¨×k»\¹êÏ‚]A‘RHè!ôžÝdÛïÙôÞ À÷õ<óvgwfÏž™ýÌ™3gxüÉgèÑ£{³û÷HIIáÁ¦³mëŽâï½»X0ÿE Y¾üí*ë½aã&þóÁ»ü½owµåÜÜåÔ’RêSÇêóÕ; %+-…+…“æØ^jr)}wõ]߆Öñ†”_]ÛBS÷ ©ŸC†  *J Á‹…í;vâêêÊŽ;K[ÂKžR.$·Ä~@ˆ–&-É¢Õ°Z­xxxTxÌ`0ð¯wÞã÷ 9wî<&“©ô¹ääs¥ïøc§Òò°xaé•Û]»vañ¢ÜZùq•ç÷ýýO•Ç^_ö*ö¯ñ=ëSN ýA­®ÜšãG¹1õàBÕU•JUºíÕU%eÑÔuhJo©ï¨©ëÛ:ÞÐò«k[hê~ !õsð A¨T*¢££8x0šììl^˜óK—½ÁƒQôëÛ‡èèhT*ƒ lÑý€-MZ’ÅEs„Ç¢Ù³k;Ë–.ÆÃÝììlÞÿ`E…ù–.{ƒ•ÿû„¤¤3~L€ ý÷23³ ®0OHHHëRße4T]딑™Yå5ýûõ­ðÎPº¥4j·³ÃÛÛ‹ë®Ë÷ß®¢oŸÞ-þ¹+«îs–WPPPå±Þ½{Öúšæ.§–Ô˜zp¡êjÉiôý^°u¸”¾»ú®oCêxC˯®m¡©û†ÔOoo/Â;uâdì)ôzÛ¶ïÀÃݻ‡»;Û¶mG¯7p2öÃ;áååÕ¢û!Zš´$‹‹F­VãëëÃÄÛn!(¨S¦ÞÍï6òê’…888Êé6€×_{•kÆŽA§Ó‘››GŸ~ƒ*¼———'iiéÄÅÅW4..®Îõ¨ï2ª®uòòò¬ò­V[åÇ­1 õÑRŸ»2oooRSSÙ¸áWB‚ƒëõFSëóÍQN-· Q.ÔwvÕ¨‘œ:uš7–¿MŸ/{áääT¥<*·H6ušòÝ]ŒÓíõY߆Ôñ†–_]ÛBS˪¡õsÈAœˆ‰áð‘#lݶ!CãààÀ°aCÙ²u;£FÄl63xÈ ßÑÒ¤%Y´šÖšˆÎáò×Þ}¥JK‹‡»;Z­–„„DfÏ™WåõÇ `Þ‹ó9vì8ƒcÇŽóâK ê\v}—à⢴">|¤ÚSÔå Zû:•<±4çç®íùÑW`Ö¬9DE¢¨¨ˆÂÂBŽ=Æ'Ÿ|Æ„[ïh‘Ï×ZF·hh=¨­,òÕÇôé÷àáîÎáÃG?áv~üi ÉÉç0™LFÎ;ߤzs¥hHomå×Ðú9x°~7nÜ̱cÇ9b8#G#&ædéˆBCjû!šBZ’E«1jÔHŽŸˆaûö?Jû^3öj¾ýî{f<üX­¯}ò‰GÙ¼e+ч3nüm Zn}—Ð14„èC‡+ìÐkj±™9ó1¶mßQí:yzz2sæcµ¼›ós×öüS3Ÿ`ç®=DEⶉ“¯¸zÝÐzP[Y6ä;«?__V¬xŸ‡y‚ÓqqÔÖP1 •JÅW_‹Z­f@ÿ~.#!Z iI­¨5f[mC ¼8o6S§LÂÛÛ FC—.¼õæëU^È·_ɨ‘#prrÂÃþ}zóî;oÕ¹Üú.`öó³ êPzÁSmøéÇo¸eÂx|}}J»—L˜p3?ýø µ¼›ós×ö¼7«ú–ÞOÇÐ4 †Ð¦L¾ƒï¿]uY×ë†ÖƒÚʲ!ßY}õíÓ›õë~æ±G¦K—œQ«Õxxxлw/šq??¯þ¾E×áR×:ÞÚʯ¡õÓÅÅ…=ºc0èÑ?_ßÒ2ˆŒìJQQ={v/=#"ûq)SV«ÕJ\\¡¡¡2ÄŠB!„¸â„…GbµZÙ½g7C‡ •–d!„B!*“,„B!„„d!„B!$$ !„B!!Y!„B ÉB!„BHHB!„¢åÈ÷Ä%£c§®Íþž*•ªÎÛK_ ïÛåËXêBù-ºxûà‹ýp%ýIH—”S'6Û{íØ¶IÞ·‘ËBù-ºxûà+}ù’…W áuµ”ó%\β_¾.fK²,„¸BMŸ1S °Z­-ÚR#å|aÊY¶ã˳Î ÉB!?BMÐØ¾{*•JÊù2*gÙŽ¥Î ÉB!*iÉVJ£ÉHzV¹y9¸8ëðóöFã ‘rBêŒ,„hm õzò 1šŠ1™L˜ÌfìÕjœœÑ9»à¨Õb08s.•mýüqqv–‚k„´ÌLBƒÃhÛ6€³Ég8yò8AR0B!!YÑX¹ElN\É¡ô­DzdT‡»ñv hôûé‹ ddeâãåKî½Ñj±·Wv/F£‘œœlãH:{†bS1W_u™DÚO×N¯¨²ÏÌÌdÖó/°üõ¥xyy5ú}²s²hÛ6½¾w7w2²2$$·@9 ©3 e±˜ÉÈÎÁP¬Çh4Õë5ö8jœðöpÇÎNݤÏq¥/_B²¢I6$¬ c@7¾úmŸÛÁû;¦óPø;7ø½Ò³2±ªT 0FCqqƒ“ÉhÛùipww§w¯~˜L&¶ÿ±ÅÅEdgç\Qå®×xð¡ÇˆŠŠæÁ‡ã‹Ï>ÁÉɱQï¥sÑ{O/NÄÇÍÕM*v ”³:ÓЀ˜œšFx§ü|ýQ«ëøÌf©i©Äœiaá‘<ýÌsõ~ßûx˜°ðH^|iA•çæ½8Ÿ°ðHîàáf«;ÕM-éHÆvz‡Ž¦H•Edà`fŽYÁŠè‡H)ŒoÐûdåäàììÊÀ~C+ÙÙY¡R©Ðh´hµŽ¶ =¹¹ÙX­† ^úú’ ]_wÜq*•ªt*¯üãÕM›Ùlæ©gf @TT4O=3«Úz[þ>¾$%%°mû&ô…ù¶mÛlë*åÜz¶Õ–”““ËsÏÏ¥ÿÀaô8ŒçžŸKNNnÅm<+‹ƒ‡É—«¾nô²Ž=ÊÂ… ‰ŒŒ¬³®2wî\‚ƒƒÑjµ3wî\ôz}“æ½u&3'—.‘´ño‹J¥Âl6×kR©ìhãß–ˆÎ]ɬô4tù]»t»b—Y„ä›ÇÝÀÏk­qž5?ÿÀ8Û¼—‚ÂÂBŽ;Îò7ßfñ’e­z]/õ{‰… ^Âßߟýû²â¿+«<ÿŸqàÀAÚ´ñgá‚—ëý¾sçÎÆÞÞžo¿ûcÇO”>~ìØq¾ûþGìíí™7oö%[naýØ—°–lÓ9Î"Ð'Œ‡G¿ÍŠèõÊ…… t‹ì^_ˆÁ`@«Õ’—ŸGÔ¡ƒìÚ³ƒM[6päè!rrsÐh”þÈÅņÒ“±þ“k×®å»ï¾C§Ó]’eþÊ¢WÙ¼yk…Ç6oÞÊ+‹^mÔûi5ZB;ѯWÂBBqÔ6OK©”ó•cñ’eü´z ó_žË‹óæðÓê5U~»^^°ˆŒŒL†ÌÔ)“½¬ÈÈH,XÀÑ£µ_0gµZ™0aK—.%!!ââbXºt)ãǯ0*ECæ½PuF_¤ÇÇÛW¹&ÃdªwH,™ß×Ç}‘¾Ñå¬/ÒãíåsÅ.¿¹]”îãnº‘7ßz‡Í[¶ ×ëqrrª6·lÝŠJ¥bÜM7´Ú[á–¬—Ñh$%5•Ï?_Åÿ>þ”µ¿üÊ‚ù/^e_*ïÛÜÝÝxýµ%Ü{߃üûÝ9b8‘‘Ê@ï‡áÝ÷>D¥Rñúk¯âææZï÷íÂ]wNå“O?cñ’¥|ùù§,Z² ‹ÅÂ=÷ÜIhHH³–o\|<“&ßEff&3Ÿ|¼Ñer(} Ñi›‰Ï&C¦Æùö§þ†ÕÞHDû~ÄÎÒλ+ÓG-fŶ<Ô㿵v½°Z­$œ=õWß@qq1Fc1öööìûç/²³3iצ-mýý((Ðs*.–CGÊ€~°XÌäæf+ÛM=ϸäååñ裰dÉfΜY뺵Öº… ^j¶÷3‘x&‰´ô4¼<½ îÐ'Ǧe)ç »­^l[·màê1£)ù:·mßQúüo¿ýÎo¿ýŽN§cé«‹št¦ k×®Ü~ûíÜ~ûítëÖ­Æù¾þúk6nÜHpp0Ÿþ9½zõ"**Š;37òÍ7ß0yòäÏ{¡êŒÑhÄÎÎŽ¢¢¢*ÏÝsß]þÿŸ|^eŒFc‹,¿>Zrù*•Šÿ}º’£G˶«7_»Â¾¤©Ë¿,Br@@;úôîÅ?û°aãfÆß|S…ç7nÜŒ^o _ß>´+mù¬¼ÓJKKç½÷?dÛö¤¤¤âêêÊÀýyzætìZ:ߨÑ×ræÌÖþü#]"”‹„Öþ²Ž§ŸyŽ·ßz£4ˆ;~‚q7ßJ`` Û¶üÞàŠÀã=Ìÿ>þ”¢¢â*óüòë:žzZ9å¯ÑhèС=·LÏ÷ß[¡ßÎé¸8–.}ƒ?ÿÚ XéÚ¥ ÷Ý{wÕÖÀjʤ>˨Üe£òBu|ŽwþýìÜMff&^žž 6„™O>^ú•íÿVþ‡Ï?_ÅÁƒQè ˜2ùî¾kvvÍ{cèÁÜs÷|úŸó̬٬ùé;ž5“ÉÄ}÷ÞÍÁƒü¾O<þ(«×¬å¯¿ö±þ÷`µ²wï><==yâ±G›õ3¤¤¤pï}’™™ÉäI·óÄã4ø=,V?\Nlá_Lð·¸ÏÀÝÑ•ªîòN7Ær¼p#Á>˜6â>Üúõþ_çÕ·"ë ñõöÃÞÞžÜÜl4-£÷SdÐÓ-¢ìnTÇOœäúkÇááî(§5K²Åb©w·¤^x3gÎ0`ÀüñZÃÛ•">)‰.]¹öšPNÇŸâðáhºwéÒ¤÷”rnú¶Zß}ecö«ïük9+W~‰˜“8:j2d0sfÏâØ±ã|ðÁ bNÆâãã͸›n`æ“ãààP¯Ï¤d”Š=™™™Ì_¸€y/~èP–/_ÎĉYµjUiðmȼZå}›J¥B§sáã•ÿÀôîÁl6·ØÁfKtùlìòíìì0›ÍDE$7'‡wÞz{{{žŸó,‹¥Ñ]Î.Û J—‹ö`íÚ_«„ä’nµuµHMMå–Û&“’’RúXVVë×o`ÇŽ|ûÍ—Dt`ÈàA|ûÝ÷DG* ÉÛlGÐ[·n+ ÉÑчl¡«áÊh4’ššÆÿ}ö…í¨9¢Ê<Ÿ|ZvÔX\\Llì)ÞXþF£‘ÇSú·ž=›Ì“î$;;»tÞöàŸýêµõYFC=›Ì­'‘‘‘YVþiiüøÓ¶ïøƒ¿ÿ¦ÊοrÝS§N—žÆ»÷ž»š½>=7ëivîÚMlì)^ã-åNZ§ãèÔ)ŒYÏ>Õ¨÷tssåé§žàåù¯°ìµå%¿$<óô“ j•®KNN.÷NŸÁٳɌsU£[4¾9¶«kOx‡LK< ¦]æf`¦þ;Ëœ¼3tôAPûP>?ü"Ï ø¬Úù²²²éÒµ;f³ ;;5ééœ?wŽ‘»ðQŸÕ¢üX­V,V V‹«Õ‚©-{öìáÃ?ÄÞÞž•+WÖy@jj*ŽŽŽ„……qÓM7ñôÓO_’#“”DJZ>^^µo_zæ-5õ<×_{z}!¾Þ¾œ;Ÿ\’óóó‰:tˆäó)´£g÷î8W:c'åÜüÛjCö•Ù¯Î|jV…º±~ýþüso…ß‹³g“ùÏŠ•hµŽul_5j$?­^Ãæ-[0›-¶ÇFðòüWÈÌÌdäˆáÜ~ûm¬Œ÷ï߯ünR±1dèP8Шy/t8´X̨ÕjL¦²èââRáïòAÒÞ^]Ö ­ ·¶å×[`ù%Ôj5ï¾ÿ/™:yZéÈGζá?ËÏÛ~«É7Üp¯,^Ê;w‘••…§§géÑëÎ]»Q«ÕÜpýµ5¾þíwÞ#%%…˜Î´i“iãïO~~>¿üú .fùò·Yùч¶ h ß~÷=QQ‡˜tÇD, ÛwìÄÕÕ•;vb6+•)*êmþú‡äêúõzzz2wÎóUÿữ*ìà¢fò”»øáÇŸJì¿ß}ŸììlztïÆâE  !..Ž_Z@ô¡Ãu®O}–s¤ÚÖâš¼óï÷ÈÈÈ,]§ÐÐâââ™÷â|¢æ¿Çë¯Uì»Õ¦?ó_žÇÀ0¼÷þ‡|þÅ*¾úúÛ ÉZ­–·–¿Æ-·Mâó/V•n˜o- ­VÛè÷tÇDV­úšã'bèÑ™IwLl¶õÖë <0ãNžŒ¥OŸ^¼óöòz_ \áÇ9÷'²v3ëªw9\ø zK6Nv¨UNulä*ü5á¤cÈ(ŽÃÕÞŸ-'>çô©S<9`e¯ÊÈÊÄËÓ‹ââbÔj5Igñóõ­r:6"<œõ~%/?_ ÉkŰ\G+Jqq1>ø ‹…Ù³gÓ½{÷:Ë"99¹4(W¶áþ±€%‹Ò¥K„­Uº ‹-àæ 묜õYFCý±sW•uêÒ%¢tvîÜ]å5Ë–.fØÐ²£û§Ÿz’Ï¿XEbbR‹Õ©Ä¤3˜Ífœ±Z­èõz“Δ®sc¨Õj^œ÷wÞ}ŸíGå…fë.b2™x쉙8pŽ¡!üwÅ86²OéæÓŸsM¿;8SM¾1këvEJjjGå*•Š{o˜ÑÇHBÁ~Üìý9‚ÃŽóäÀ•øºt¨qyùØÛ;PXX€F£%1)±ÚSýînîŒ6¼Ñe´lÙ2Ž9BXX/¿\û…—ýúõãî»ïf̘1tìØ½^Ͼ}ûxî¹çˆŠŠâ™gžaõêÕt?w߃O6ø5Óg”uq8ŸšÊu×…PX‡‡·ß:‰/¿þ‚!LLìIvíÞ¿Ÿ?;u"'7—M[·rÿ}¢ÓéH:“„››;±§O×’¯ôrn®mµ!ûÊÆìW½2¿ôlèíoeÑ⥀ҧ¶äñiÓ&óê²×9sælŸËÝÝ7^µRHÍ( Í/¿8­Ö‘çgÏe«í7wôU#yqÞ\]][ô;­|]ÛuCæmé:£×°Z­F4èt:^œ;¿Ê|‹_YZö÷« ±Z•3ÒÊoWãCb}—_a]Zhù%pqvæýßà±G”r2=/I IDAT,¹‘Tùy›ºü‹’+}Ý÷à“¾½ã¸q7²mû~^ûkiHþymýFµÈÈ̬õù‚‚‚Ò¿½½½ïÔ‰“±§Ðë lÛ¾wwî¾k~ø_¶mÛNd×®œŒ=EçðN :]s³ÙLffÛwüÁ²eoÍû¬¨°óYºì‡Ï)ß'33 €à ó„Ôã"±ú.£¡êZ§ê¾‹þýúVø¿NçRechNYYYÌ_ ´xÌ~þY°Z™¿p1/Ï_È€þ}k=àªË AJÿ8°³ýþ4žžäææàëëÏ”IÓøbÕÿ1lÐ`zuëN¯nÝm-ȹlؼ™NG|Âit:WŽ?J‡öí¥œ/À¶Ú}ecö«%]¡ìT5@×r «ÕÚèSÖ/½¼ììl®¾z4&ÜÌsÏÏå§Õkxs¹Òêùì,eTŸ×–-i‘òöññ!99™´´4Ú–Ö°¤U¸|«qCæ½PuÆ ×c±X0¨T*¥[E¹–R{µ»Ê?æââ‚J¥Âh4b±X0èõ-¶üê´ÔòË7àM¿÷A¬Vøæû/+´$—ü–”ØÔgù;uå“þݨƒé†~ïjI.Ö”ŠvÍØ1899±ÿÀAΞMÆŠ•¢prrbìÕ£k}­··7©©©lÜð+!ÁÁu.kÈAœˆ‰áð‘#lݶ!CãààÀ°aCÙ²u;£FÄl63¸ý‘Õj5¾¾>L¼í‚‚:0eêÝü¾a#¯.YXzáĆÊÁÅ믽Ê5cÇ ÓéÈÍÍ£O¿ŠËóòò$--¸¸ø - qqqu®G}—ÑPu­“—WÕZ¹‹Cs_¬WÙü…‹ÉÈÈdð ¥Ãýö»Ò_oÁÂ%¼ó¯å´&‹—,ã絿¢Óéøø+ªô=l¨ó9ñ‘ÅùÂXzºÞÂáØ¯yrÀÊj2À3›y|è|¶g¼ƒ ‰ É$D§3sXÝÀA­¦¨¸µZ É:yyy¸8Õ~‹éb£‘CGs69OwOzö쎛®æ©’+¤G]cX¯«å¨ä”xk¡6B;²aÃz†¿’Ï¡m›¦M¹‹ÿûìcF»›+Ù¹¹lÜ´‰î‹ŽÓ§OâêêFbB›7mäÖ j]Ε^Î͵­6d_Ù˜ýjMâÕ÷½º¬ùù6nÚŒ‡‡‹_Y”€qÍØ«KçÛ²u{‹•wŸ>}HNNf×®]LœXvöt×.¥å½wïÞš÷BÑ X,æÒQÜÜÝøô³ÿ•À÷+]`>þô£ÒßE7w7ìììl!ÕŒ¾ Ý j[~MZjù%rr²ÉÍÍ¡mÛv8;»”;Ðs)]nYH®{ù§Nmð™€Æ„jhÂ8ɧNmò‘˜““W¹ «ÕÊÚ_ÖñË/ë°Z­Œ½zt•aá*}ÕHfÍšCTô!ŠŠŠ(,,äèÑc|òÉgL¸õŽ ó¶n°qãfŽ;ÎÈÊ)à‘#‡s’õë7(azpÓeÿ~}‰èNaa!í-kq)¹5£‡»;Z­–„„DfÏ™WåõÇ)Ì{q>ÇŽÇ`0pìØñjojQY}—QräÊ0iuý¨ Zû:•<±¬_¿uëÖãììÌÒ¥‹Jª_¶t1ÎÎÎüºî7etŠVâýþÃÿ}öüçƒw+´5–³½Ç2w ±×kJ¦[ð@ŽžßÉ\\íü=ÛŒáï˜-x«BÉH* î€- »×kyZ#yy¹€ “ÉHddŽÇœ¬õ5‹…íüA÷n½xêÉY\5újöîý»Y\ß|óM8@AA………ìÙ³‡)S¦Ø¶õ‘—\@svvfЀlÙ¾™³gÏ¢Õ:‘‹³ wßy·n&!)‘ß7näþéJ òÉØt.:X»n-ãÇÃÝÍMÊùl« ÙW¶¶ýjjZ‹lã/\ð">>ÞÊ_nÐ’7™:uªÒbýì³ìܹ“üü|vîÜɬY³*<ßÐy/XHÖë1™Ím­£“oŸÊ”;¦1åŽiU.Ü+y|òíS•. &&³¹A7BiÈòkšZjù•'µZ]á ˆ³³3jµºÂ<õ]~I­ïÔXý¶ÔãÆÝÄÚ_Ö±ví¯XmCÐÔç"OÍ|‚»ö}ˆÛ&Ö=ÄËÀýP«Õ¬úê%Œj ¥ÃP©T|õõ·¨Õjôï×äÏ4jÔHŽŸˆaûö?Jûå^3öj¾ýî{f<üX­¯}ò‰GÙ¼e+ч3n|î(®ï2@8úÐá 5]Ä7sæclÛ¾£ÚuòôôdæÌÇ.ZýÉÌÌä勘3{¥Ï0ûùg™¿`ó¼ÂÀýšÔí¢¹¼ý¯wm5ÆÒ¾ÎÕiÈxÕ¡^½ÈÉ:‡W{oNv3´çÝ=~„_}D[׎yuÅßµ¬ñõ÷³öÈ vþµ—Î~}™5j9¾ºÀz/ÏßÏ—]{vqÓõãÈÏÏÅ×Ç—¶íø{ÿúôêYÍ™+ýý7]»v#<<‚¸„S¸8ëHÏÌÀd2co_ýÅŠ5ÀUײyàÀ¯f÷ööfùò‹{6aþ‚EÕv‡š6ur­#š¸êt 4„-[71bÄ(Ú´iÃé¸XB‚;2ýÞxçßoóäO£Ó¹sò(în$$&°î·_¹eü¼êQ祜›g[mȾ²µíW_|iÙ99\ýµÜxÃõ¥_5j?þ´†M›ËFÀ(i¤jˆê‚uùÇJêØäÉ“ùøãÙ´iÇW¼žaìØ±LšTvC“†Ì{¡êŒAoÀj±booOJjÙè[müÛ¢Ó¹”¶°êt.¨TvœO)»^ÈÞÞ«ÅŠ¡ }rkZ~½a3/¿òw­VÛãèXv–ÙÑQ‹Zm¯,×öý7uùÍÍîb¯ÀˆáCñððàDL 11'ñðð(mM­7«ú–ÞOÇÐ4 †Ð¦L¾ƒï¿]U¥å´Gî ºDtÆÏÖWÉÇÇ›ÈÈ®ѳg÷ Gz5úªQ@Ùi*€çÍfê”Ix{{¡ÑhèÒ%‚·Þ|½Êkùöë/5rNNNxxxзOoÞ}ç­ºwrõ\ÀìçgÔ¡^-üôã7Ü2a<¾¾>¥ÝK&L¸™Ÿ~ü¦B0½à?ˆ “™™ÉÁƒ˜2ùŽª­S&1dð 22ÊÂôåhhÈŽìÅ_ŠÈãpÑÏ„‡wäšA·Ò»ó`|=ÚT˜ßÝɇ;ûÍãñx`ðÒde‡ïOVfçÏ'ãà !¿ —ëÆ^G`‡ 6nÙ©¸8ò ÈÍË%ñLkׯÇÓË¡C†“˜¤œN>w.‹®Æ€ÜP{öìaÆŒtîÜ­V‹V«¥S§N<ñÄDGGqQ¿£—_šË˜1WUxl̘«xù¥¹u¾ÖÍÕ•‘dziËFΜ9ƒ‹‹Ž˜Øè\\™ÿÒ+¸êt;qW ‰ ü²în?ï8(¼œË¹©²¯lMûÕŸV¯aË–mx{{ñJ¥P8oîn™0ž —°xÉ2n»uóæ¶ÜÝFU*kÖ¬aΜ9áàà@PPsæÌaõêÕ~³2ï…ª3zƒP®Ó(?)ã$ëØ¹g+;÷lE§Ó¡R©ªÌVÛ{4²%·†å×wjÉå—Ø¸å76nù­ôÿ͹üf¯Êœ•¸¸8BCCël½Ú±mS“.Ö¢±:vêÚ¬õnǶMLŸ1SSù2x߯ÿ^Îñ¢-Œ=‹]1ŽFO\­x‚§%µM³,¿d‘–žNôáÃÜqûdò PmüÛ‘““Ãñ˜ãüýÏ><<;•vjµr³ƒGGed„Ë9 W¾CisðððÀÕÕ??‚:t OïÞØÛÛãä䈣£céM=®$-QÎBêLCØÙÙÙ†9SãèèˆÕêV6¬Y!±l,jU•I–/!Yq ³·WƹlŽáËf´Æ\]ßשÕj\\\šTæRÎGdãmA­¹~µT¹ØÁîJ_¾„d!Äeír»¥±”³ú%„„d!„h’£®–1k¥œ…Ô¯V¯c§®òEKH¢õi©¾‡ò¾B!.•}ð•¾| ÉBTÒR}ä}…B\*ûà+}ù’…¨†\h#„B~‹Ä…"·¥B!„¢’&·$‡…GJ) !„BˆV¥©­þÒ’,„B!„„d!„B!$$ !„B!!Y!„B ÉB!„BHHB!„BB²B!„’…B!„,„B!„„d!„B!$$ !„B!!Y!„B ÉB!„BHHB!„BB²B!„’…B!„,„B!„„d!„B!„„d!„B!$$ !„B!!Y!„B ÉB!„BHHB!„BB²B!„’…B!„,„B!„„d!„B!$$ !„B!!Y!„B ÉB!„BHHB!„BB²B!„’…B!„,„B!„„d!„B!„„d!„B!$$ !„B!!Y!„B ÉB!„BHHB!„BB²B!„’…B!„,„B!„„d!„B!$$ !„B!!Y!„B ÉB!„BHHB!„BB²B!„’…B!„,„B!„„d!„B!„„d!„B!$$ !„B!!Y!„B ÉB!„BHHB!„BB²B!„’…B!„,„B!„„d!„B!$$ !„B!!Y!„B ÉB!„BHHB!„â²a/E „¸Rií ½sÙÔÁ:8C ³ò¯ü/ÏÏžb€ô"H,„3…Ê¿‰TX6Y¤Ž!$$ !ÄeÅNm+†Þ.CqÇ+·|ü•)Ò½æyÎ*†æÄ‚Š¡ú¼,V©kB ÉBÑjx8(á7Ø|mÁ7ØEù;À 4ut(+¶ÀY½úÎA`v;'èîÀì j§Ëhoi³ÔYð×Y8” =¨à ´Õ–•_GeêïUwùÅÛZ¡ÏØu|òw¶QêªBB²B4‹ººA¹€®{¯ò-¡iF(ÌZÐ8ƒÎü}!ÈzyÃðZ•Õ—á^_í ¸ÂÀ0°ÒÓyˆÏ€ ’ù9P\ê"p|*¶Ä‡¸(Ópßê—o‚„éÖ!„,„µj®n•ÃWš *À ]ÀÝ:@°7Œõ×êÞÓ€Ò||Š2!?LY`ŸP_Þß…YÙv`Ò½'èüÀÕ º»C÷p GÕ×”„è}˜9Y`(ôàh_ûª3‘îÒ­C!!Yq…kîn%§ñ³LPl*gpq/ UBð°F„`]hË/­mº’¨‹Á»¤œÒ“Ÿ/RA¾¶q!útlN‡” (Èk!hLài_µ>H·!„„d!Äe'L£üàú¶ÐÇ‚]ë~Mu-‡™f°hÀÁÜÝ•n!”®Z(çY Þ¨LqƲ¿fXëñ&I'-d¬G N„äôKë;jçg¾C1x}ÄùA°=ŒË5;(SˆCÙß®v 5´LˆŽÏ€é99`,»bðRWf¡®nñy°?~;ÛR!6_¶M!„„d!ÄÔÁ®ò‡ÑþJ8îà\i•mÏbùˆÊ„ÍI°?¬Zpt…/¥8¤ŒöVþ¾!8Þ F%˜W§¿`…t[_Y}ü¾& ‡ÁÊ_.­ïì†A R)ŸA_¤<–n`+¤a_aõ¯óRCP¹Ð|¡Côžtø*Î&‚!TEÐÇ Æ´‡ž^ ³LÊìªL·¶WÞ'±P Ë[R`kŠò!„,„h6íœà*?%ö‡P]Åç3‹ÀÞnfˆÍ†'’`l'˜ÜÚùÂPGê@õ}.R®‹Ÿ­;HZ¹ Ê~ýS É7^‚!ùÆAeŸ¡DÉgó«¥ëK¦Y™ZOˆÆ` ÆHNƒ¯£aãIx·=„y@®LöÊÁÛÝÁÊp:_ ÌÛRak*$ëeÛBHHB4$ :ÂHß²–â·ŠÏgÃŽ4¥uî@&|‘.pÂËÍpËH¡äÒ|ȇâLÈ:{ñCp}CrJ¹¼îO°ZáÚJ÷‹’ÙÖÎI«¬³Õª|†)õÉu¹!Ú34^€p\•n$ã}@×^; ³ò¡³)€[â ·—rÖc„¯rpªƒ:*ï}<·¬¥y{¤dÛBHHB”ã©QÂpIKq¤»Òc¢4¨m¡8U ²”‘B\aÇô£„[à£\ XÖPUº˜Jø·‚\[pÌ(’“ÓáïÐ?F÷_÷\ßïè>JPÞw¼b_ê’Ïæc×rËnö]‰Õ:ºCG7˜ V70ÚA¤¾ €›áeD•ÞžJ¿ÊO ÍnÊôpX#9e-ÍÛR•ƒA!„„d!ÄÄÍA %¡¸§‡"JšagZY+Û?™`²‚ÖÆw„—{Â`{ð5Ç•×8T³U¥lõ†›ÆÞðÔ*ørÿÅ Áuñ· ŽœRiýÖîVBòƒ.\ÒÕbí|6ÿ‹8t}Bô´>ð¯©@ü²TåB´ÑžÓËê\I] N÷4 ì1Á—Éð^,¼yìUÐ׫ìlÉ0_èæ®LO†+QÙe¡yGäÊèBHHB\^\ìa¨OY è륄„3ü™¡tŸØ’ {3”!·Ôv0*>‰„‘Ž vÙÀ¹²×Z”ÉÈ…SEµ´Ÿ{¢±°¨3üö džmeæmøwg˜Þ:CXôè „Â#³•é’a„©Ó¡ÛPˆƒSñà}Èï„Ö»Ú^m`ÑB°s—þ‹£ª†èò-ѵÐÛ ÂÁ[ªðnnV¥œuƒíø4 ^?K*Cð†Ñ~J÷ŒAÞJËsoOx6B9Hü'³ìÀqW:˜dß"„„d!Ä%ÅQ C|ÊZŠxC¹SêF ìÊ(k%Û®e€ÞmáÍAp+tÔƒ: H-{­Ùœàl σoÎÔìú¯Û’Ï¡WÜ6V/ÁBÞEu@­Vn6Ò1Ø‚mA8,ºŽ0ûr©ÑY™*»Ëýâ•ð±ñJˆ>‰gÁ|‘Zû]•:âî?lWêNeÕ¶DÛâ¾ò€É^ð‡+h!HêlhŸ ww:‚yœr‚ yðq¼rD™ªÛ†z+Óì.Ê6´7³úmH!!YÑJT× æXîºÉ eTß ê sûÁ8èbm*JŸâLåy«œ×ÁŽ"øì,l°u½øÊp‚m ì·iµÂ}Ë ¢D†À'sàöùÊã-R6ÊXË¡AJøíj ÅAÊãM-/Άçáài[ëk‚òïKÿ‚¾Ã`Êõ°u}ë®W]_ýÿì„EO)eÐÑV½B¡[(¨= [„2UV\ q‰Êg?'meq:Ay¼¸…º ¨TJ݈ #qJihÙV “õp6Fd+gO®ñ‚»`„Ú€:ÂQ¦Ç½¡¨ s€µÙði,¼|H™ª;3ÔG™^ЬùlŒBB²âBn´Õô§t.Š-VåâºêúSúºÂ=`¢ô¶‚Kc›Tå {­°ê<|Ÿ…ÕüØÒ–‘†Ê+„ óàï”åywÁâÏ_ÎNe!8,Di.ù‡¥Å¸&gÏUl9-iMý©:èa|*œ®ÔBuP É]º·þÜ¥{Ù:ÿù2•UÃ)?Ht‚[\Êʯ|Ëz@[è¦L•™ÍJKsIhŽ-W~§ ° C¬Í»K©9J]iÌÙ†’ºYRWMVX—¡LÎv0Ѧ¶*ðÔƒ6z¡L/µ‡‚>p@ߧê“°ÁÖÝ£º~ý%¿.¤æ~ýBˆK‹ °Z­Vâââ %6æH­/رm÷=ø$§N ,? iuœ6îlÇ}á¼Ú¦4þsÝ0~^ªü}ó ‡'«Ì͵bwˆÊA®&5¹SqP˜~E¤‚v¶U¬‚®j°»BBEGÍo…D+$X!Ñ¢ü›ªç èØŒ ±ñ›×<õ¢.çü¡D¤Á‰:úûªá®¸ÍzZÁ¥rÈ×A¦/ì5ÁªX£Üø?BŒ¢e•dÚÊÙµ&aá‘X­VvïÙÍÐ!C¥%YˆÖxäÚÍ£¬ûÄ_åG¸¼šÆxÕÚØP¸»½í”rŽ2Ie¯-ÖÀqø5>>± ïw”m]¶5qœàu‚O`Ñý°êeû¨+v (™|¼j~ŸêºÄŸCp,JRÁõ¶@ÜAàXÛ^AÆÎ Ýì [M囉 ¸E λ¬°Ê g퀶àÁ«ve h«L#W}ÏôÌr¡¹\W³A© j;åB½¦ä’::ÙI©³u…ä43¼•¨LaZ˜7z@„4ùà•סLÖ¾pÞÝÖ) Ö†ŸÎ(¯­n¬ñÛ)Tk|K*ξ¢ªœ— ÉB´]Ü”@\ÒZìSé®5Ý-Lmƒ:À¢`¸Ú‚ À.(7j„Y ñ¶‹“>MRnAÜ”äÒÜ„qdÕjèÑò´pVA°wsÍóêm-Á¶P• …±`I§LhoU‚o_;¸MmT`WÇ.¥š–Óx+äYa‹=¤[mÃÜU¢s…“9`,VnNaj¥£ØÛ+õÆAÜ!¿šÖÛ4ðQÁh¸ÚZÑ+·¬û« LaÕµ§% Îÿ¥”]‚V[!Iz/°ëÎaÐ>¬ì€'4H9èññ‚A}«yOƒÒ §…ÞÝ!úhã/ÜV\’W4°ËFlÌ=sm®ýáÞöÊE­ÁzPg@Û ˜LRƒeÄ»À¦ø,~L„ïl§Õݵr|€2¤•µ2oMc¹²OBB²W0-Ì ‡ í ³gÅçò-pÊѹðG&¼ IDAT:͆Ô8WAÞðd_¥…«s18œC¹£Uç]”a®þï,lÉâfl¦jLdG-ôï#ð0t¸Vº½µÙ’ÎÀÞ¿áÜQÈ;Åñ NÏü²Öà*ðRÕ¾3I¶o À ¶ÿ—=]=`¸ôpƒŽŽÊ¾àööÊ“?%Ãò%@ !$$ qEì„Á¤ÊÈ€ÒìédK$Ž s€ž(Ó]z”Û;§  qUî ™Nð§VƒŸ3”›x´„ÎöJÏó–ÚO_»»•…áá¡oÐjÊ%ØT8³â÷@Z4ø˜a`hãN)EQÛžJt+…ß8ÛcÉVe1QrîœZæ9vH É]º·Þ\rÑÞ±C5Ï“Sé3WÇ·”Þ7¦Ú‘v¶R)Lw°…i/ÛMïòoš`›¶+ß§ª#˜C`w"¤«Á·†À~pݸn´òÒ¢bØwþø«,<çÔÐòz¤ÔÕ6vJÝ=ÑL­þÅVXŸ­L Üðfo˜Ú©ÁK‰J–nÀì¶@”ÛMºRµ‚mebP*w¸'Ìö„§»À7‰ða,ìI—}§’…¸ éìajŽ{•´["ØŸ ã‚“ü\ÀÏÂ] Ÿ=ôÕ@û"°Ï¯šäÎx¿ŽÂ—çàü:å_Sä¶þJ6Fön®`wHvõ(8 –3àœ j«rG´ÀòoS.ô— ¿ Ö²@\òÿÔìÀYsëÉ×Þ¬Ñ5ß\º!9·!¹.&ʾ›5œù• Í%Á9¨\˜öR§”ixi!¶²5« Ð ìÁ¹ „aÀC`Y‡ó`û~Øù—žÏ•» ´!ý’+Ï_¦)@{˜Öžê Y¶‚¶}>“’´ðO1üm‚˜H-TÎé‹aM/èã§ QxW°2ÌRÂòªÈ—™!!YˆK]7x´“ò#çn‘¢ÀÎE ÒÃÊ3ðHŒrúv0ÆÆ:@}Å«ãq„7X“v½áÞ{!P ÓãaçkpþµfŽÒ(á>ËþÝúA¸< PúA¯ B w àbûÛ‚ÒÒ[Ò‡µ$øºõ‚ç>ƒ,Wè×r².ÎwV’­µ‡äòAô’ ÉVåËqkáuIµØì«æ9wOø;<óà»!÷`¹m§ô“n¸– UXi&; ÐÞh ƒlˆ)‚¿R!ë¬RÓ/¹±‚Âaúl “>ý,`¼'øç*½!ùÜDac1l.†z¸> ‡•»Zj•ƒëýáõ^ðy<|pRú. !!YˆKŒƒL€G:)ꔄÝÝéPœ£•áŸ>ˆ‡óù°©= v²¶P~Ëlú¶ðC,Ú1mÏ‚•Ãdz¡k0ì|ÞüF)ÂPÜüŸ§³=L €œ¡§ ˆ‡Gr3ÕÏoTÙ‚¯¹¬/pB¹@œd…jWóoèsFŽ…ÇŸ‡%/\œïÏÝö=ÔÕ’|Y„äòŸù" ¯ðøóà›7ÂkW?h_.8•ë¤Vw(é‚ ÀÛTbb0tj ë á˳-Óªì¨÷Á³“À^ Gãaúkð—í ö! Ü^ê·ù‚Ó9P%ÛºVia–—Ò•c6¥Ãûx$\òa›4:åN€w‚Ç:)ú}xVŸUî(„,D«è 3:¡ÐÖÖç0ß_ÄÃqðz;% ›³ Ø9QÚ7Ñ XÛ€ªÐšá½?`Õ*ÐW3ÂÂ_G¡ïƒe?ȳ§Â¸!+\ ÷ÁuNÐ%3´r3ø‚ÉÒœà”þÉ€½ç!ΊÏYŸ·^ #®†ž„߃sg/ü÷XŸî§c ¸Ú+£]äçµ®º¨sUÖ­¸HY׺B²ÛEZ϶Êwmµ*ß}MŠQ.ú;eE9Q‰ hk Í!jÐúzCGðÕƒ}ØÇC_”é% ÚÀ1oX¯‡O”–ç¦صìÀÕd†×VUà“w­ƒ0u<~ôRI`M‡ó0ÒY™ôçA㨴„ïNaàθ3X1ã*?8§‡•§á¿§àL¡ì‹…,D+ Æø+­Æã@mk…<šïÇÂïIp‡ |⌀Ԁ“ RíA jEjøþxÿ+ØsºîeŠaÎ øé¦µ*wvƒCàj tNÇ*¶{A~w8á} !ë8xn™òŒú~ýnšϼ Ï=tñBrmî™Ls ºõ‚ˆnð÷žÖU/#º)·vŽ9Vûuõ¹p¯%=ó289Ã/ß+ß}cYQºð$[aV%QalðÌÎà9þq†ÎÙ ;¤üõÎT.&|A †8ᛊá£88QÏ® uµ×Do„ÿíR¦Á¡ðØ(˜x;hÍʺg‡â8ð3EÊ4e_òIô: ×¶‡Ç «»r{ì¹]aÍY¥uysŠŒ½,„„d!.O ܇A¸«ò˜Ñß'ÁbÁ’{À[A µgƒvªP0ü¼•Ç“²à?¿ÁÊÚˆɆ¶*÷ðƒéÁ0FÎ+·âådÅ”˜Ó¢Ü`m.¬:É¿)C£´‡¬þå}u.\7¦L‡—Ãé“8$—t·¨ãs;¤„ä.Ý[_H®OW‹òŸÑMuá×1´“ò›Lµ·"7‡¬Sày&› Ö íüaê ç=sÁý¨rpØ3Eéúð,P'Û(ý„?އèÔªï[ßÖãºì9­LÏ| ƒ‡GBû›”ç 2`ï°žVBr'xÕæûÀyðÈv°Ó)û¢[˦˜c7«€$s‘œ\þ#ErªïlK|0Y ž,[ÿ¡ÔóÀ`˜ 3¬“^Wè_º¸ÂSÑàyQ&µ%…Û:ˆ¯×JÁ®XÚdß{œB"aòøj¼XG¼Ëm«B›®êظ Bp x™ ·«´sq0ï<||z”ƒáêäý›ºð¥¬º)‚ùH¨Æá4h"Yƒ†<„£Ar¬Tï¯l¿+)™À078æÎjÞãÀDø%Üü``[ ˆˆˆ¥‡`θp7ï¯õð9h; >/xÂ{Çá½@R„O(Žð sõ÷aÅ%ˆú#óÏÎJ¬n^á›Ï {?èô2Ôi»¥øì"«ßóß$’mnQ§<Û˜Gò¬ó™}ϰ‡0óO˜©þîb}«@7/¨E¯Ý ¨vª£õÀ_ $ÀÆPº‚ó°è‡Ù¿—V­Œj š@…Š@E( KvCÄ)xÅjØÃÌâmÕ¡Ð}”**œÕ® ª í¯ÂYknAŒ 4h"Yƒ†œ¡r^VO5?ph<,¹K¯AC=|à Ë& çÑ°Ï üZÃèz`R½ÍaÁ0q,;Qy\AËha€6zèè5@·=Ù?8@¼ø'š`Xu bäB<Ú Ð1è,š c&ˆÇ±g{Û‹äHx•ï2àQŠ•¢¥¤+Þ>ppnÛ aðç9àµYÐ1î݆Òî݆°»r"ƒ F$0Yb¦Í´ÍæÌ즺‹Šƒù§%£!€ƒzW€žÅ¡ìNAw:A&8監ÀßûÍ•G×~á.Œ] ü ý›À—Ï€GqØ^€ ÇàÔ~hùžq†ÁîÒŽÄÂüð®TkTTÚ×u…Çæ_…Ë‘hРAÉ4dƒ:—NòÀXC5­˜SÁðjØWÜT¯ñ3¬ˆ‚Њн'|VJÞO0CܰÿžûŽ$äÍ5:MUQÜÆ býñ@ŽL@}¸RÖÞ‡g¾‡²5 j7,^®+'ÈJj´¼ÄÓ`ÀpI תìÝ‘wŸíì^¥¡hiUôúÈ«—8–†}¥`Tq¥Ïøs sM‡D d%iéÂû‚Á1>½÷T!­¾>¸÷ï@tÆØXŸgD˜L[@v]ÅëÁܦp«lÞó}F„àcðkÿ´'EKÉ$Á£8Ä•JÂÓõÓÿ̸Gr Bï¦ï•» æLf :Ÿ…ßà×%†µ[øûïÌEŸNŸùçf$úÞƒòPç\Êdrs÷¢ˆä¢• H.Z)éÚnž“–ª˜àdi¸îC‹e<©(SMZº“ ‹„e4©hÐ@žeÐy¶¶BnRÝét2fž{ÂCe,]¿’ô÷Ë×`ìð¾ô}F~e¿Áò„ï÷ÛÐB/íĪ^f3üeìÌ£çDC#wè“7—›¡[]‰]nYF=J[Ø}ÞÚ U‚¡¯kRþå3,¾MÏ@›2IYz¾ðƒOjÁúáÀ=!šÐ ‰d þ¯àj’DüÖü¢ ËŒë`þepˆ†0ÃWJÞœŒƒ1àR¶‘¿ƒ,®8,Y*N'‹­lh‚F&¸o‘ |™ Âúª§¸š’J8ƒÔN8 „T†Š½¡\7ðt…„X·f÷…}‡2>ÇùÓз¬Û=ú‹ïÃ7²yß²˜-¯àæO=‡nBíÒ0üg©X– „fâýÍ,| ˜ €ð,¨–ªXòª\xú·õZ\ÉüÃÀá»2ø¾…§$Ÿ x–”–®§oBãáÄ.ˆ¸Ÿÿ÷$7©î>ÿNÆÌ£hèÓ1ýÍÑ`Á2i-›ÀèAÐui£]+=x¤òh]²ˆ1Üc†}@½6ðú hßôªPûÂÃ`íÒÌ{“œ /«½Ôi-©~û'c\o_âßÛàä‰pp‡:# r{(_ œ.ˆ××*„}U\(AR˜LzN&øn©‚ïF2Ñ—ÕýdÎ^ðá=ˆ ‡O=r÷\uÖ¥Óå®üÝ'ar¿¾(ÑY eðHv/Ë¥º§¾@q ’Úä"Soî&¿‡JÒ½¼<ª&Ï.> 6)÷kíô´ûC‹—¥eÔ² kŸÍjLr26EÆJn2ȤvõoÒžª%à>Ý C[i×nÂܟქtŠÑF]mª ƒ— Òî)°ÇçA-áœÑéõ+Øq^š¯'Œh)UýêùB½W!ìüøœ:]ôâ0x¹ˆ´Kñ°à|`¾¡9q64ó‚oëÁ¢«°à*܈Ölކ'4O²† ô:èPRRu,)¿œ“GWÔôm©—FÀ’л5:} w×ÀÁ^O®X=Óž@uµ=>þ²ÚË98ãҠóKU¨]z‚˜áTÞöÀ‡©úpšBº±Œ;;©h loÚ)­rñ,ì%“ç¦ ÓÞ¨{E+‰°ð3B ìA*oö5J;iy‰°<1ýêe‹C»æÐ° Ø—U…±µŸ3àø¨ï[g0ÀIufä£><½ÜäEa–Z»ÛŸpQ«æ§áM$køGÂÅSü`te5O±`éyPDè[±÷Ì ‡_#AwÞitG“¤pû| †m¤Õ®S†Áä¡pà ¬Ük÷Àý¨©‡QFègHÊH¬À‰° Q |k£hóäxœêy0©K˜§Î©¹ÿódnc[â£qàæ!i®Vn†®­ÓNseý¾ehê Í*C-O(g—@ÄvŸd"Oï ÒŽ]½IÆå|£WAÿžÐd$øN²#‘ ùŸNÉ$±µN§ËVú7[@§—g°c•”Ê>’JD'ŸxZc¢Ó‹5/ \R[*4‡X_ˆzn˜áL(¸ ·CRöáÔ¨^Vl'gX»LÆDAàò5xëøè+5çò@ð«¿ ï…_·ÀìÅ)S>5,ðU"¼ 3Â`uò>×¾2Ár3ÌI„³ðrƒ­¡O;hV+)ÏûýX»ÖúCÃâðQ'pq‚L>3v€’]‹¨…•œÔA{C +-„Õ¡©8-Îw„Ù—áýS’CƒM$kÐßFèUf×ué5& v_‚&F˜§zg#,ðṡsji«üàÛPÉ[6³¬:ffi@5¥‘ÿ xc´o}ž….Í¡ymh^ f=¿€g²Œ}˜›ëÍI;ûÛ©^åœR:ÜÆ¿üþ¤¡+H( Œ®nR0aåèÖZ &TC<ã­àê„ÃnpOm© W…¯’ó,áüF€E+AõÎpnCÁß¿û—åµh¥‚»†øøø×`½¦‚FõÎrM®È³ËQÀYµ‘†Î(kIYj»`i®HøGS`˜•8ÁÕVGžDñ¼^ÊW’>ïQ¶ý.cA)à¸Ú4s.?¯¼(-ù; N¾Ÿ¶Z`b|šÝ 0Ò$)&G¥…–·WÀÐÉÏ þ€•;aûHPŬ?°ü0Ìè½Àç]$Ü›kaõ)XýjØÃpwxÕMœMáAl „¶UÀÑ^¯}ËÁ裰úfŽ*‚kР‰d ²‚º0§>4ñRç 3tRƒÄŠ0^õ©^ÆJÞðÝ+Щ¶ü~úŒ] {ÒðF%$¦?¥Uw€)¾Ð! ì£e9'HhÛ‹ÃÜãªaIv¼@y¨ÑzæMnc[Àl†!=à¿ó¡I,üU]\T^ÖÚ¹fÈq% Á ¢|D Ÿ ƒÃ×àÔ=5Ÿ®9 ¡bCseù¾ñÈÂ!’­^ÛüÉ©c• Ä¢E‹ˆ§{÷î)®¡°x’«^äCssïõ®ªí ­¤ÌíW W€š"ž]ÀtìïBO §Õ{jT»pȆ ÏYÉöüľCÒ’‡jùÕ€ùÓá«áÂ`9ø\Iy¯þ£ƒÈºÒÚƒi¯:ÉŸqs`«¼ Χ³‹50ú,‚û`f/)R²q4l: ã~s!ðF0¼z»Š`nè  Ü”œæž¥ÀÃV> c+è£p< þQŽ9m㞆B /{ø¢¶¤tÓ%÷@y:Õ˜E[ij1/þNFøŽ&˜ØÞn&“þ ³ý!1ƒ­ÚÄëÒÑ !Îgupª”ëMê§Z¢ô‡Õ»ÁÕæŸV<ÎA–W¹ó VOqK¼¦.–WÂZCXs8æ;.äoч¬ÀÁÞ¿ &gø®„œ+Ø{˜W%²³qoÀ€,Yý½Ä IDAT²„øøxºuëÆ–-[€¼Ë´‘ð®ãÎ@B4L)#÷§ %ÉÓ\ØÖ¦_,°F.†‡!Ы­„Žy¹Yû: 7V‚ߨ©$Í}7«¡ÛÍO,yìMÓÃè60épw‚Øøz‡”ÃŽIÆk $£—+8«¨@W(ŠQRÆ}xîÇi¶MCþCÛ¸§á_ £†W‚/k[)2Tè0Šyá°4BÂ+’ãåzðMÉ ª(°ä ¼ÿ+?Lû\ÖômÃP>ÙNñÕÉwŠ•V¶8ô~VB2jW€‘}aä( ˆúa±°m=LÈÃÜÆ6Å- ¨5œ3ÀºàÄǶ)œĆñ¥Ðd<=6Œ.Øë‰¾/×äà.‚9¿ÅiïÞ½Y²d qqq¼ôÒKlß¾ý±Xwp—k‰.ÏêéÑ2™<¶´à2ÈdîÌÒ~&)ûJ÷=Pà %÷€Ç~Í%ƒ 7Ð[WxEsêœËSÁsÝÀ§ llƒìR|DÃékJ±jgÊMÈÉ3òt6H»®ÀüÄ´ÓÈ%Zàû]°úLé ¯=-ˆþMà­µðŸcòÇ»ðv pÁ\ÃÉŽ:7î ½:ÂÄ30ÿŠdÒ ¡°B¯Ý …­½áDø¡2¸×D '"^ãV· æu˜–R W/ ÛÇÁºá"߆¦Ó`ÐÏi äfzXn·aªIòu&$@™èÿd*¥›Á0utû v#1E Þ"] r/Lú¼päjÀ`¥up^su"JáEàæKp~<»®Áì—`Ì18à Q•!\_x²ΖÉO½" ã’óyó^=X¶l±±±tîÜù±@N~îÂìà.ÏFQäY&DÜ—>UYúø˜cÒçw]“1p~ŽŒ‰ð"2Fz#cæ¼:†VêdLU+ßåĘ4 h–…ÂA¸ '펚ºâÉ,=,Âmeb„ë®+Â}SMÂ…Ëí„S#ø¡piÓi­¾žÂµÛÇ ÷>¾Çáæš×…«W?T“ E—» ·Ÿè \¯Aƒ&’5hÈ|`]3ðo5¨â8¢Ì0ë!”¾ ½a_ªl.ö0ýe8ñ!´«÷£`ä hð%J•VÍIÝvÂþptIF`£žƒJ1ðUBúIùá‹ pÊÚ¶„¨hxï øhÄáÑXtºô,|¢8H»|aÛÉÜq$.­‡?[÷‹ ¯/|ñ ìZÿ}S>³ë<ð¬X¸úIÈ9¸¼ì\ Á ‚¿[Ä%wíÚ••+WK§NصkWŠ¿¦xäƒäÙ\Þ^ðá0©áYQú4HßµPú|__¶–1q$BÆÈ¶12f‚t…O4wé ?ñ©ûF8è½/„“Ú¶Žúb‚pVZ¸§×UŠîÛh.ìkn<á \é’ê¸Cׄ[G®®mW]¸wúËÂÅɱï‘pvéËÂáQêþ® Çû7Î÷uÒ쟆 EQåÚµk  \¹t6öxÁ÷Š¢(G¶NhMk¹jŽ”Oj¡ÄtEQš£(Õ¤™«¢(åPz:¦}œN‡Ò»!Jà4e>Šyʼ¾(^.OþoM=Êl;”GÅIÚ]G”/M(euY»Îž]PnEQî¢X‚P~ž‰R²¸üÍ”„š(!ûQî*ÒVlBñ)›÷­(#@Y©C Ô¡(©Z Nþö~ ”ÞEù%e»"mã#”ñKQj·Lÿó{¯F™¢ Œ>‚b°+\}¦F¹¶w.£èô{-í>“ki÷YÎ?Êôþ¯d„¼¸†¼h:½<“)Š<£ÂÔg vÒ—§(Ò·Óû¿Ú-ell|”4^~ –1ô~‰ÌÇÛulæ×÷ð)+Übå™7Å$ÂI?ÏŽRî gõÌâ³(«N¼›Œ'#…;k¦1μ\„sÍ󄃧 'ëÒáÔžŽÂéæªI<¯4îÿ¤–ØÍ&j-¯ZzÚ5½fåâ(€¢y’58^.;Â$op¸Ü—8µÃQ ”×_Ò¨ÖåçþoÁÊ!PÒM¼ 'ÃÕ»’6ª—ö:ÀÙ窓ôm½ãÀ7FR&ÝÌ$.®vuð_«çƒoi8~š¾¯Ž… u)ÓGÆKp¯-¼="Âà™Ž°÷ Œy° SO1° ©@{èß‚ö@ë@h1 ܽáÚ)˜=z—‚iàô¾ôÏ÷ëp½>  Ã”ÂÕoR§ƒ+HØ" œÉš`;–ôoÙIûfkt˜"}9ôºôíôpzŸŒÞ¥d¬\;%c§Å4KA{dlÕ±—±¶J{ùíi6…Köžn‰®¹ÄA œôêXá¨ã§…³VÏ«]=ãsÜT„}c„#÷Y„3G…C÷:§Z‹ÞÎm8Y8¸¤›p²ÿ[ÂÑ©ñKLJnOT„ó.‰ ¸ØQl‚ …šHÖP`¨éþma]-(s©2a†­ÑÐúTK¹à„‡)ÓŠ¹;Á÷=áèDhUB"aðR‰“;vKþ§¬¾4Á-GXe/¹B*²‹»V,´Š…ÕæÌsöº»Á¬Épl´n ÷CaØ;RnùÐÑ”ÿkµ ¬XÍ«Ão«ÁÙ>ý6‚ÚõòOWW ”kaL „÷–Aí– ›˜Æ0¢lø¢²°™*6V÷s<4{³àÅhŠ%05$¥+(Ø"ÜB§ÓeØ K¸E^¦}ËkñÞìMéË«{IßÎ Qá2VFÔ‘±³y¡Œ¥Ú-elM ”±6±–Œ½êJþ‰æÚõ„C>ýF8å·ÕÂ1+%/J­I®öŽpWë¦Âe³&'¥§LñG¶ŠΜ“(ÚR/œzËQ8¶¬*ÌݼT8¹Uáèï{ g?·§£Ç·¾%œYl@™›büۊР¡ ¡¥€Ó`s¸›às?Y <.±v.NvEo†o\áMgØB­"6•ÝÕÞEdÇõœ=ðÉFIï–^ú¶¬”g}bö¨‡Á}`òàå ‰‰0o©T OǸÑÃB,¶Ààd¹VŸéSgC™rò9 ¿‡éŸÀ£è´EqkÒÏ>‘Þn{GhÝ žÕ'ýÿ…ðeìY 1Q9f-ß…ç§Á£0ó)ˆ(}ÉÖéàì<Á©,8—§ròê\\*AÑê¹+”’'×<8QW ú:D߀G7Ô×›š¿ç/,ißRÃÍÆž§¢°e<웞óÏÊÎXËéxN'gx÷Sú†x’o߀ £a׿¤ÿùуô0Ô ‹,éOø?F Ϲ L†WJiì¬Àèg”8å:ª‹-­4rîNðigÕZÒÇ…DJv¡%“ µlò„Žöðm4¼õ:8Ã×Þj6 õdæR0÷|t  a M …¹M§‰d 6ƒ^C+Àäà „Š7á>¾ Âeé­¬.“êÞƒS‰PÏf÷†&ä³ö^‚±kàT@úéÛÖ%Oß– 4©s¦B]µøÈžƒ0v"œ>Ÿñq“ôð‰>5Ã$KÖ Ý͹3¢U‰±nÓ[Œ7@TìZ›ÀõÓy7~í¿Pµ#\ߋڂ¥]è2[ÒÁš“ûtpé‰`ëÏÆ"ÿì1˜™L8烈ÎËg‘g¼c€!»¡|K¸¸~z<«xS¾6tÏô5GvLø¯Á|ñ¯ÜM‚Kgq‚÷¤Fíê0óKñ*ƒ„cŒšðäÊXfHžFΪkS§‘óó™=Å« Ž1z•xýŒp¼$(PõÜ4KÚÏaîð™5¨níg„~ŽB²Ÿ‚óÁËâaæn˜ñ_èj†ãö)—û6f¡jTºÂÉc†À¤wÀÅbbá›y0ù{x” ±iÝ4 d`ÏçSÁ覰.¦„óûÚ-ÅkÜ¢»e€ðر¶þ·ó¹ÒAô}XÓï„6áš?\ÛSð}Ìš®ÊsÐèu8µ©`D¢é8Vc™œ‰äÜÀ¨ntнáÇ¥åt’àV[Zvï_'Iûvi[áÈZK_µ˜¥ïæW‘•¸»–C™jÐa0´ “ØÑ³`È4Ø¿N¼ËÉ7Ê^PÛ(“h‡UPØ€¤¡KkmåŸl̯Öl€Ûáƒ7à­0à©ä7iÌZ”õ ¡Ö4rÓR†»õ5J;iyÇ¡î)xçÛ†·”‚Oßn„¸‹Âù_Gɪ!ˆÓä)5­t-"„:&ØWOò.¿scР!_¡y’5ä ìôðn5˜Xƒ5¯ñÉ8 {¥}Ü&OèX BžïRòÞŽó0ktƒ~Ùi ¬À‰° 1óìé¡Cøös¨¦nzúm ¼û\¹žýÏ:k„Àçf¨DæË©JÁÐ…³ ph¿ìT¿z1™GÅží/⸌ºÓG±À±bpn€DÂÚÂ3—U8—ï¶Pi”j ÑäŸÎ žóÁe„Ž„¨yÙ?>7žd—à9¢@èð\ŒÛ\zÚ€ }pe)„ì–{\`}£€W>Œvд‹ŒÝzÏ‚NÔß¾ cwç2™äZQ±*|½š´ßwm†…C¡Z`æáW€ p¨™ƒrñ•ÊÃôá¥çUñ~Þü¶úçì»—ÕÁ0# 6Bqµ;?T`¹¶zÀ˜Þ’[ $¼·Àæ+IûOR£µ|W\²‰X;ZLIøò:L¿ñ…hƒ¨†Â-ÜBC¡C—Òð]m(„©Dh†÷Cৈô=½]‹ÂúW€:2}»}ÖýõdGõã>h¹ °ÞœóRyiŠƒ¸@%}QœÜó“â~õ„Ï¿ïßO…ý‡¡ý@xúE0©†áA xŒ·.†à÷|ó3Æ338”QìÝе— @Ì5ˆ>kûkn‚Ûçðp „`[‘ì>\߇ˆ â‹|œü¦#¢k‚cH¤.ú:ÜóÁ²bƒlçþ)L1ôÅËA‡Aâa.ªNþâàÏßaûhÑÞ˜vör>Ö<ù9™–•×Á'X ä$"!/ I»`¤éI?êÝ_ƒ2ÅTþ8 Ý~_¤Ã;Àkn0ż­»²=à†Œ; îh¶Wƒ&’5bTs•Ìít*C[$lbƘú¢ÒQÇF=¼Þftƒ#$†ÀáÕPùx§òBÌI„³¹ð89&-/::Heªì./ZÑ ©ƒî$ÅDŸNe"ŠÓXîðÑ4xq„é¤z+ˆa?¼IZX²uÒ{h£´òàÝ-PBH„ë„ì]‘²ÍY@ò˜f=Ð¥ƒŽ@_ ¯Nª_NÖ84>¾ž +×'mdž8N^³³‘95ÎZ`t<¼GÊ4rÞ×Á2,åÀð|Û5ƒ±«aÏ¥'?'ÊÞ“lH_ƒž®  †v&8ݾÏÏB„–2NC@ó$kȹWD¯•‡¯*ƒ×=Çÿcî¡ ¼¥ÜaFwÙõ¬» €él2/HÓ·¥…¼HyTS5>ýWõ½`àG7s*nìàå· ÏDIák¿÷ŽPº>„ß‚ÅíáÞÅÂÙ:} Íß’ f³êf­@C }åE›Š—Ø» x6]²©»9BÿLZ®ý ” b.K^SUi±;l,T+A©Ëx+dÿøÜx’K]cy¬ ‰6.&âм·CÂEÊ B†Î(Ï×.ãù´<ÿÇß?Qžoˆ¿x›”短kqƒ1ÇÁ³<üñ lz»pŽ›bUaÐvp÷…;G!|3ôx3‰V~ ÿù&çû ÊÀÁ:(®¾÷ÊsYñÊ*rš3+H+\BM05¥ªd1zgf0ihâ³J@ƒdñÊ÷‹Á{—á§ëZʸÿwhá MŠÂœ:P7†ÇqÇ÷-ðV0,H?DÕÎo´…_—0¯ƒ*`QÒ·¥…Ü&Ï·º!!-“ds=¹+Q¯¼> |ªÊïû×Áü·!ä–x“^Ý(q¿QÁ°ø9:YøúÁFR¿§ÖÀª^™ÌÊóY(¹M·O j1„¶±ÇÁÊÄ‚’·Èö’BŽE²^Ϋ3Éy•8Û~oÏÁeD| “ n‚Ð{5øõ„€¿a^3©®WØP² Ú.Å%^úçÎ÷¼}aø×’½ à"ü0F*äåyÅa9)®”­Iƒ†áS£šò 0WC7ˆrƒÏþ ßï–,Géyûú¹Á7ÅÁ˺òäÇaÔI8ô šHÖD²¼#|U ú9N;ަ«qÇø_W(]$åÏå½ tpr¶ƒ²tfˆÒK"œ7CÄÜ_cn =/½0i!«ÆÐäý…Êí!& ~ê·¾>áYÆaÿëpøkA2ã•Æ’»Ñ%™0Ìã%wSUñ&[ÂáN Û ÆÒwÁPî”s mD²¡”¾æ`ùζž”¾ zwñ"'äbÅ#7¡6†A×ù"8gփЫ…o¬ø6×6ƒ£‡¤-\Öe}òœäÅjX^TíËçŒPÝQ mS  k´‡G±pç6\¿w"áÖCˆLù³9Aâ•ß-*ô ƒåà½3¤¥ŒÓD²&’5äìô0¾|XìCxœïø† Üò1êë .vé|€’â° ŽÓϯ‰Ø¾ æ_„£áè%¸œýëÌéÒ`êx¾Ç%­É^<_†" Њ̖U vâ«Ùâ"aé‹…#7qjÔé ½VŠÁ_Òô>·y«Ä1°« ÷^‚˜ ¶½%þ»†p· ĶH¶k %Aü¸Ûȶß×± û âÃÝzyÌ9ÙØ´i €+eb¹ºœ\UøÆH…Ö0àw°/g•U—ô<Ý9ኬ"½}›Éú¾Š¼ªÚà[êWúUaøAðº |¤’ï6õb\bnˆl Ogu)*^óýPð½嬤m‚8oø"¦ÓRÆi"9ë"YÛ¸§!Sô) “+CÙHÀšfǨå< \$•|†ïS^-ÆIÇŸqÃ- tchf"îàÕ&&3ò÷“sfÂ9§Õò¬éÛ†ëÀšM,XMÎv†§‡œz‡Ìñ°²t_uû‹je¸°©põ‘s[àèapo õKù7[§{´ZD²s/Û‹äÄÛ"’¾ÙÉ9ž|ù&ÛÖpî•tÏóñàÎzivú¿ÒݤÜÂK_,l¨Ö ú¬“#_& 3ÊT“k¦‚ÿʤU§ÁSà¹×r‚ÌS'ÿÉ3ôt:ëà:0_É8ÜéóЦ[Òf躵áà3¯Ú—\[_‹¹'û‡`à2DÞ‡Å\4Þµ¢€_€Ø~¾ AO®XºØA /À ¨‚„žÂÁþ|îCšÃ—ae4d Í“¬!]x›à—ÚÐʈĉvp®$5¤½Ü‘ly[§ƒïÚÁØ(à„jÈx'Ö&3“ôðIIXS®TI‡<ÓΧ®ÁK/f?]QZéÛ²b²}ó*ÎP]~€&£D8ÿ2@b€ EªC¥1P¶RE ~ gLA cY(u”GP”hÛÛã[(2ÂÞ†Èo²wlN=ÉEÞ¯!ò;{Ó†ÆÃ|‚Açå!ñ¦mŸ³µL©±àæ'…L@Â2n.ƒ+³ ò|Á¿žðÊRY:46¼N¶óŠçWFf΂¬¤‘K/­æo¿ƒ_… qœ^i'ô¼ŸšaR2oo̰_ëÐx fºÀ¸’ÅÄ 7û´ÃýꛡF­^xWØ›¯œ†- Æ¿š'YCžC¼Q ¾* ¦(!t‹¾zŸßƒ˜,”Ü-f‚½u¡úa â ðy,|“ "*9Êè€Ø‹öeîuèÐX& (à&ÿÿßðæÇé'¾Ï¯ômi µ¼^.UĸÆGAËñÐsØ9Ãß‹ `f­‡DÖ:Õ†àpÓt_‚¥ í—L¶FâMˆ;öÍÀñExdÃ¥w«7×–ià¬ç²µ'ÙñEÊql/A&_·÷Câ W@™eÛHŸ¬8*Ž€à"–ïnJ¿l+4]H>ä}Ó`ËrTxçØæ—Ä)-ºCƒy‚qø ˜®d?Ü£øp*ü´¾ý ^h3>ã€<ÍKËÉ‘zupˆzT› kÍðßxË9€ý k‚v ¡Õq¸§ž#"NÚÙ4ª€:êà£bð^QÐ?„V:x Þ»ßæ÷køwAÉR ~X[Ê›H@Wí¡Í9¸…·áß9ƒÝyÃß^½·Ó1>*!¤úû­`i¿îR8w~ú¼ öŽoÑŽP½ ¼ ?΂ëÉÒ`åWú6›{}ØòÄ>”<°Ý‰P>8Ë6}ÃäåA…QàR1}¯g%Évà9BÚa³j|) ÷jÉνl+’ͪP5øÚîœÖs™m,’ó3Ô"k³5éc:ˆ\ ¡SàÖ””«ÅÛI‹º ׿ÀõÅn›Ëk:^ø^VÔ¶þ_ær–!VX€­ÀV%åæ:À\é´60—¯¯³ç°sƒ8;Xù3lÜ•µ}&Và“ÆbJ ðe,M„Ÿ½ Í#¨~ ·¾ LÌcìí ­…©ÛE \„ íáóy·, bl7Ž•Ÿ;Ï„6ó·o©uç@§Ûà÷µ䨫pêmØTŽJ¹¬>,÷Àá©Wx´Nú°Ãs’yÁVH,€‚"=É6,$¢w—{‹Y½×ç~ÒÇ,÷¤ÏYy^úä¦2ÒG£®JŸõûZúpÝ9Ò§óm&ÊØ«¹ÈÉrK8eB{៪Â9­Ê+ÜD8ÒWÎܧrè(„S÷ê„c—¯Î2V8x÷áä{…£{½&œ•Ø©lBZ¸­ˆMéë,6Æ.RlÎIW±A™áv‚Ø´¯±q˜Åæ)+6ÐÅ é ©üSŠ¢(×®]SåÊ¥³¶Å ¾WEyü»ê'ÒÚ?¸+‰SE©¦6?”Øö(/ùdíø’:”íP,N(ŠŠRåÒ (Þ.Y;þ¡ E1¡¸gáß…bDQî¢,üÅhLú[ ?”E_¡DŒG1—@QtÒÙ£Ì3¡Ô̧ûg´Cé9eC$ÊvE^{N÷óó¹5„òe"Êåù¯PÐåÝgëô(%;£´ØŽÒÝ‚Ò]‘×Ûå}>ããû£ø*(>!(ú¢Ó¯½·Ë5¸ ¶Ý9 ¥äœ¥ïfÿX+²{\é»rNC)Û}O—ÁrNïíólõE¥où*Ò×ò³/g«éd,NQdl6”¿÷ÁÖÜSáÒGöIüj.!œ»è+áàÇ×fŽVî g¿;*óÏwGlA¤)‹cÜElRBlö®’D IDATÅIlQÉ,ráK>bë¿$ûS[l¢¦ þ-=íš^³rñƒ„k´9Âÿ/ê;Ãð­8$¨½¡•ƒfÃo™¸ví€÷LpÉÕBmau;¨½B²3Í(‚Ĺe´ j4¯e'5H抡oKd=Иz^›®ÓA 15àáÙ)Ý2^š%}òöÖk Nɲ§£‹„V ­)Ë¢‰ù\Èàïۦ¯läk9^6ö¡ËÝgšÜ¡Ê[ðÜ%hö»,U'FÃÕ¹°­&ìoA3ïŒ^±»@_ ܧ7YÝØèÔÓvç4ß•b"†â’C8¿¡³—s) rn[ÁzOÐæQ÷iÒ·bwI_ËÐ d‘>»¿½ôá«s¥Oo'}ü¹KÒçM¹]qP7×¶/crMßüß3` ÁZS¸ÇÑE¸hÁ)ᦼDIáЖ©çÇꃅs_› ÜáäÄDáèñŸÉñÓ>7fäŽDù¹¨¶!S¯z”ØšÕíÄöèŒb‹.9Šm²ËäøßÄÖ•Û§èÅ~ë&¶±¾³¦þß¡‰äÿC¸èaKE8â eU±“à ºpÂvÂÑÐŒ?£«Î:ÂT“~ Œ‡ÌÐg9Äe±(ˆ5öìVán®°i9 é+Ù+^ ÓçÈŽì÷€+:Ø¢“F‰À  ¹n—`à~8v<½`ÌøëÌ_ õ›äîÚ*´"3œZË»ABŒd¾xågÙ$”]d7¤"óõ)J,¸ ûV ’ÿ#ÅDÚ‚ÁVE6,`V'—„\XÏaÀf; %äž*qrm ûVÒ§”XécÙ‰yϯP ½AÆ^“Q2—w³mö™ü Á¨ßD8ó¯k¡ž^©÷ Ç6W„sÞ¢N~áèés„³cb…Ã7-NO·3ˆKN q‰bs>0‹ ÂOlÒT“ب®™ðáÑP±y'LbÔ¼îe-b#·T›©AÉþPÁ{ÊBè3ABU0ùÂÆ`h± ¥| =ì°‡õöPIÑÀHˆé¯¬‡)[R¦äÉT$«¯é9­ËúÀо5Ü Ö]e§úrÜÖÁT5eÑu`‚e触,JH€õ+áùÆÐéiØ ­.=aÓŸ°å0të&SÖ¯×h='À³²q&& ~|_vžçÅÆ™œàÂ&©Æ)¹”û¬•tS™:¾ôP²3´ØÏ•ŒFgÉRqàEØV.}“óN‰—àádñ°yεg5…^ ‡Øm€œºÛî¼fÆ%[Ïa¶áÄÌ©»ÜÓØmrm ½ô%tÒ·/åìsÂ¥oo«"}=x‡ôýŠ#e,´Ø.cC— i°“1W·¿ŒÁŸ:\skŒßnjÑ]¸ªçᮬÂdnÜrX¸²‹ºr°apéó…[„kû©Ü;A..pómpõÝM*w‡—Ø(Üž²—üÄœ\ÛóÊz±EŒÛTI'¶j‡½Ø®ôðHl߯`±… UÅ6걕{ÊŠíÔ ‰d ÿb4r€ãå ¾=Dša—#¸×”÷ß^„®@T:`/̶ƒ“ð¬Âtò8ÞÐj¬;–ýkJ/³@£ºph3Ô¬ çOÀ¬V°àü¡“ÔDF$}Ûó TRdçuzù‚á½ Q˜5BïCÝF0g¹ã&Ї$#dhEf¸¶«å«kv…W7Jõ±4 `…Td§AÂy0U×ñ¶¿/Ñjæ§^¶;g¢ 3\  ˆõ^F@V ×ñÒ—ÎKßÊ-rŠar’±V³«Œ½Åí ¾"fnB0<½„ Ün¬ÛH¸rÖTáÎὄKÓ‚5\%E8y£ÊÑ}Î^ røùÂé‡6 Ç?!X³éINŽuÇÄz‹m yNlÕ³±]³íÄ–¥…¨D±ß^›è^Sld¤YlæñrbC5h"Yÿ]‹€¿/¸€D8] ž© Æ…·Žƒ9 ¡jFἃ¼üæ¼ÞàÄhøárÚÇ¥ž}ï4Ãç5 Ó$ð(¿Ÿ„Ó! ,ç×fMŸœ'Œ€µ/€co 5”ÙE”¼MßËB?x¥lß&;è3vŸ„u» ãËÐëýÂZ‘é$à$,há· |K² ÊõÉ¿Š¬ n/D-‘|¶žsÈõæÂl‰ôhˆÙ(ç´Õ>k*6[Æ$Û*ý›SO¹—1m[É0yNä¨%Ò§ò Y Å(×GÆVù–2Ö´’±W‘^F¯÷…ãÖíÎë3X8pûFáÄ6~‘±19?wZiäŠ(Âé´Ž_û‚p¾©lCN&¶é÷“b«:MÛµÓüäªhZøá²ØÆÈ±•á•Äv:éÅ–¾é©é M$køÇÃÌ.ßx‹.±˜%‡»;ÜzÍvÁ–4ê×§Žãº¢ÀËñpüøt(˜ 0};t Q¹ôæ$·¨h„ãÏÀ”õ ’jØs€Z ´R`5—‘ Šûv€¡YUX4¢"¡Q[øt š\øB+2ý‹0¿%ܾ ñ  ÁŠü ©È 2w²­C.Ìna+OrA…Z¤—9_'X„b4X!cëö]k÷.nNH+cÐdølp]T¤p_³ªÂ…ûvfooIfˆG¸»•"\>áv ×OY/Ü_ј»p‹äˆŠ5}»Ø¬O‡Š {9^lZêý5©±%Hlä­Gb3•šbCuˆM]\l¬M$køÂEËÀ(ˆUàºôu@ç=€ÆÛát*ïaêÁQÀ„hlW‡Á»í!Á C—ÁøÿÈrTná ÀD\Và©ÝÀ=¸á #(­ÀèTÕò ׯÀ‡o@ßžp2€àpÓÌvÿŒgï^êü!%’¾ÃõÛ°¥fþ„Td–ö¶üìñ5è‹Úîܱ[eƒ™]]0Uµ )€p [Ä$›ªÊ=´„Ë=µ™‘**}¤YؾÿZC1¶Ô”±ô[!%d¬¹×ýgpƒÙN¸ì’Ê ¡×õí)Ü—¼Ri~á,Âé¥áø®ÂùOí0Ñ$6!/²uZ±UC—‰íz·½Ø²Æ±mQ¤‘©)N‡‹­üëØN}±¥±ŠØÖe´ÌšHÖðƒöûÂóÎpß,(*ÔŒð{´Þ wcSv‚ä¹%ÀâD¨+\`×»ðb†vßÁ¢?òæ:;å-€š'HŽË˜N0¬2”€y‰ÙÃ'¿½3Ù ó?„{áP½3¼yž›v.…ó¹;ü½óo²\ÿøçMštïA[Ú²J) 2•- €(2DQÔ#(áèñÀqâBpÁQY"¨€ YÊÞ²ZèÞmÒ&Ïï;±)$m’ÖóË÷ºž+i“¼ã÷÷û>ÏýÜwtZ×l…èÞ`Ê‚_'ÃÞ#™aPw×WW±“• J–Êû€‘.>¸hå7ùÂcðvå "H#ŠôÖ @9^4bшuê7é­Få "àí¹†›|åš\üPg¯»’¥®÷¾èCŸ1‘Ý -@ÆPf"ì9"cË”%cíš­2öüâê§m0‰íú×±e™ybÛ~Y!¶îÉ/ÄöyEˆo’/6¿t p@rá„&VáW`þzᮜbá²nK)®óáܘÿU…Ñ™2áÌ/O ‡6m/œšeŽ]—$œëÅÿ&4$»ÇŽ£iÓ¦>xñ9»ŸÖ|ÏÝ÷>À‘C{HNií­Åz„v¾òt›à̰>Æ´’Ï~<ý¶ž;ÜE³•é<7Yá3üb…+Ã÷A|Ê€¯Ékm‘ ¼¬ÁÛßåíÁp=¸®ÇOy¾Þtz¸÷E6Qþ^2 æ=,ËkÁ±Ðÿ9èø7 U˜ß>;>À©­î‚O´xš?(¾“V3~ öMÿJ}"Änײï!óÏŠœs®5â~•P^gû¸×·ôœˆ~³Ê@zj £ƒ–>¢‡>j{m¬¿ð ú€ àw ¨€ý¶×ƒØWÎûÙÄí—ÙäŒþPæ!Ÿ|ß^Ð`µô×ô¶5ùVk¢ô…è¯Á¯¯¸¶œé.¯†0hù8$ß:£¸cz<Eõ hÐ~\÷lj ɶw`å(ò¤tRÁ#føÄ"ºoxxo4øà‡ý0b®<…×AÀ£À$ ü€Rðy ‡•`ÄXÈ/ð|½„ÀäáÊëÅwoöxX±àÏßKèƒ^ƒ$["’›à«ûáÔÖ:â?4ú\6Í6ƒ¥àä"ØóÇ(>ÉÐà'ÐÇIT‚¬›AÕ‘ouèúŒ„ñ:ÓÞC‚] OKvº3Á|¡p…F ¹ŠNÑW ãpsBtAh­VþB‡.QÙœ@5ÍAgÌ–Á°·Ƀ1›œð¹ÖJÁ|°Êõ®¸ Ó¿±ÄnËY8ÝPfú©€GÊ+#n€m!¶ ƒ/O@øièéEVq¾-Æ‹ÿ!‘l³ÍJ=zôœ<×Õ•óó_ãÍ ^/ÊøpTE É=ÿY"jK_”ºeŽR-Q}å{þ ¦P…’ë¾$5Í€ ²GÓP]‡²þ¥ÞBÍ»eÐ×îÚ4P#AÐPJCY5ÔÖT”eJAÍ›‰òñ©›z‹kŠš·µR¡g¢Ú\u‰ßh¨öw &§¡f(Ôt jØTp¬g¯;ºªïvÔp%¥ÏϨˆ.ÿ¡ *!•¤PQ£Ð×Mk¾¨¸½r¡Oxî¼á¯ÙÎùºNÑ˨¸×_ñr°âë0Å¡(Ey…ª¦äD+6E(ÞQ<¨¸ÉWÑÊGa¬æ|?vS¨ÁоÑ_ŸßSßh9ÇÝ.ü¹¹Æ›|åšß‘{ȉ®þ>ËH]|&us¯¿¢—Q…¾®SIJêÐSíú„´WÜ^é3ub[õ2V’”ŒC›‹?¢‹ŒEû¸ì»]ƪ'¯98VlÒt‹Ø¨Éib³Ð.þ»6W‰ \©Ä&Æ5­›:÷ñNPg„#¶¦ g(M8d¤Sjsƒ^¸M½%\÷ØuÂ} \8Í Ü¨„+§„;A¸Tµ´që­ÂµŸ% ÷V´.öj’úSªÓ®Õ»-Þ°qƒý^‘üW.:P³bd€ZSQo& Ž–Á›7¥š¡¾‹ïÞ¬G÷—¯PŸú¢’ªN_Ôû£ÅpTÌAMêWûëkjµÍÀ) µU‡Zö€Í¦¡_wuWR0¡®šf"z2ÕsJotï5‡´Bõø¶’„¯?ŽJyiüãº;¡ò„ô#8þ;Wß^¨$+*±å“â^‘C;ÅýJ·:TU„Ó‘óçý ƒØ»Ý'’ïJ”s|ÐÁùë‹qþAÁ¨"•nu¨âþ©S7>dù¤HßH²J_©¡ÉIR2fŒÿ]âH›öqÚã[»î¼^½QlГ¹b“¦™ÄFƒÜ8iàÆòÐxáuF8c«®’GVkÂ-µ=Ǥ~Âuê-á>ß*“5Išp¤/û ‡‚pªjfãØ[…sßLV©ÂÉ:¯>ùŸÉ^wó¿0uð~œ77+˜] ã:C°vdC›PQó aµ/ô¶Å«Ùa…‰fXSe0*>¿z$KèœÛæÃW¿ÕüÚ"g4‹¬øfOùÁ…0¸”–Á`I¥o­íò¢¹¾{ ¶.€³d3Ìõ/C§1°|"tñîß(hõ44+›[Êó`ßspä °8ÇÔ¼2ŠnÐhPEûOÏ׿=vrÐh‰›Ñ×øwN¸Ê= Ðáâ¾`ÅîIà »Ja›É!Wƒ!Ͷ36Î)ºìÇN+sþ·VÈ0ÃZ\N:úB©šÞ>ÐÛvÞ|ëͰ¾~2ÃÖr×Ô_Õ˜È =ç·~>Â_±‘3fGݪœüÒ¾€f åˆ úÂѹ°÷IÙðçJ¤ ;cKv²ï+±CÙN:ò¦…v«t?{aUõîgîÆKoÂÑãðþ0x2¬ê ÿ O•Ao`‹s© jðdæ*8x>ºFu†Æ‘6.«N(a‚Þ:˜e„ö:øÔÖXàB¸ÚwÂŽÐ>R~?óxÀ_â(76ÀéP\Gî6^¸ÞèQÄúTfÿɱÀÿê*ù“½|Ìp D g)g†Neç äÖñ°å1È'mAØk*õÀx`¿&¯¯WÇÁ}+ _8“½o¬¬Óø™0q¾ä%³`êàšûße†÷ÃÛ×AÆ>!©»¿…;¿„ÈäÚ_¯ÞRþ A3[…yV4‡ƒ/;'ÿ¨ sˆø?aÏÕMvIìä@ úáé Xy1°!fÁ@_ÈÇ,ðn)ÜS‹£€vðQÜ]3Ša© öV¸6·]¸Æ»Q$Ç×B$Wû…ÔÅR“ÔÍÝRW´“º»§@êò˜Eêv ¯Ôõ†©û5áÒýŒÒ65iÒ:ˆ‰|>ž“±¡L2VLœ?†¥TÆèŠæ2fAÆð€C2¦õþµ¿ÎÈd±5w+¶'cŸØ¢÷;/í()›¸d–ØÈ‰óÅfêê (ð’åÂg2„;î[!\òŠíóª\SÓËûê7ἓ¹Â[N´cU8sœY8´·^8õ@¡plöáÜ`ƒpð%œlÏrëŠôŠd/<‹Ö¾°¹\áGÌðe ü³ƒì¾}v,Ú}­   µUöÍ,‡æe0·âÜÎý[Á†‡¡Ilù®œ;ksõ*à ÞÐ øh«àãv°r´n{@—ëaËÏ×[@<ó¥ìä®0ì{à­I®ÙÉ}pÌnßüÊ\2NƒÄ‘pí~¸ü%ÙEf¬j ;&Ô~&ªì{È!›÷B&ÛÒýz5Š©ƒÁ¾036Û„ÙÊp˜½Œà§Áî ˜S ·çCB&4Í‚¿À‚RX”#ÇãÞ›;m® Ý(’íÇ>]æÞ{±×Õ¢©Ã¿H&dJÏ)•:÷Ó¤ ¦J›äÅHÍ –6‹¼4ÝÔ‡˜Èöñ Ì2Fʾ¯ÝñLY2fWµ•1l“1}í~ã5É@y~H·²<±=³Û¹fËjÛ8뱕Ã&Ší ñ|{lÙ!œ±ç€pÈÊÂ)m•pLÂ9¿hÂA5ÁΓÂ}[~.Üð°pãõpgó2áÒ „[Upí¢m½:M¸øË@áæ+ü„«[ûzuË_^Ÿä¿PéˆÊK¿§ÍQ+º‹OTÙԨƨ&ê@P¥Õ·¾¨TÝ…5¡7ªÜæõéX”¿¡f×”ê#­rsÅq u£í³aQ%¿‹_ÙwŸ BCþ"ôê`ã u°ù'àVTR…ø]?P7~Ÿ1ßWñ‘>ÿó†:Åm~Š7C»"Ö øoŽPÌ V öUD^Â8Ô 0ß %Ôà¾ûê!þ›zºÏ'ySO9G÷÷݇3õ©“6˜,mr¾³µ´á›!Ò¦ ÿÜVvà˜ïëÆ_>ø9R…Œ wœ£&›n©ÃÃõeC_hˆpˆ:#œ2l üÿF„sì›Â?Ò„“jrƒp¡zK¸qBï /U'ÜjçÙA½£ «[…›77®ÎKîöj˜¿žO²w&ù/„{Â`y„êà«bðKk!Ë}WÃï'`‹¤XÁ¤` ®3Áþó|¢ô:xíVx}$è5xv9Ü2OÂá85›Löi0 Óó”‚TŸ‡Oç¿ÌÿŽª›om®‚Ù›¡Qk8¾è »~rßù ÏÀ’1ðfg »#Þƒû6JX¦ê” ?†«7Bd #µu üÐ 2W»çZK>œ±bNì>˜ž}D‡œñ Ê èn0ŽÒÃx'ŽFÁ©hø0îó‡Ë|$ÕÕZ3ÓPI áSÇ,ŒA}c’YiËQ!žŸ)½ÔÌ! uù˨›L2³4´ÕzÊ'èk­Ú¯S~?*?þç¨ y1yáÑ@E7Cõ!ל)6—ØymÝwO¾:9‡ù…NsýL²N“c«Ár.wÝǼ¶rŽG›×þXF¤  ”6Í‹ùS{û«på÷C "^çÑ>XW+*>A2ևɨ¿É$¶À溕)—ÕQˆØÐ•Jlê€1õ#òEÕ¢IÙyé&\U“sŒê,©ÞÎ õ¿ð÷6„sU€pð(áä…£Oζó÷ôèÚ‡°óÏÍ${“‰ÔsøiðnŒróÌpWGôµ0l=LTð˜A\ÛÖX ·Þ¶Âh $…@ÇX) }*D6¥‡ì`(°B^˜Ê¡¸ KÀd†‚(5A™Ùö¹Y>Ê‚Q¡½Íµó¨¦ÁZ|®óæ@ÿÞuÁ¢>e’ñ!ì3zN½Q|œgLú„D¯PVI>°ûq™aò4B&ˆ%e–d#¥_ºñdàz_¸Ç®ó­²ëƶšà½|Xg†]®O\Ñ&~ë-3° +Ý7c™1¢ûœ½tƧ’‰4ð…3×B¦bV¸çú5àT™±¾| ìrñ2hã=pg(tòl;Q-À·&˜_ ߘ*³ ¹þƒ%Yˆf„¼)P0½ì|œ$jô7IdÊ‚ýÏB¬/\=üÂÀb†u³`õs]§.PŸìê°ùÂßV®ÛîkúA/+°  „ɲÕŸCZB‰³9šAÏ“8?d\ò hó"4°/Á®_'BÞŽº»Æ‚é  ±õ©¤¯®í¦¥?¡™îõ‡;ü!Þ¶†iR°Ä‡arˆ.…·~³›b'í.ï—…¸^üÙ‘V&"9Áß!‘ìü+Ïá.\"u”V&uæjX€°× “ºÉÒôm\ C|á[I³Âû¥0¯ޏVùõ•¾®¥ÿ×…@†JתïCÛYÝÚ¾*æTOÍCº¹ö }Ç÷JÍa!1Õóú…[Þø& —I™¬ŸL*w¦[€/„·Úç@ûmÀÂ[8Y$H‡Èè}ñǃuf äüìâ ˜b‚§­0Ù)²^¹þÖD¸{ÞNi•I¯D >Y¼¨ÇðŠäzŠFñajf„å°)þž"csòoðý)ØÍÌPî%ýà¹æU~Oå ÞvÂBçÈ.‚îOAFQ•'æ`ÛµBåö'j?#tOƒÞ¿@`±¬=œè¿c$ø©|"n-;·ÍF(Ž‚;”RQ{…m›¤ü²ŽuO½Å5•]ØZC~<3̽þÇÎ"û0|ñ(ôîÆh(ΔÁáùP¼£á› IDATî¯/o hAþ*zdô¯Yø«s•ˆÃ|Å׸·±r7ÿž ‰–ð^™ø³ê `P¡ÌôŽm¯sÏM*à›³pO#ØÀ½"¹­Mhnsñ±=á<Ðö÷ÍY÷úm¤žH«’HwúIŸiíÂðÆ,}f‰©ÖÓp¾Ý¥k¾P8[ú~¿°u>$wX{ð’LXó(®?vlÅ8}¦.‘ɈW7Jظt7ÙõFMáŠnб‹”VmÁǦ^Š- /c˜Ìßd𠿇¡ñ2HÚÚ§P¼Ö\âå{¬ –CA1”šm¿/¬\a ‚ ÿ†È Ø\¹§eu6:¢›‹H‡Aþ!XÃöþ0r,„ç.‡¿·‡OB—|™üÚÔž‚f¼ðŠd/E¯XÚ"ô°Ýæ&0"*ìjÓ³$ö¡` ¡á"ˆƒÏ‚ßY˜_§ËrИî0ÿ0WÀ°·à€m)?·ðâ×Ñ ­ÓÅö÷&`‚¶oÎ ¬ÿÌÃðDwÈɃ›ÆBtÒ¹íòŽRîž ßÏʨÌÛ6Á¯[k?ÛÜæ*1Ú¡Q²ÉÄF»¦ˆìÝ¿cdm„ý§Áx3D~¾WIbUV·×˜û å Ñ½2ú:‘Háœñ±þp›DØf‹,.“YÁŸÏ[C·*xb?|q%Ln O@‰›¦YVdˆHÏrŸH®*hÿj"ÙúmE†§õÒÖ moµ ßl+ü§DJWƒ¬>Üì}ŒRf[á£2˜[*.9NÂØIú¶ Kr¬{Û ùAø«4r³‹!µ!DuƒÞë`à ÈÞXl™}CŸ}Rböf×LJBÛNÂvau^ÄÆŠ øm[åÄKæ X:"Â`Áf˜úâEø¬®‘ â ¶;b …;Wþ:§Â=[àºOÅñ†Hx(;+b;º9²Dû%4ˇ-AÛ~­€Ë€)°)²ŽA_ØØn: kK¼Ú§¾Â»q¯•Q!(S qð_×µçqþW·¡ÔD”º¥Be“@N"jV7Ô)¨¤T («e2 l®QªW ÊdÛ|0¦»c×j¾†²Ø6?¤i¨;©~³ÁðPÖtTÅiTß „V Duí…úÇ#¨w—¡vŸEQç–S娕[Q3^G …jÔô/¶AÏ?uc‰lÐ麥÷“ÿµ¥àU¨Ø(Ÿfõàzõ¨¨m)y3P†6þ.XSŒõ—`U7emŽÿk—ÜèÈf[h³‡’ëGh³š–§ZÈ}<ÕÂõ÷œî»Ç5Ýå<ÃâÜsüqåøóÛ¹^$Ïo'Çר=×>,NŽ¿¦»ûê?ÄGÚX –6wæ·m|¤oeGWö·Âéƒ]«õ>ÉÒ—“”ômÍX÷ą̃Œù$%6ÀØî¼q¨›1\‰ irOý³oŽÚawO˜<8V¸¨ø˜pSuß B¸Ídãº\M¸ÏÇs̼Y85ãeáXÎUáàsì:ÂÕ*@¸û‡áò’[…Û­C„ëUªpÿSQÞÈ^‘ì-*F õ~¼ K TZ;”dÈÃQíB*š%õH5áÝnÓÉ@]¬—p5¿M•Áüõ?PzÝů¡¨=UBç|«¡R.?uì1Jo¿ZËوϗןD+-§V&h9õ"D‚ŠZl ÅfE…ÏBi†:ʾ¨˜U6¡|¥OQúp’’>­ùÖñØ2ÈO²Úfµ‹ ¨­©ËrþŠ^‹Ë]3âLyûUá¤c¿G]ì»)×Ùyo&\x±ßèu©ê-áØPá\e¾Ðo1wÛ'¸Ú…·«[…ëÓÚ ÷«TÑFÍ«‹¼"Ù[$ÔµÆCÑ”Šªè‚RdðXnA݃úɃ±(uãEfIŸµ Ôi†?âê~SÓ¸’FjõR1F?/—¿]]7›m>­P[m³_¡:^_Wj2¤¡‚ÿ…J4 q6ø¥Oªãû@5Xo›é:„Ò0*…*ʪÌŸŽV<¤h¦wÍy{Ø2Öå]§ˆpÓr›9Çéþî‰9Û1LŽ¿³·ëEòÎÞrìŽan‰íÍéþrü6!î©ûƒ´­¬èéšc6ÓK<]ev¹,F±(TéFUü!Û˜Z/}º.Ç”>IÆv’’±ü/Çâ_jEª>”Ž×‹M^i³Ñ§]èV‡ƒÜôórá¦ÕK㦋Åý§š|U'¡¦„{Ÿ½H{ܨWÂé7ÆÇ«[…ó+ºˆP©¢ "ô^}TD²7ã^¢™Aœö{@¹N¢Eå!òùŒ_à¥B詃S z–ÁçÙÇ”j{m# l™…pÓ!¿ôÏßõžök0 Ùø¸‚Ö  ;ëèÝ N¥ÃM£Áì†8¦ÇÂgÀcÿ€þ % nì ÏM†mg!ÈŽÂàE0äMˆiY?ÚVï]CÓ¿ƒ¥~¾ ŽÍwd‡þ2®‚ŠàÛⶃ߀:Ü´P™¡è ‘¼äP¬‹Âa„øhðµ †æAãLx´Èu!ºÖçȆ±P<ÜÜ=7v~(8Wã”mà¹sãÞ©R×ÛÝ¡ß@Ú4Ô m¼.Û5ÇØ8Súä×&é£#ü°. '?9”¢ƒF2JŸ®+ø 1íÛEÆxÆU2æ‰ rl¾ØK©Ø–.‹ÅÖÔÄ´xpŒ^ -IPþº€1z®„†7‚9~ê iN&æ0m‚3 t9è"!f9„>C•¤D’ëüPrRÂ)Á†_ƒ!)åÁ27%{xb¿‡û›Hò —«$¼T†;s%2ÍPn•Xɾ.쌾:9f¹UÎáj¸;ô[_iSekcW£铃ò¤þ „PŒ9)áXç‡BR $½ŒáÛ˜.].cܴɹä})6Åœ#6¦çJ±9uM'¶vôJ±½]î[¼{¼:Nl´_±Ù?¯õ\¼üô³ÂM¥eÂU÷Žr@\#ØR 'ú!¹_Î<‡3„c͹tµqðE°ÃÆåÛ¬ÂíÒ…ë :áþÑÊG´ÁæÆ¢¼ðŠäÿW k’ Rø‚%^Nƒœ ˆñƒ#»¡ïï¦Ág¶§Ï4uIûK‹àù{üG°öà¹ßiü ÁR ’€@o·)8åàµ÷ì ¯Ûî{¶x8¶ï€1À¾Â ÏÞ ëæÂÂþðJkØ4Ê‹¡y?¸óK˜tzL”lUž‚CèõDõ„’“°¦gÍÃ6Y³!säMAúĬ}¬§Ô>ðh 쉄á~¾í?åPÜÚ¶‚‰î=ÿÖ<ø"]„MIqÏ9ìáÍĸþØV%)Áµ³Éöc1U†Lsé ssè·))Ò¦_¤K»¥¯'Kß-RÒ—÷DJß6zHÇÊØ }BÆrÞdÛÖN¢goÛRrRlM¯ŸÄöx ~ab['[Û¼ŸØÞMsÄ/ì/¶ùÙ›ÅV›(¶Û“زC8 „³zvvìw§Nì­„#“ÎüA­Šµ…kA¸·EÊ¥ç1Òl«ÂŸY„ãûþ.œã'àå4ÑøŠFX“$šÁ ¯Hþ'¢`QC0j@ì5@ ]#¡h4;*mz9Œ0ý‘¨õ¢èÓ £˜õ=,¨’" ø¿jp5…ć¼B3!-ãaÉB0aæx±gëîò^’å $‹Þok+?ËØËÆÃŒDX> ²@d38;éWŒVÐçg½ òwÃê®P°·–UP02úå øõØòêVô3Âo‘0#‚4ø¬ ZgÃÄ·ËÖm }¨{¯cª-vîØFä†)•ï³dF¶[¸,ÿ»ìÎÉ¡©‹r«Ô«‘ä/miUÒ¶îDûPé£ }vbŽôáÏʤOÏ’>ÞϽJ¹ê˜µœ‘±\0ƒZÏÒì“¿[lNŸŸÅ¹v—ŠÇNŠml&¶vù$±½ËÆ‹-¶ã·µb«Al÷å½<Ëï/®2…»ãÿíOGNP™W#úM8ÕŽ„sñîãÀ¢T)ÂíÓË…ë›îï)Z ÇNшVXÔP´ƒ^‘ü? ƒËá™(@k0¼·Ã•±0& ,› è$˜€;Í0¥Ü1;êóÆÁ¹^RÙ¸£CØcå¿ ¤*yuÆ{4À–½ Ñ‘ðÝjxdšgë/>žX >FX2«ú4Óey°~ÌL÷Ã!¹bDÚþ$BÖ:X{”žvÝñËVÙöòjŸ• yŒÊìu.1zX +á…¨€þ¹ps>œ°õ˜OÁ[¿ƒŸ>íäqiÇîBøø´¸<î†Ùäürؘ+ë}ÝÀB§Ý(’O»A$÷’ºØ˜+uãj<ž"mùñii[w!Ô }ÓO'}õCÛZÙ ‹ôåþ¹Ò·[øH__ì Mƨ}õ§êvJO‹­É²ÙžÞëĹô6ªq©8´Jlì̱¹eÕ, ¬X 6ÛÇ(6<>Ù³ÜñÈ4á¬èHá°'žµ-çq&—Ò„[í4òðá^‚…‹C8‡B8þN³p~ÐIÑc’DtÜ.Á,}é™(Ñ /¼"ù |à`s(ý¤t;…nÑðŸÀ:ÐgB†‚¾eðƒI¤ô:øp 4n¤Á’·Áb•,y›5X IòŸ5À•¶§bgWø4 ¾íÛÀácpË8°x0ß|`(<¹B£aór˜÷°È û¾òŒ+Fü`¸ê{É¢wúsX×̹®¯û,Tþ³Ò¦CôWâßXk\ȵâ±"¸<V]ÀïõÁݰ#’aA;׋õªxꀤ›¼;IÎçj¸ÓåÂ.dºP$7t£Hv§«Er ´a…’6u4¤O&J}p÷Ÿ¿³Ê,}û±"·¸`è"el†M—ëɶr5ÈÕ0çŠÍ9ý¹Ø «¾›T[8âR±ï+±µ—¼‡Åv‡F‹-tóÔ9vÓ"œuø˜pØÂW„ÓœA6ÂW*áÒ(„[7Û2ÒZ¬Â½¤ 8F¸Ù|P!œŸ¡D°N4A·h›F8 šM4ÄÁæ¢)¼ðŠäÿ ¬‡å ÐX'µýžR~…ÍK[‚~=P{¬Ð¥ Ö[?þ‹ÃdwmY!0~/w4بA'à$â_uµÍ¿ª&xì¸eäÀà;åÕcT~MÚÀ±]ðüí`uR »Ó£É=Ðu)èýáèaÓÍ`qgZi äO…ŒâÏè?bm;åkŒê\+ž/®~'g™†ÿ"³Ãâà¦î»çÃÅðö ‰TðT ×¹móÞõ \/öÿJîš­ªÖ‰KvZH¾}BÚÔ]x ©ôÉüré£eÕT3ÒÇ]ì‚áÛEƤ¿mŒf ”1‹',eb{ŽþWlQ×¥b›jg]*Õ"¶ûØ.±å~(¶ÝS¨Ê]· N« v \z›ní„pí;šp/ó„‹¶nvëmÜ¿Ç*Z@¿^´Arh…”_E; -±±n‚yE².ÃÛ ÙOFÕèS°,·²Ò·&BÂ>À s­0ÈùN(Ù^)ðæmò~êBH:(Ç –m<ŽÄ|¬)Z6‡Þ½¦¾_¯òlýÉ"í°‹È¤–®š:ÌÖO 1m»ö=ãùþe©cUóðYõ)è.¥óœu­¸–¦ÃŽ€Q‹:A¤›6A(…¹ÇA§Á3©.V¸/Ü_É'Ù¡ßžI•¶›{\ÚÒˆ4J4ê¤O.Mwî÷µpÁÐ…ÈØ Ÿ%cÑëÜrÂóvaß3b“”ElT‡9b³.WºT8‚´ÃuñâëUÂez½p[ËZ„`/B8¶Î @88é€p2G÷rb+E¾-0×*ÇJØ'ZÁ.Ô–å˜Sb³’ýDcxáÉIŒ ƒ;lkŸdÃR/ø»c ù™y˜ªÁ¸2çVâ’c`ñX0úÀ¢O`âvV°¸NÁPµÕ“¡!ðå{òºh̘íÙú»X$ WÂYWŒ' q×ìQ9äN„Ì›ÀšÃ!v+ÛU󃚸V\ 탟s%rÁ{íÝçŸüÜA(±ÀÐ8èäâ¸~îòKþ+ù$»Ë¹S˜´Y‰EÚÐо—ä/}ñ±}5;N \0ŒídÌ —1˜y“ŒIU^wváRIGÜáRá(ê:âÅŒÙÂiU9®68Œpîu6F8yÑ'ÂÑ‹Ç g;<ùh‚©šôëægD3Ø÷.-M¢1Ƅᅡ!)ø8vìM›6åðÁ=ýÁOk¾çî{àÈ!‰m•œÒÚ[‹ç¡‹?¬O½éÅÐô”)ˆ×`]04­|à#¼èd”¥PX÷´i;?ƒ–߃/ð-0RIºÚB¯‡åÀµ}`Ç.è1JJ=WñÉðêFÙä±d¼5ɃB©¡ëýÜW6x(‡¿‡-oCÔ}—ÔœÕ<²;àÓ ¢>ÒVeûO(škû0I3ƒdv dYùþBçgŽ«C¢?lïQF˜²¦»É/çùVðH²¹ë6¹î¸¡ȼVÞGW³ÈQ)%% šGA‹(h¤&p%Ê`GÈ‚CYp0 gKÉ*©›û¯ßvþÂaxt¯{úÅäæð\KÈ2C‡µpÒE«Ÿ^  á<©èw¤ ±þ*h~`Þ YáâHý± ‘Ý ûW²¡/kdÍ+ïþ³mûù5Ø¿Üu3ÆŽ`ÜL™MÎÏ„vsÝJ¡#ð‡õ_ÊF¾ïVÃÀQ®ÙŒ |¬Áuˆƾ¾Ðn8ì: =_ºpöÛ‹áá(xÁ TÀQèY(q–ý48šq`QÐãl*Å‹ =ÄØ4íùÚµÚIÈ”Ö(¥ØøóFºwëŽw¤‹‘àß$ˆ@VfzFr{|ë *€@x.^t2%§=’E›xÈxÚn§œ×•ëö…¼ð¸äÌlr—grM"Y¸vWŒ}_ÉlK×û¡ÃдûI¼ÌÒLX×Û1]ŒŠ#p¶«vÐXˆx |{CÎþ@ÔC2+V¤à¹b˜U‹™ã ád)ܱ¾é"Kër`m¶ëoòÅCð÷F"ºzFº.¥±=\¯H ƒ¶$Ýq!lÿ;Ì“ùý }¼”ó‘WV)˜ÐöÐok³]+{DH[å—KÛ¹½"¥Ï)¤žt¡Á²»`L „)ò9Àí¥b"R‹ )_+š+¥ª¬~Ù{Ò‘žkäá>µ'$åE°ý}Çîš1¾æ= -Ä?ùÉ¥0±gíöœ8ƒ’Rá¶m«„ë^xþý´ Ì0HÁ+ühû=d”B›QÂÝCÞ”H›»,i S ¡i1l€ëJ%sßÐ3°)ôFÑ—ƒSxáêÉ'o¸ðéTË!\/O~/g–r¸QøB€"áÃx|[ ôÁ0˜ ¦9óT÷+ø¯ ï᎛aÒ}`6KZÏ“iž«?WD²p%ì®+Ÿ€¾Á7ò€ß£Áw&&Ay=ʪ rÆé'}Kid ʾPwÞ,˜Ë±"¦”ŒjŸt‚ök*3ι 9å0ë(<ÝžM…Þ\{ý½"ahœöq^W'N¿xÄ@üÍžS}Û)qÖ.Ÿ*.ÒÃÙ úpõר©¡G¯qhle¸Ól¾J³ŽJÛ¹±¾Ò×ôš¸r¸#tÝ㣲?VcÔÓA˜Ðã[\Lþ8 ÅÖON2´[u Ùþwú |ß J³ëöÚì/f­«ŒxñäÏÙü“iÂqß/Îûu¯kdYl¼¼xMƒ˜ `*„÷ ‡Orò…Æáö h ëý`” >/ñP÷íÑõ8”XñÂ+’ë4àý8¸Ü°Âþ˜Z`ºÁæüÂè5ÎLw˜Ø ÔKà{BÄÚ- Vºð®lo½$ïÿ1Ömölº2’…+‘ú¬dS&욆ñà?üûBá\ȬYõ«?ïò¡¤(¨Báx(Œÿ2ÝÌ@O€nÐ' >êý~–õ@Wâ•#ð@´ý£aef펗 }“¡{*£ºÀ('…ðÅfi³K¡|Q‘ìƒ+¹é¤”óq©Ùîê4…Ð=îïÃÉZÀþÑÒFÙfi3WC¯I‹õ…ÕYÒ÷܉_ W¤@£|Š€â"_Ô®\™©GÐEAèÓgq³4ˆ6ÂêîÐ(öûCV6ª‡¬‹€ayð½¹Î‡¾f€à äqÐ…‰v/|³òA~×ÐëG±iEàЫuo®ì/ž_)p|oõUÝy@ÛÖ0ánáÀ+@º‹Â„¯º*øZƒf'„Ã猅Ù°Ö‰=¬f+ ÝÛ¯…„`ÐöÂóHÕDk¬5€>H4È3ÑðD&^¸êÓ[µÇ­!0%R2%ðfÌЋ@6ë@»JšÀàuéäêsr |Ù ¯¹°èâbl4ÀÒ…k6ÂÄ©ž­?OE²pñƒáò™Ò®Ûî B6¹ ½-”®2 {bw‚߀:¾è;ý`y„hðI\“ Wm‚=…Ð:XH>ÚèÞk8c‚[·Šh™œâžLvo“8ÁW†ÃàØ‹7Àý’áùkaëÈ|>» îë,B1¿ ¾Üÿü¾(ÚÃÛ'aä'0õ{ø`§Κd€›  wH¶#§†)íâùƒro#?‘{¥½Üû?¿–ºÈ/“º¹¯³ÔUæãRwÏ_+up‰Täƒc¥mÒˤ­\þT#}Ë¢¤¯¹Ú­§:Ü:XÆÒU›dl}R&cmy˜Œ½:„ß±Aa/‹M*]!6*wBåJWÎf±e(±m®ÈÌç ÔuÄ‹‰S…ûâ„ ×{¿³×!nxE8=ÙI³˜i QÒD4…Y'c†^4%Ò®S"E“xáÉõWøÁ‚X[Ô«28R + §2uàÓTŒÞ ;œLUêëÚ@È{€ ÞÕ ¯’Íc®Ä[/C—ŽðûIq/˜=8Ÿ O4z! IDAT,£D²ðä ÂEë¾ \ù¡ÄÝý8œøèÏß)ß ™×AÆuòÞÐ b¾…èoå½Ç1%Þ £/ÃmùâO™i–dO åµÙ0u¿Í©ƒD¿p%J,•4žµÅàµÃG]aJøñÈyVކGzAdžPnÕGáñUÐuDMƒ!ïÃìð©íI¨'×]k®Drn¡ë®Ï~¯Ÿn–:ò¾ÔI×9RG«Jul(u¸r´Ôé÷HwI”:ÿƒU´ÊYä釤­\‰DéSÒÇÖºÙ¹ö|l_1#cì¥bsï„Êô0 ­ÄæÄØìNù^±I™×]xÏĉĦiz±q¡mê‡Í]±@8ÀÇ(œŸì¹s›Ë…û~?)\øÖË®=~ÂÝïjÂå!ï ·‡:iw䊖Pq¢-2u¢5Vˆö Ì–•=V´‰µ‡×Ý¢H𥠲aO™A•@L1k°hx•™n/,r2¨¼¿v7Ø žò§Ý ^ »¥r·o¦7sÔu$‹jë>z|>ApâCØ?ãâß/[g~¨\æô¸¿²x3ÆúË®‘ áõóf=íBÙNö«»»ßõbÆ!è!©Žu’Mvfî*™{þÝ Ú„À¤ËÀ,@h†°*ØvZül8ŽCI5ƒiÕ6ù~Ï6àï ¥.˜¡Ìµ¥ô rH:÷˜µîì¾r¯V%÷nG…µÒçù¹Õ2sܽ‘Ôoßd‰ªÑ§©”iýdæyí1©_ßBi“ã%ÒF®„=iM”Q’žÌps Ðê² x¸NXá•`˜$áǸ5 5üÙïØšç¸Û×þÒ ’n[÷cW(=U÷¶·.#^Ø£9ý¼\8ñ×=ðÊ\ qàoV8f€§,Âí»[BÊ~(uÂ,.:mÂ`J+ð¹ v¯Ë4(,«&?FÑ&]÷F¼¨õ8óVAÍ ƒÏŠP..-° äe t= <¾< OüæÜ±£€C‘’mGaB°{rß«àå'%Væ]÷ÃoŒÔPß"Yü¡7 ëÊYë`ëhòwUåP0Òš‹ ˆ¿rü!™$¾‚îyÒÐà‹0È¥ †çýY Ÿ/”=5£¬€;wH†µ®á0£¥k;‚Txq$¼z n)ù`ÌÙ Ã?‚èiÐé xô;Xu¸z •ÛŠxìu¹k®3Ï.’]8“œç"‘Üër¹×íåÞ«CI¹ÔÝ£ßI]FO“º³Yê:ÔOêþÕ¤-H•¶‰uñºïŒ–Ò—N”Jßr§ò¥rU¼^"c¯TÉXü"LƦ ĦÄbsÒš‹ rh_„Û–µNl]×%bûêöˆÇvUF¼Ðy0÷òo{… •nì{•ëÏñt¹pº2 ÇŠÎwOü&Ú"k(ZÅ ¯Hö(4`^,tö‡Ü ÌJåÿÓËAë­"`w>ܱÉ9;ž ìõ‡†Y Â`l,¼é†'éä&°h®$™öøìkÏÖa½Œd¡Aç!âJ(: ?«“­õWŽÑÁápƒ/dYáê\øâ3ŸžÊÙf¸e«Ì ÿ«ÜW»ãô0ü2X~ý7 ½`íi½’^€³`ü2X²Û¹ g+m3ª®r¹°»F„¹`&Ù~ W¹[Øïq¥“1)sJ¥nÇ/“ºNzAê~íii ¤mŽþ[ÚjøeÒvµÁMqÒ‡ÌVéSÙn\qF Ûñ…IÆ`–UÆäá2F]Gü޶Uf±qE‡Åæuþ÷eËtöˆù™•/<‰Ï¾NÔë…#“›¸þoæ ·«0áú½þÂýÎÌ?ܱI4F«ÑÓËmÍW*š$·B4ʼØzѬYxÝ-j€É‘p[[ ,(—¥”1fHmƒB¶ n\NÌ÷–è!¨ hEÃü_ÐvD†@d¨l~?ç}¨üZù>"¢šƒ_˜„.½ì:x½ d¤Cúi8“gÓäýÙt0»xOL}dqÙtÙÈRž믗o5…Ý_Ùo„ϬôW.]y®ˆ¯Ü\߆C3=±Àu¹pÈÁ©xO»^lÊ…‡÷Â+—ÁÂv°3Ž:¹ .5î¹îh16¡hª€%{ ׯÝeeðöµ¿Þï~É·¹P$×cw û=~÷KíŽs2ÞÞ·Ü ´·>„ðRÒ®o!%£Þß)Fm¿“ƒ«i€ô éK›rÝgj"ÿèëåÐ-GÆæ•ØáÜØ¬îÙ°„ÍW.»}É$®^µ)SlÝ5¿ˆí»l:ì~¬îm±'"^}¡AÄ5„ñ/ïcâ >A¸1" v/ƒÌC“Ù/‹.ö÷9…òš]pî{u‰Ù±ùÇ!ô ‰u}~ÑÃ0‹ãa] ÊEclê'šcWK¸s/,0‚Ñ$Ú¤8F´Ê^<—^‘ì~ †g£%…eÆYhR!›J¯-ƒ† 0¹•l¸±;Ác^×@o:ÀG—ÃŽ_aDŸ ‹ÞˆÊÿG:»¢ Ä@¹*b [Â%&3!ã ¤´½žªÑglB:óì¥ÔßHMîÔGm³+7A‘‹\Ýâ¯ÜÅ_…A”N²Õ ʃ '}}=-”g• yÃâà³+ Û:(»Ä5eòÞ+ [£Êÿï: ·Á{ÛeF3,n¿I_«F°·–~°?ï…ÂhÝ¢áT-ã)Õ×{ Ñr…%rϵE«FÒE¥ðè§âáwv€Ñ¡M,Lê!eãq˜÷ |¶Š.ÑçütÒgB ’ qöQ÷‚Úd;YD(V)”剀vµñ;vE‡ÄæõøVl`ñ86¿îm²=âÅÄùÂi‡ã Mƒè"€cVŠàøˆ‰…øDyŒ¾øq*˜sÁ7¬àäj§]Dg@NÁ…EõŽ|ø¨Üöm‡o4ø‡ ‰ÖXÙ[´ÇÈ<¸æ|çåÂË~ D³ì1Û‚÷xáÉîÂå¾ðaœLf:©0)èhÿPXØY>û×øÑÁ8‹F ÃP{çÜ·%Âm.YùPPŸ$©Iÿþ¬ß!OÐ lOÑ â ÎfL&BT1&‘ÑÐò"» ËË!ë,œ¶ éôS"žÓO‹ >“øÖÏH1WC{ÛäŽ ñ£ko÷W.z×ñ•‡úÂG¡à¯Á×&¸5Škè˜éI¡¬€1;¡m´•Yå¿Wã¬ß9QDÕȶì+ÿ+4ÁÇ¿Š8Þ|^üß¼"xo%Œ†À„Ùµ»Öò X½wÑ·ð[׈dOÅIvvyõN¹çÚbÂQ(ï­¬ô™Î)…W6H©Ú®ÝI™=¨úvµã•ˤÏ.–>ä.?dWd;2lîOŸ„Vº^Ü–iw(»Ð»D¼cW#ãG±}ç‰-,>êz;X¬XZÉlò‹aʵ€éÒœep`ˆ#œÕ£=,˜ §¬pã8 °­Ê:0qe/á$ð!èWÀ ® †[ Áì@_ÿñ¬hŽÙDƒô(„Žùð«/4®€ýg µ¡h—®føÍ„^‘ìû©‡¯m‘,vf@;‹ÿžrÈ6Àöž ‡GáµK ÷ó~á–¦pó!0þnk‰; ¢;døBÖ×.íüÁcwCB<ìÚï| V+Üëš§ò¸)Õi¤4 Iº}?„7ÜcuÛ®AÍ¡ëRÐaÿóîA±û+½Q¹tö2Žvpéô²ƒ^Ì-uÍzO åür±6ö„qa]|hÛRþŒ£ŽÎ8¾± î wö‡) k¿±í»­®Éõ)Nò…Dòw[k¬° ©{¥¤-.„Í'¥LúæÜ‚±WJ9…àöé+eVé;ùnŠOéJlG±‚¡y•‘g> »pä™óù¡Š‹¸ÐEë86›Élr×¥ðî[Q«qwo"\qe$ÆÃÇÛ!žKûغjõóð~xðhÓ:w•D[=ä8é 1ÃÁ'x_&Í Ãâæ°è(¬úÊ.òûÚAhcšÂ—=¡Ãw°»:d2og´‹ Óñw÷'^õŠäÿg0jðE$`>´-+ ³Â. >ï °! ÆWÃ7!¾p]SÖ4…à` (¾B.‡{æÁ»›Üsþ~0ùŸò~ê‹"/9¨ÄÈdœ]I×y)ÿ®ˆT0ÇB!7ÙBë䃣«áÈR Ó=×®¾ÑþÈ i_ÂîÉž9¯ÓþÊðB<(OÁsÅ®» O åùðÀ.˜ÛÞj ¾pmkñ]õµ™£šø®î=+·ÂµWÀè0ë³Ú]çJÛ@î×QâþZk1}ù‡»…+}’k)’ušÜ[Õ{­ F€ ñm¾”»K‘ÞÙ.¥ª¯y›XøÏ@IX²l|·f'ÊoØ%}ç¯"í°ã $¥õ³AðZ0$éà‘¢?͈»ËïØìž,¡áâ‹m\Ý­v{3œEp4»ZJÓ>aÛ4—lÏ(<9ûEøº{Õ*\ùùÛ ?†Ò2Çx3+ÿâcÎÇ]]໡ÀߖɳۋàöaP+ŽÂ’ðíQ(¸Àýß ©!Ð=J4É®µÐÁ V½h–ýù*Z¦Ï Çf©½ðŠd‡07ºùÙ2ˆÏ“§Äèn…VàŠ(8U"NôUÃÀFÀæpc \Ó|í›»OAÅð)ƒÃzøo xùr8x>Üâ¾û˜0âcá—°Ìņ×l‚“¿K9_Xxï>™¥b›ô#Ñ:¶é£}•‚ùØZ(qÓfQÂ%CÎØ<'¼wÈ_Ù¼ ·ú‰U»·Þ+sýÅxR(Ï;ÃS¡kXÐÝ&&¬ðÍÙüµlŸ$¯ps¾‘|ß`xeIí„íáÓp4šÆA§°¥9.sÝ®–IZÈ´ÖÑt¹×Ú îûW¶3ØŸ ÿþûN”îî×6‡m¤ +wKŸù« äªx®NZ`^ˆ<ì&êá.Iöã ¿c‡¡ÄöZ-/º.Ÿú:åÇQDB“^•Â8æ¼(‘%9plðA´?üã%8i’g²r¹ ,[!œyE;áЗßtÏy>Ü“¯‡”Ëáß-àï» 9 *Þ…àapsª“~ø?öÎ;<ªjkã¿Iï ¡$”KGzGªT¼" "**vÑ«E@ŠDôSA°”"M@º€ô&-4Ò“Éþþxg$`¦e•õ<ç™Iæ”}ö^ë]ïYgïµ~‡ovÃw{à”íÅDfŽ8ÈÆëD”a5ÐÊWÜåx ¸Ìÿ•þǸ"WH²û284+dœ€2øÂ QV 4­¤‚Rö’Ó" g øo5h]|mï…¬–‚#¿@ïâ>ó;r`ÕM6§þ…ò„CÑ÷g_q|z†'¤ë}Pº"ìßsÞ“«'‚ÅÊ6€*ím¤¹­@²ÔUÐâíwl³rÿØ¿ 2=±¨ßM&CÉ6J ¿úf°¦~4_ùÜëÎwŒ‚vdàæDXTˆi¯¼A”cB`\èÜHA,?w|‡Ý;÷œU"|Uã¡{Køn¥{çûqÈßµMÜ#Éé™Ú‚Ü+P -=Óý"'žÊjêëªñêû9«\;G–USjfþ¢àÓж‚~ëÜ&‡ÁùpÚƒ†ê-‚l—OÒ!!fEé¡·Œá‹‰d¼2ïØQ±¦ ;¬F6™ kïðL! *_£(q•P¶¾üÀŸÁ–d8°Ü(YÇ~•í×õ¨\O>å»w¼„ÑF>sþgò¡ïç“=ìq€©wÃý7ÁÕ›áS K:dN‡¯*A¹«Å+ºVÑöÞõðóaøv|½ %‰‹üÜIÜ„$M™ù¸ÅΞ€´râ4¿eÀkg®p¼ËÆ®tAþrCŒ6lO€ŠØœ÷d@ÃR@=ý6r;t½ Ö÷‡ƒÛáš Rúyûà¾ù7V΀¾6‚üÐÝ@·fP½´¢È3 1Šüø}+~–x¯Cà¶áú>uäÀ}OØ+^‡»Áèð^+X8R¤Øš q ¡Í ¸ë{u\ ×¾ €õs±ìfÍaª4•¬ôGÅ¡ÒÔ¥ù•‰²`žA>i Í™Â%È—eOçQ¶w6„O(Z˜a…7ƒµ&´¼¢Kz  Lš­ïuwÿ|öi×y ÜŸ¹’Ý([\ƒ9’í÷䉩ö¾ž4Û½è½]¢KJ'¬5¥#VéÌŽ'¤CžHúêm‚l—E™²å“ÚÈÆ£,nå;. I;"lÌNVÖt1-œ_°úÚ„ݣΠËÛ ¶[3…õ G ûG—/Xñº|Ã¥þbêH}¿m¸|‹·ä‡%ò±1ò¥…%3ÖŠ T/-nÐ݈+ î°r†¸Ä}óÅ-²sÄ5Þì(î±¾¿¸ÈÈí¶gšzâ*÷dˆ»T´ˆËÄmnãŠ\N‡¯tAÞR'¦Å)¼4Ú8eà¿P5 Jµã?¯çòÇç3ÿ:w(øÄ½, ´¥xñóá]u\aF‘KD õ}ä+ÞíÇÿ„è2°s ¬ž}Ž“ WiûélÅ–æ§•o¦¿+¶„öÃ!;­¾0=ãðZ£ ©Ðê¼Æ ko‡s[‹—Þem‡S7‚ÏÚ(rêQYZí†-¿{§žŽ(W/ ïÞ¨’Æ ÒŧJmÉ1ð¿›aÊhöˆûY&ÿ£û{&œ=ëCó« 2ι1Åál2”Ñt‰c.†oþLÿæf+2T÷dÏâáŽäNû6Ùs¸üý¤ ~¾š2óÄ0.—þLí­žvýù;d»´*‘Õƒ$©›}ɹñ¬’í#9·UÙâkafêïphÆe¢n~Âiûô‰ -.fØ1Þ¾åà*ḣ²z¶|IÍæò-_xÑŸ|–~#_:q2œ-„)ò¹£ÉûŠ4ÌmÀ 4*R>µ°$w4¹o3ýï=wHD\b…EÜ")C\£Ï·â=fŠ‹ü‘&nÂi ¾m&îrk¦¸Ì5Ùâ6‘>â:±¾\‘+$ÙA¿nÏã¡jlM††©Â®!™Ð$~i•b€Ø:~eÆÃ=ó`ÎÞ‹Ó´4ÖXôä¶ha.TÓñV¹TIxl€m^•—Ë{Þü$„GÃæ¥°q‘ûçËL†saÞ`˜Ð^(ÓnÖüæ“;4ß­FWèú Ü#NA¿Yšß\¡3´š¾!°oìy»˜*àKap{æ wI„ÛS ÞÄ,¸©,üÚZG¢Ü¶’ˆÌèNZ±:e\õ&|²éâ¹)épßë6½S‘Iweâw:ß׺_ ÚžÍÝê{žHç©ôožJýæHÚ7g¤VEé€1Ò‰”\ Ê Ý¹êMéR ¯tkócÒµâN[GËvo*+[¾e½l»K¢lýö Ù~1”=o 3}C„¡: SûÍÆÜ Ì­ÑU|r‡0yÚÍÂè „Ù;çzfMÉÆEò)áÑò1Þ”g_•z>6@¾µ0ÄMq?K[`ãû§XcǰKz¶8È=óÄI:~ûw§ R)q—&ñâ2Äm¶&‹ë|/îsE®äËÊøÒÐ!2!â „3 t¯¯T?»Û3ÁOµ(ïR¹Éö´WX\m ÷ÒoE‘Ÿa¡0g¬Ùè½~Œ, =ŸÐ÷)…”Z-õ4lûf? oÖ‚—âà‹~°~²RË…DCížÐýè¶@)ßN㊩ò= O‡êQÿŽs°ÕöÄõe4Z¦R¼‚åèGV¿°*´8嘘|3, ô^;OA»ážYù/ºZò+üß\ô‡ƒ¯›°dO¬eðîȟ󒛺wž³$ÉîF’í÷âî|d{Ú·ëݯrè룱ô—.ä7 ätªt©Ý‡Ò­š±ÒµÉ7K÷ŠAöµÈV—´’íþrV¶üe‚~ßš-[·"Û(¸XBÓÖqÂÎÀX¸a0µvOaì™ÂÜ/ú ƒß¬%LÞöuáe'²û”žOÈ×xKÖl”/ •o-,É+š âWqŠr6ŽqSÇ[¸ÉŒ£€­_¸8L÷:â4¡ˆã$dŠóŒ/}…ÿ]!É—‘GKÀQš‡AE`Ÿ/tjí£ )ð…¤$àìÈgÊSÀL‹”ðc “ܳç¼EŽ/ Þu!×£7¥ÏSkæÂv/Mñ8 ~³î…q•áÕÊ0küºN¡Í¿W¸½;Bzƒ%°˜(_@˜`+Ï40 f_2Iì@*´ùÆî‘ÕŽ© ‹Z@|Pá·Í¢œ×¼Q‹ þxXî@Ř¡ï«üs‹ZðxO÷ÛlOEöP¥(sUÖïRä¶rYepp™$ÛÓÀ¹-üsážḪñº—3çuo.{7Ò¾å%÷ÔØ9%]¸œ,? ݵèò ûŠŠ ÇÉFÇԔ͎Ý#>pÉÃâì Ù<zP² #cç 3¯" =‰0uÖaì¸ÊÂÜ_§{/ÏýöÕò-!áò5Þ{ï’- É/š ⌸E¨kä×; pÄÆY|ÅaÚG‰ÓìóÇ9|Lœç(q +r…$ç)Bá­Rz«·ä(4·@º/T© QðýH±*·v^B’€)ké§ ÜmþºÃ[QäÿS‘¯æÀæmÞë˘8èñˆ^KÙW#…œ=›¦CrœþÞó"$}¦´kÁ] ä—wJ¼þuŠPùêúÁ§‘ª¤76&¥åƒœ†í€ë~ãЮ¤^áv/S´D¹zIXx¯Uņja^ýñ0æ'Èt0ßqR*Üÿ†¾¹ªÄ¹×ÞKÓÁ¹*9nÐww¦\$z WòŸ9’Ý Éö{X¸Á½LžHûf—*qs$9˜æ-Ó*«?^:*\x¯t²( r÷2²Ív%e«×ý"ÛÍΧÏ'¥Éö}Ô-º5õþu„‰q‡„‘Á]l©*?†‚0uÓô¢­˜:u¤|LGäs¼%›·É§ÉÇ–äMqŠ»8ˆsL±ˆƒä–F\%ÑV *%D\&*@Ü&ÝW\gÉQqŸ·J‰ ]‘+$ùâàJ̌כ±ïNh‚¼±@PuHñ…wÃâ (¿ž…26…Ú• ïJ‹,ÐHzÈká­·¢È•*À=·Av6<çåé}G@`0¬˜ {7íØV~BÊCâf8ð,œî Gãàì@ÈÚ¾¥ ü (»J¯‚°ûÁîÅ–óyQaééðŒhÑ)¨·~8 %à»fðV,ds¾”(/m ¯t.xaž32-L[¡Azõnq#ìÉtpžH÷g 87"ÉQHç©ÔožJûf±h¬Cƒ4öó]ˆä·°ï•ÎÒQoä@ÙâwÍd›?œ”­.r lÝ3É€‹0¡œ÷ܳ%\ØWz•°0ü acÖaåÑ8açg…¥!å…­E){7ÉÇËçxSž'ßzÏmòµ…!E“íòŠk¤ î±È".b—]F\¥ÌQq—²Aâ2î· ª.®Ó͈ûøZÄ…ªpE®dI¤Ì-§Ï¥‰Ð͆¡–аh´¦„§m•€&ý¦§µÃ6Ũ üb6À oò#^Š" 0ýkع×{ýY¦t¹r¬0õÙ¢[¿ð ù=· ¿s3ç œGyI7äIs[@ôûP.b¦@`ëÂV> Ì+å|á§L¸çœã ûOeB×_`ð6¡éã•au¨QÈ‹ìDyj5€¡í ^˜ç¬<þœ8 íêÃýÝÜkë䔚̞Î]’lÏ áI.Ó-rgép‡${2íÛýÝ4Ö'Îjì]•¼ö m/ÝcõA®&|¼²lrð6Ù¨£×5~Ê&Ì+!Œ(LNßZXW.AØØBX˜Þž?éb­:ÒÍ9»¤«ßô“îúzØåEøÉÖ>n(Û›~D¶¸ÞëçŒ0áˆUá‰ʾ®Øo…eQc…mÖa]B5a_ÊtaáåÄŽ©Õ k‹R>-ŸÓ±Ÿ|·äÀ!ùX??ùÜÂG¢É îÑÆˆ‹DٸɃ\˜ZË"â4þâ8Èód„ŠUI'ê*Žt…$ÿKåþ(x¬äáà“©~Pï,,ÍUIç‰ËN¢PÓVõ L²ˆ/½d ‚°Å[Qäúµ¡wwHK‡ÞònŸÞ5||aþGpü@ÑŽo§À?N,€SËœ|z߉ÏÀÑ pª;¤Ù¸@ð;âAÔKàçjp*w.䮉pÄÊ” ý6BÿMœ ·—ƒ ×@“(ÏthL̽ †·W~¡Áó ÇTh7N%B–0e¨{óˆsËÀ Š,viwtvý<žJg'–×6víøâ'ÙÞvwH²§Ò¾ÝÑYc{æ¼ÆÚb±H{´”N¶"çÎ{j™°Õ?RX[”rü€|ޝ|7å…·äk{w—ï- q4š â }Œ8‰/â(õl$¹¦EfÙIqš'j\8né9qŸT?q¡ð q£ÇJˆ+]!Éÿ2imOH>9À)ȶ@‡dØ ßr+ÒÈ­žÆ°ªLup§á\þ­š·¢Èc†‚¼7Žó^ŸVmmzAFÌx¡hÇ7¨,T}TƒòÛp7Nd…´ïáÔ!¡$> Y;Á7"†AÜ(½ Bo‹£éMóË…ì)™zš,‡Mç j(¬j ƒª¸‰jëëªÁÉdè<^ÿY¿í= ÝG¨ðÃíáÕû=äùÎÀÿ&êû[@7ÂUžH·l ¤e@£êPÒ…2_N·ðÄœdHrÉHµ=-C÷â’·ðPÚ·2ÑSÐ?ãyõ~é`JºtrïQýÿõŸ¥³'“¥Ãë‘N»LÆ‘M­j-ÛtN67õ°gmÙÅÊ–`aRée¨ˆa¬¬Â°„r´´ï…q®Êo6ÇWõQanQÊŒä{Úô’/ò–=&_ëã#ß[h÷ç`4nã&ˆ«`½ðÜÎeì@»ìÎʶˆùØb7K‹3]!Éÿ©ó*€ŸEwŸcÃÑû3`Í%½Á5!Ò‡§ ¨™#-´ç*œæÈÓ¼—¢ÈÍA÷k!9ÆNðn¿Þõ¼9³'Âé„¢㫆«:ÔÑoàìzÏœÓz’^cWÁ‰6ò1˜l 1Ó þD¿ /— ÙS²+Z¬€·÷Kù^« ó®v¾¬4@ÿF°òAøO øå04z–î¿xŸ5; ÇÈ̆Á}àéÛ˜õ•0¦&ÆZ“†1!˜ñÝ·T&¹ÆÜŠiƒ±€ùÆ‚1ÌO`*9qÝ;¯Æ˜÷1»Æ`ü| ïþ~ücŽc^æÝ~­Õ³À`¾MÂD–,â1®„陹9Q«p¯e Ç„Ý)½ SÁ\ØÊnÆ„?Šñ‰Îµ]?ùRSÚðr˜÷ú¤{Ã©ë ¦‡áØu†N±Žègx÷FƒyIÛ»7êÓ·£!{¡!g‘¡ÿuži¹XCÒƒYlèÕÖõó<ÙKçøa¬ëçÔ[çøì9C³&†[{žbøð]ÃOó ¿ï0d'LJÑlÙIjÃOóÕ¦g†¨Íš¨Íf±îÁÕûÿa¬Îñd/×ÏÑ«­Î‘4Gcë ét.{¡tÐÓzmß:ÅʆLÙT÷2Þ³ã—ÄçJ Klÿ÷‰Ö”Ý|1•^%l²„n»"j k{f{‹û#KÊ-0òIÞ¼ö‹Ãä{ü¼ð®áç#aÞ§pô¸Jˆ³‹8Œqs«8N© ¿3>@Ü(1L\ÉÔw õáoÅùrsÚK¹k~›¯\µÒ~ŽIþº”û\UÌÖP)ÁÒ@Œû¾ÑPJ4»þ~Φdg,˜ª^Plg·kZÈHÏôn¿Ž["`ºstÑqÓ©˜^FŸÞ¼®L‰70ñ'.8ªò阘˜ÀÛ| ‡KÊÉM‹4X¼Ü/ñA†%-åÜ­Ý /_eð³°„aõC"ic ý9~­‡zˆe/4ôhé™ö?pƒÎy|¦!:ܵsD…Î/2U«¢sÇÆ•5ÜÙ×0ûsƒ9á:Q]y̰ÍbËæy»äنز:vå17ú ÝÃ}uOÎôA­Šê»óß«/]ƒèp¡Y¬1õ„nôh)]3‹¥{ëFÒmó’t=>"ÿ}ý,²kwÙÐ’–²)oÚ°a‡)m8\ÒÞæcbfcìxBä_çß¹y¤FË[âÝë–ˆ”ï5Çå‹ íþ\ ¸UEÜÅXÄe@ÜÆÜ*®ó†¸‘ W:WUÜéëRWHò?–$×öÇäT×@o ×à ÆÄæAXâ‚1©½19·b”Àô“cÁd[0×zI©Ý–+ñ„wûµQ'Ò¬Ó˜ÐÈ¢ãâÕ°bBzcbça*Xå¼ÂL¸œÛÖ2†À"ê_‹aduC–Íѯnc¨ò×ýÚU6œxFäáÀC£8ç¯õüÝ"-)ó mêz€ X KÞÐ9?æúy&>¦sL|¬àýÂà ݻÞgضá¯d3+Õ°m£aÖ Ã¸— Ýg¸®“¡ZUC@@þç½MD·J-çIr•Z:vv˜ 6\×Im÷’Ú¸m£Ú|é}lÛ {ìÞU÷쉾+hût˜Î±ä ©»zѦ®tÌ,–Î9{|£8é¸yI:ß®ò_÷©"[1=d;#«Ë–ŠÂ††˜Ò&Ü„‹[…5!½…=ÿô·w—mK¤|Ñ#ßäÍkxB>xù·Å/š â.Ùq™žˆÛäÜ*®ü×ýc-âH&ÄÆ™jŠCÕö¿B’ÿq$ÙfG¼9¥¬=%Ó(ÒúNc=a}Ù SÌyÛØ“^Thg¶ëÛË8Onćy·oÇÿ"@ºå©¢ç³ÑhøNñÐ;ß ˜àYA"ȦªÁt5¬këø”‡ÂØZGv–Ó?ÛÅÐ' ÔÚõ‚HÃwbB\¿Î»‹¼$Î6Ô­ä~»«Ä’çêœ]š¹vŽü¢¡~~†Ö- Ï 7ü¼Èuîb2yþ„aÎLÃã¦ÎY½y€óןö³ŽmÔÚy’ܨµŽö³ó×½y€Ž:O÷0g¦îé"âN÷þÜpõ…ŸŸg¢ðö­K3]ò\¥»úP·’tË,–®¹zž˜éºyIº?(רô‰“˜²™ÖÑEg·b…¦«ÁT3˜Ò&xVñ­P<°®á;ÂÞ³Š¾-·<%Ÿ4þï^7Ø—O.nÑd‡1qšºˆã˜[Åyò ‚ùˆ+™wª).eù‘䎻C f¶ôn÷eÀÆ<ÐU …ûª¨Òê[[àk „Ÿo8y]od´°X`Œ-Ï«á|²÷úµE¨Ù·o'í—hñ75v¼X<ôΚiul ¦¤CB¶ÒF-l¡­IäÖùù 4X ߃(ø¢ Li _ݯuU]Ò—@·©î8f-‡ÈP˜÷2T‰s¯ÝûàÙ)úþOB„ Ë­s§ƒ{æ^xü˜3Î… aÔ3Ъ…ö]¹F¿m:C‰xèÞ Þž æë÷Æmœ¿þ9[‡ˆÎk?æœ ™ ìm]0_÷н—î©MgÝãÊÕú½U õÁŠ…ê“93ÕGÏÜë^Ú·ˆ\ù®Ÿ¢±tGªÄI§"C¥cî¤;*]q‰tÿµ®²…)eQþ²•Ke;Þ–Kñ"!¦(ÙhZ0¬ Åëv¼(ì¿IX\”òíù¤šÍ壼%ç“åƒA>ÙRHÅÉtq©¼aã2aˆÛ¼µE\ç¾*â>—ÊÆq%°q§ q©»ÿEÙ.þñ$9ÆÞ. ä€õø¯gÁŒ|Rߌ¨>ðÙï0:ª¢Ò:YëÁ[-n¼š6€„ã0q²÷úÕâsañg/BFjÑŽs ì}ÒåëÕ}a·î?UÃÓÛ!1 :ÅÂÚ¶ðe¨æÝvÍ‚žëàá-nþ-¡W]H΄›¦Áˆ…`uSa­9Ð÷Eøi“*«ý0bÝ|(xûkX½]ç{õç¯PNGWÁ—à­Wá†.ÛwÂøw¡GoˆŽ‡Öà¹áçU+Mßz[Ñ‹&m] ÉgõéI¶c?‡SD«íÅmÝÓÏ«t­;éž{ôVlß©>¹¡‹úhÈKê³ÓêCgåU[åÄÕÛ5†îHl”t©\¬t«ï‹žÑÕ ¥ûÉ™²…þ­do‘­œÍò®V6¬m+¬HÌvT],,Ùm¶ô *P—~L؋ņÅE(©òI`˺äE–3q²|qÓòÍ…!®dºÈ-qšªˆã|ö»8ψ|Š‰Î°Š3ù!EŽ8UÌ¿$7Ú?þ6߈€°@àøæÀB+<•ÞU ƒþ•!Û@æFèœzp–z#Šœ;7ãKo+©¹·äš>P¹œ8ó>(Ú1޽J_ Yç`×+ÅDñü€á6òûb2diVxe/TZ¤Ït+ôŽƒmíáýúçe‡7éwø)( D@f 8íÁB¤™ÙÐslØ­ÔaómÑ?wÈÌ€× # îïí\þ˜À@èÝ~¶Cß»€HH÷–Â]÷A|U¨Ýsæü:fÏVH: ñÿ²œk’àºINr’$—­ ¶&UÛ ƒÍ™§>¨ÝX}r×}ê£tõY߻ԇ ¿WŸ:ª}UF–ÆÎB*ª/ê9J:æ)9í+ (#Û˜ô»wm2.HX°­½°!ýÌH³ K^´éèð0aM1]¯ƒK_+L.J™÷|SåzòUÞ’´tùb¸P³ 0ÄhrªÓœ@'s£8OÿÊâ@yÉSYâN¾¶ºaâVÿñû'ßÜ5pG$dÂ>·fæŸ?}Tå\¶îΆLàfGœíT/E‘o¹ê^‡ŽÂ—s¡B%½â‰ˆÔÓsxøúBhøùCH¨R©‡@@ CPé{` ~óо~~®JFá2øˆHE ÎE©[OúAß™pö $„ÄCú<{ÎçòUV< u^Öçî× óL1Q¾ÜQä—<½Ø£Bã÷èpO¸¿"ÜQÆ€±{´OaËÃWC×ZŠžm<m¯‚E¯ÁýoÀ' ¤­Vô­YÀÕ¶àÁ#VºÂ !еþõ«BÝÊÚ·³áëU°õ„÷ú68hûÌŠ‡šñùrÆÒü'yþý¡N: V7¹`ÙnÓ2Nž·‹‘U]EΓˆ¤Ã›áõ}ðBMèOU…*Š(? ÈQaH³rðf7}ð5Ìü Þxë SŸ‚šåaød¡¾»r*®–¾ÂŒápËó®GÇ} ½¯Uá…{à‰wõÿè"ÅýûAã\e·6l‚§‰Ð9 ¥ã¡Cèø_( gO9wý ËE’›´uŽ$Û£Àá.L;±ãl$Ù>ÕbÃrç¯Y"V}d͆—ŸƒGÿÚÇ>¨íÒ>M•8øu¯ÆÌUñõ‘ÎthGNI—N%zÆ,xñÖWÿžœ½êÀç·ÊFÖµG ǃ}EŒŸ®&¢l€¯`ÄNØ]À {4yj¤°fFzþ8ãEÙó6T(L.Û ŽÍuï|¾þø–øÏÅd8ªøåóB# ùýD tâÚL'—†5 H‚I£à¾k`ë~m›÷Âößó~®w%š<¼ë…hò'N>Ë­´qœ,âù¹ºà“©+4©ý]àCW:ÔÍ(²*•½˜ ׯ •Ë^òê&(Ù>p"Lºwž’Ï%BÛ>0ð=Øò¼3ìÂSü¥Oóa¥ d5myå¬p>áiþK4úwÈJ+À¿ù@mÛܳ/Cöùb¢|E‘ó’ÝÉÐg½æ¼|•æ Ž­UV$iò!E–<%1!ðe_ð…ñ«à [™âÇ'ÂŽCªˆ6¬/Ô¬w¼ìDß—]‡ÁŠ·áæ¶ºÆÃ.>ÕdeÃÝã`Ý»0°'H…fmå ¶•î-(Êyâ(¬øAD÷Æ;áã×$É+.ŽÒ:K’½9ÝÂÞF{›‘ïÔk¥¥ß«ÏìýúÎ{ÚrGë7Ôöê ŠÖ¯]®±É¶j¬²Ü`pJgÎ¥H‡öyhµZh|: nj­vœïÙÊm±ZV€ÇZÊV¿ãÞBÖ¿8 ‹Þ ªqašÕ¢S0l¬wð F“³Ï ‹ë¿)l>>_þ#?ñþ+ñÍíOÂãô&³ I>ù×·˜öÏG_†¦×ë9nù—å·­IñÈ2о9´ÏõÌž“û‰0ç&ÏŽi·¢ÉØ8NCàa y„]/.Ô'ŸèàÖq©¯õôQ£„¸ÖóÉücåI’«ûÁˆPÀ–ÉâS`f¹% W<äüa™° xÂENâL9:êÙˆpÝ*ú^»’’_*™Y°ó€ jË>¨X~¾œ ·?ìÝþ­XWŸ›—À±_µ¹ €‘åµÑÚy iQõ!õ0ìïoEÎKÖ'BçÕ"É/_%Òü~}TE‘¥™ îO_ñ±À´>P1 V‚!ó/þý½9°ç(|õ¬ÈÃò·àÆ‘Šà¹+[@÷áðÃ+ðP8#§¸v®_÷ÂÌ-pkoel°{ŸEKàÿ&Ãì¹z"ÌOf~ ’Ük€ó$yÛHO…J5‹D{{á^‰Xµ1=UmvVz ¸ÐWyÉæ­0p ~ztƒûï×Àí·hãøü+•«òüÝÒ•Ô éÎÖž±Ór±ðÝóШœ=½ÇÀâï3d>4--*ÈfºMuŽÅäùdÞ½Pó‚Ýõ‰"Ç‹œ´±bMÞÿT{RØ\¹?¤n,8RäXáÜa×)›—ˆ$W¬ çÞwmÝ««2ý]èÛÞýî‚zUäëkVдúªñps®¹ÛÉi°ílÙ[÷Ù|ý~8“TxÑdl\§¶®É„œ•Ыƒ8ѯùôÕL«8Õˆc…/Òaw1н+$ÙA z?Ò€ø#î¾Ìƒù˜:`Ù–Ópèm4ÙSQd?FÝÊ2»±”‹Íûü³h²o)ê,L®Q:~• 2¥Bž’g÷QvŸåMùég‘ä2åá‘çr àÍkis”x"šœiã<ë-Pá4°Aœ¨G/ŸîN….QP2S\ëýpèpÖ+K®dwåŽ`hglOÙ~p[Fþ õšÇ@÷`?¤ÿ5à*±G‘žƒ¸Ê0­Ó…'Çÿ<¢¤.<9‚^é´kU4$90*××4ÅÝëÝ;—5ˈ¿‹ðæõēߢŒˆêp¦ºæœ%µ„˜–€Ì_E–Ó@ÆJMCù[D‘/ûÜÄoŽ]x-kÏ™êìkY»\[ ží ÒÑïK8|.ÿ}w†«Y£¡]}Xþ&Ü9f.w¿Ÿf¯R¦ƒÉCô*ý\ ÌX|ùãÂÂ`øPxr Þ‰&žƒ/¾‡¶÷A™Vp6É åˆï¦Â}Ã1Ýè¤!­_îy‚aéf¸yœ)`žÖás²•ywÉv~9 ö8IÊsM£­EðÔ4ª"Ž&[‚ °]+rÐ@¸„Ö¬œwCÒî¢Yܽ{½Ô·r}ù.o¦*µûæv­ä³íëf³²/L³˜±èÂþù½Y.«­Kó\Ä6KDyë~øm¿8‡;ÑäS6î³ÒÁû¡{¤¸ÑšÓùÀ'âV ý¥ƒí|Ľ>IûgF“ÿ1÷b|0É%TÆ„b–Å]þ˜u 0ÆWUhnqõºÁ˜ÁÍ1 Ï«Ž™1Ë.lÖ%˜=303Ç`FõÇôl‹©‡ñ±¸Xݨ®ªúXçý>®ÛVÕŒ&®/Ú±.«*<µYŠ ;S>Ee í[ùý?ü Œ]/´ëN[u½]% ~>w°¯á©ª*€åô0|ÙÄP=̱ãËGNWe±g;8~]?ÃTÙ,g‘aD?Ï”ÃÓ·é¼?:4,¸,õ·ö©:œõ¼á£I†2¥õûÇKUQîɱÎ]¿\eÃV«aCŠ!<Ò¹c›¶Ó5gntü˜Ø²:fi‚ó÷–&èØØ²Ž_oæFÓ´s÷©>ÙjU9sì“cuÍ—êï2¥5VÖó»„}Ë‚t¨CCé„Y,ñ„®Y,ÒÝœE:ێÿlÙÎÉá²%GŽ©&Íéq¡ÂåSUeËžÄ?„9¦´0¨qο®c˜Ûf©0ºü­Eë+&®—ϪÛÖû×>°N¾º¡‹þÇÇ"®Ð³­¸ÃÌ1âÖ%s 3[Ü#áyq‘˜`«Ú*ò_q£Ëí¿,N\Ë„ˆ{Åøüó*îý£Hò6‚‚É©ˆiTðþ½£1&HJñ–¯ó×kZ3¥&u0Æ<+%Íx³ä-ÌÛaÜ€iZäÙûü° ïÃ7¼ßÇ}† p-âÒÏõß×|&Wùñcd¶­ IDAT LPGLÔ+˜21r.ðø£˜˜)˜ÐÛ1¾¥ø{:ª(ÃØZ†Ônr¼YÝ ï×7ÄpÍ_êåäç÷7ø¸@rŸìeÈ^(‚1íCP€gîgÜÊ7¿ê¯¿7idX½äBùäÕKô¿ÜûÔijø-ǰ1ÍçdÙäŠÔÝúsÇ~Í0lÉvœ`éZÓœ'ÉÓtl`°ãDwK¶Úèè1öíÖ‡t­:w\\Eµó·‰³ãÒ{ùñqxFÇ‚¤³f±tøÉ^ΟÃÇ"Û1/É– ºqA²É¬î²ÑÔn²Ù(ÿ¿åºo)afÌahnL­#¬zEØkÉåëj>#Œ®ÿVÑúŠGß‘Ïê3Ôû×þð ùêÁ{ö¼¡Aân×Xò–¸‡y_\$u°¸IӲΟû-[ÐЉ#´o£ q-;ïú1âJYêb+}àZû¼ŠHø&6ðª=˜œ¥wB{Âaƒ™¶‚ü஺°æ.X{ô¯ ¾ð›íݬµÐþðøxøð{X·Ó3ÉrK{ÛT‹%+½ßÏuZ_<׫¨$ÆV=øL®v˜tH_ ‰OÁñFp´ œî)«D´o„ö‡˜iÊl„¨W ¨£^º§€˜‹ìˆä®¼õ¶¼³÷W„½•#*y=ãºhñÑÁD½:veñÑ3á¿#á|*ÜÞ~zJy ¬öÐÿƒé‹•i`Î ZÍP¦4|4 Ö,ƒ«›Á±ãpçhÙÖ_²Àê·u0w†– ?îd¹¯Y¶67p4]××¶rð˜tmAìÄ'ÛòúŒt]×iØJmûmãÇØÅÞ³œÌïóø‹jçܺîEÓS6jìî ±¼º™Æö£IkÐØÏyAº0}±tÃ])%]½½£t÷¿#¥ËÎJŽ‘íL”-ëò×}¢üeƒ{;Ê&A6š»ÒfaÉŒtUá³ £^FÆf†ö†Z„©§û c7æ¦/¾xz››íX]Tb÷UuZ{ÿÚvݾ•gÏ›’.nñá÷âíÿ'îâ"¾â&kïW¹«®¸‹#2È*ND†8RA¨7¦‹k©¿¯µŠ‹ý“äA’ý€‘þzn0Á £þ(€yÁ– Ö0èVð¼e€JQðj{8ò|Ü š•…Ói0n T}vÙæ:ý´«pïÕßÚ4¿xΓ7ÅÑE{…ª´Õ@©…άË?ëIH™§ï†£ñp¬œ}Ò~“ !b(”ZåNCì|ü뺠€žš‹ì¨Øs,×^¢¹ËA¾Ê±| “>ƒmy“n©§4V™Vè3ý4Vßÿ­ƒC'¡E-X7 êVrw²ÜýªæœÆFÁÒ7aÌ3°cÜs§Ê'}ª×‡O?Ë?oóÛÃE"»õ…:M¿þ¢oàìP«‘6gÄ•Tp¦sâÕôo®¦~³÷ÃÙ?Ô7?=7Ußg¤k,òëO?ÓXŽ}]c{Ïë1Ïhìc£¤ w¿ê~Žîº•¤£-jIg[=&vUN§Ê†2­²©[êéÿÁ—Ø^¯l²öÙh‚F¸Y…Ï¿®°/v¾°°Ô"ac@CaeÚÂÎcõ„¥§ï¶´PúÌ:atTavQ“ä¢Z¼òÙþþ…|-÷Ø•*N2n8J³²â,G‡©tè±bãDaâHó‚Å™ò“Qˆs™`q°‘þÿ¬Ånÿ’ü?¨iÀê–ø2 ~+ ûÓ3À5é€?¼U Žäó€ïc®UàûÞ°÷Òb‚aí1è?ÊM„¡Kàà9hWæ¨; ÷^›6€ð0رŽðn?ÇU…ÈX8w öÝxGÕŸ8¿Ã¹ÜÈY[áü›pª ‰“ éUÈÜ–`¾J¼e·@üQˆ™¡·kÅvâ­(r^bϱÜl¹ôåŽf=[>¸Iû=1×3¶€¦ÁêíP¡¬7¸é}²²•½`ÓAˆo#‡CT¤Ê$×nÞ½üb¯„ƒ0ímes<ΉkgœOõ½×}^$ÉN,Þó&I¶÷ÁœOÕ7ŽÊàqêûiok, ’ädií&ã¨Hy|céÀm/¸—W¤“+ÇKGWo—Îz"}ÜÚ#²%m=[ÿâ·8‹NÉû¬/¸HaˆÑdßR¶˜)º²[„}Á× 37 OvVžê"ìÌr"ÁHöya´O€0»¨$a¯|Vd¬|˜7åØ ùêð0ùîB%É6îÑ®†8ÉÐ%â(ý犳Ä‹Ãì}@œ¦kqœ¼äH–¸þâJÏpÝß2Ĺ,1`õûŸ?ÿùÛ“ä`ˆí±Å'²-ð\QänÀ `ÄF0*< †ÁÍaÏ0·7t«Vøx+4› ͧÂÔ­nÃñzå &~? ûÿ(Üûm_DY-r?‰—©§Ýh‡Ç¦fE9/±çXî¼Zßã‚at„E=[Z÷d"t¤Wâá!ðíóðd/÷ÎùŸJPª5PR|àÓEУ·siÃ>xΜ‚¦×¨Rœ£2Ó6­ [_uü¸M+Uq§NSǧO¸’ÎÙôoÁj“Õª6:*Á¡êƒÜ}âˆtü¯úüÌ)£²wŸÆøÓEsÊHþãæÛ‰'{I'ÃC¤£Ig=%ïþ"› ”ÅÿÕþŠB ˆ&{j …³rº˜M¹(Êh²§§\\*ûÿ‰ 'q”©[ÅYšM‡É°ŠÓÌí-Ž3Øü»TFGÂ"ÎÔ­€k?÷‡¸—-J=ÄOÜì I.r”²¾` …éI°+ŸHM`ºÅvÓu`ôYHÉEjš–…)Ýàð#0®=TŽ‚ý‰0d ”ŸwÏ…uÇþzÞ¶(ò’]…¿m¢%EH’û¹hÇ<ÚÖŽ3«=wNW§fø-Â(r^bd} ÄÐñfø`”÷ÜuÒ3Uoä…#^H×ðwáE[Ë«aÅ"ˆ‡õ¿Â~ qçˆ.Àùs0iŒ¾?1V%´‘}ÛE&Ã"àú>Î]o÷•ߪ×ܱc\Içlú·zÍÕ¦Ý[ÔFGåú>êƒM+Õ'ŽˆŸ¿úÔ÷Î\ÏN°÷И¯ÿU:°b‘tÂYñ÷“¾þträéhz¦çô¾D¸®ÑñfÙ±²5û›œ¢–\Ñdß¡AŸBá¬Ø1:úê¢í»Ï* ’l÷ÕÛxáZ».æ$¹eÝ1q˜òÅiö'ŠãŒk/Î3¥›8]R²Å‘¨#Î4Ý"•—ìÊ÷²„Š‹•²ˆ›]!ÉE,AÀp»Œ«ÑùDr#ï,¶ùåàh%xooþ ñæîƒn_Aµ÷á5ÛÜžü¤ƒMs {ªEP ´h¢|‹KWy¿¿‹K$Ù¸§ ±ŽNÍ|Ñ6Ùn_$Ô‹,†ì74Ñ÷/w@f è ;¦Àmc¤›îÎkÎ-·u è*›úÒV%é†&²¹â õ"…E›<=…ÂY±ctQ“䢌$/]%ŸÝ¢‰|xaŠƒt¨YÀ˜¤‰ÓT{_gî¾üú½·W\‰ —p¨­ï= á>¸üð%$')+D•ZŽ_Ï>ç×Q’ì9Éö¶83¹J-Ý{r’ú TƒúÜ™ª~>¾ÛÈhõô ûÞý¤ ÁÁÒý/®å¥síêKÛ>ᙢ7v©TF63c¸lhÙfÙÔ­eceÃesE%µÂ…9»; ƒºÔ‚H%ˆ¤¯}=>…Â9¿SXúawQÉ¥EE¼)§ÏÊgʇ¦Ø9H›jâ&IŽǹá«üúi+®D3q§ê6.•"È#Tœ¬œEí I." †ÙÞ-Ñ  ˧:Ì‹@Wà¼/]i¾0ºKþ ñ81¥¬É "v€£…<­ƒ-…MQÌG®Þ|ý`ÿfïV-úKÀÈöVûÌZ0Ö¢iƒ}jFâ76\™ ãÀñ ¨ #«Ã¶ö°¥ò/Å@ ¯¶‘¢Ù©ðøoPnt\„3™P7^¼J«ß×´'«@¹àÂmÓ3í!2æí‚¥ûsy+“çÃUýµ˜)$^½ÖO‚¦5²Ó$ùÛÓ™ÕÀOÀý›¡ÌÐm |z’²¡Y x½6ìË[ÁÃÿRž V1 n®÷hÃ~Ì{Ÿ“‰Ðï%¸î)Ø êWÑ«ê·Q6w%%n~^ž¡Hܤÿéܾ>_Mƒ@Zô¼ >ü8ÿs­ü>}KÑÑq3 Ô‰),®Ù¾Q[‰’Ðé&ǯåL*¸ÂžnáJê·N7éží÷ïˆT8¤ ×XúùklWþ˜ÿ¾~,IK“Î|5M:äë#šô?éØË3¤sž¨Ú¢sÿ2Q¶±ÿ˜l¥ßKùgÈö£lîáæ²AOJ©@aÅòVÂŽ×k K’²…-ÝÖkîß,챚‹1©äâ6/¹(ŠŠ¬X#ßݬ¡|yaŠ‹´w3ö‘{¡ßSëÄâ*‰KYlܪaÇ}sFœ,ÌMê'Îv…${Qó‡’8ë‡f†'ÁòK¢È±À·[¨¿,Úò#þ˜¯^f!ž£è­ª*°PØ$¹Msð󃵛à|²÷û¼8D’-¾m (žYSÄJbúþz¬^ŸÇ+Œ,óNÀ› ôpó:ÈÈ610±$\ ZÀ= „œÙ˜ÎRÊi¿Â–ãï»`=Ô¹^ù\«Jë Û'ÃuÏ|w½Y:÷¯Áâïá¦pæ,tºfϽü¹ÞxZÅ&ÊWk‡+F\©À·Þ6ÿµ±ó’ {áž½ 똓ël…=G ‡ä'#&j,wlÒØ^NfÏ•®œ9+ÝYü½t鱞ҭ»^‘®ybÞ­dõ”M¼ò¹ldÁeal9.› ô“ º+%ü… Z#&ÖfdäCn^'L¹s“0&+{_Ÿ%lªï/¬*B±cut3axQ“䢈$ŸO–ïöó»P ¬0I²1â&˜|:MœéÇï©*NbãX±—ì¿$Âú\8|ç" «*¬±–zpnVóJZÔ¼õ(üQÈÄÕ>—©(JQ—""á5Á/ R~‡Œ“E¬ˆMle…6gAêetz|}LJý·o„9Ç!Û@çXø¨»f7ƒ¾å Ìd«Wú5€Œlxv¡cǤeÀÓ@ãaÍ( ߎ¯GC|I÷ûè“Ði°Œ£SOhÙŽ&@›N°ÊÁ§­¬LÒWód{Üq!¯#âJ‘¹3 =šw€r•;ƵmÔ |.©…™'ÙÇGmÈݦËI¹Êº×ôÔ s²/'ÎÉ-Ýúj ÓR4¦Ž+Yõ‹tæh‚t¨SO›N –޹+ñ%¥óߎ‘ ¬Ù!›xúÙˆ#òìBÙ^¿²Eg%ÌO¶?»™°à£†l#¬¸}£°£ÏzaIzNÁçK5Â&?V¡dœfû… ËJв¨Hnß]Øó’ÿH' öGñ”عӚtq*"ı¾ó¹8'òz#NfrÄÑ@œ-ªhŸÕþ=$y”°À=©XÎÁ)+ÊÅS>„„ãU¡ýfˆ¶½I^áÁT–k^xr+l)ÊE{Wæ#ç!—NµpT’³aÆè±Êþ÷þ OŸº—éàäuðeèY‚4Ñ—¯SnØw×ÀA'WnÙ-ÂÀ ” 7µ†íSàÑÿæ_’ÉQY»ö„±pÞ6¥Àa'ç8Ø cŸ°‘‘IPÎ äw¶ÀÈùsðãW"œŽ.à;vŽþ®iÕ.SÓ¼0ó$W««}þ®69"½è^üʱÇ®)WIcËN.â8|LºsÞOº´'Tºå–÷³HÇ·O‘Î'¥ÊZ”M8#e{>Ù¢#ä#ÿ²‰l~z#a€ŸE˜pï¯Âˆk…ÉN.š)FS.®ÌKöÞâ½Üœ¤£JìÜ):DœêxUq¬FœË.‡Œ8™åœ8Úq¶AÓL+’cÇl )VàlÌE?+7eêÎ6V€†[a_T ‡óY°Ùƒ(ìs~ò¢½˜P¿6¤gÀªuÞï÷bSD¤E1"É­]$ɹålL>×®†¸ðÈXq} wÌj '®‡OB×ÒàŸamWºÖ€séðÒ×Ú’cào¡ÖÝZª P¯²kç´X`ò{Т$‡ G•ƒé½yZ\æŒÌüÎR±‹Wgh™º#âJ{µ¹ïrü:öé —KW˜s’›89ÕÂ×O÷˜ûž W ‡øúiÌÂ"4†Ž.ü“L†Hg*×—%—NM~O:æŠÔ«,Ýž0PºþÍÏÒýw¾½|ÞÏüä¥%²Á®5d“y‰¿E¶üICÙö¬¦²õ@Ùþ#[„×®6œu_ìØÔºøäè"®¼W”EEV­“¯_[>½0ÅÎIÚ×ðÜ97'ŠCU §j¸U q®ÏrÝÓF#n–bWq·˜¿a4ùoÅí‡úA„Î@‰@X®±*¼æ ß”‡N‡µïüè±Go«zÙR¶®>}a]ƒ» WÖXQÈSÚµT°gõzYQ‘äâI>½º(ãÕ ɹåd¼û»¶rÁÐ'n‰Ó";Êk;“ ³ŽÁçGa™M™-ÀX[äêÕåð‡›ùùŽþ=Gi~æ;¡ùU°á=xý+ý‰ã¯Ÿ^n¿Î%Áõ=àTLû´„wçÀCÝ4¯ÕQyö>eF¨5<< &Œtì¸/߇¾^(02ã‚÷ßø³"•jBÛ®°dö寱aÜx'4iKADi(Q"mŸ¥!ºD–M@VY˜r1Y>¶}¹äÿŽƒ–Á¹ãpæ$€³Gàœí3é„®mo‹#Ò¶+”ŠÓ½ntà ØÕÂ!Ò˜?¬1tFƒ¤+ Z*:ÞïˆPU¾Ûo“'áɧ?_p ŒºõÖ¢¿#§àÑ ðæ±ý‘*üöÎ3<Šª ÀïfÓ!…„Þ{€Ð;¡#½‹tPŠ  à§€  ¨4PEl€¥(¢Hï½÷Þ[Hï»ûý83ìnØÝlB’ ºçyæÙ”Ù™[ν÷3çž3½µŒÉ $LœVM¡wx¡˜¼œ>ð–ßwàV|æÎQ9ióÞ^ó9ÜQâHKrB¢¬áÍÊš¾ê¯¬»×ÎKÂ&õJ «ÄeBÒIAªuAh”VÞ„zá|Ð.zGAÞ’ðüMa²6:ÉÐÞ4Pa¶$a¸ñÉ«ÏòÌtµh\Ü]áÀ5ˆÈâ¸ÁÍ•×3›wf»ç”$"®>àSôIqÜÁÊXV ù\ T—² Xó­xøä²er ,÷."ឆ–ã^"¬¸ rC½bp7>ÍD‡õ5»aËQ˜6F>ã{C¦0üÓ´72¼=ÞIIЭ7œ<-üü°]ü`?ùÞxÁ~ßÔ¨Gðö‹°p³Äèݷɾ¬rj‚‘y¿Iò‹µ?¥m]ù¼5ºµ ɾù!¸mgÿçaz‘12²H$ÊÉaKÎ ei§ÿ(Îû݇ëš–d4qH¦ÒW:ô]T:² ¹¹‹ŽÔkîˆîÜ» ÷úûwѱ¡0ó㴯׺¶DÄ(]H¬ÅóVû‹!:'ðOwÃÈ2&'Ô‡ü1г4y}2Jt—ß˱Y7O]ÒÉ•ÏEæ¬K:‡M™Çeîö©(syJ´cÊ‘:©HvÇüß¼S ¹y£¬…äˆ88|ê–VÙp:“à;T ¹±É)hÿÖzAÇhyW†Ï/)Âháþ†{ÂpŸ¤À}ÏŒ<3ü¶äy@w˜õÆ€@ø°4ä>$Á-tMõ@ÞHä]™ÉÙú »iOM"rñ°ƒ“ˆÔ <:úD+cf[‘mÉåX˜qQŽJ>˽‹Hâ€×KÊ”¿og,з-‰Žƒÿ͇%›àÛ1kÃG3vô—ÖCbõë3”8¸ƒ‡Á½q †¶†Å[¡YGøh Œíz;ðƒÛÅvØ»’±íùjö—š`D…¶´"+¬ùÞ˜ÛJúäû·pó„r !¸µÀqñêÆWþѲ0ðð Dܶnñí°< Áâ¢sûñ- J„© Aî"0è$Ü…¿ž³n¡ö/¥!¨ÞMƒnX>½.î†dÅr_ ˆÔ-9Iêš–d$qˆoé#­¾š–¾4Ù.ZÑfÅÿyhkÑU¶lÝúi¡èÚÍ[ðórË×Êýž“ß_†¡ÃÁ,˜¼Rd,®ÓB¥ÌcŒ—݆3ÙHˆû’¡“‡ÌY„d}"D“uàÁÇ”CM*R®–¬m'wdïý³kóžÊ&uK «d$« Õ(UH‹®ñ°ÃB’ üUø08U 0+>Ê'QXîÍ$žy& ¹ˆ†¹­È÷Sà¯(ø¨PrŸ“ê Ð9L§W¨æIz8þìAr¡P±œ„9x,ûÛ>§¸ZäDW‹]ÙüÞèL4L>'GM? ë^0ø%¨Ó&/†5{2'$Öc0=µ‡Ã›ÝáýíêÂ[_Ãâõæ÷jÑÔè+úÎdËàré4¼ÒF@¹M‰¬0qýeþòhÐR^áOùÞènß÷æ¼ËöKŒe lGfx*0ض'ô§¯BåÖÔÜMü©“âàü8µ õߺ°öpíOë׎ Hö 4ƒd‹âhüγrX’’¡ÓZˆ:w—ËZ¢†íÇ™—5¸”<ýþ³"í¤#M2å[(X Žï“>³W4˜¶Pt#:^m+:“Z~^Ŋ‡SDçîÞ3 Óh`P[˜ý*ø@\"¼ÿÌ] )™ Œ t )ƒ JIà$¾ßŸŸ†#‘Ž™«v™@ò’‡N›á{H®ï8HVײrµdmËnH>xLÖòŠådm¿{?k!y|›ÌõK>.,UÍ_Ø*Z±Ëèö: ÒÑûàù’…ÕF@0Ü–›“ ·Ÿkò3±qo‚›„CŽô”†ŸË« n÷Å€ÒÕ©98$¯¸„~q™4/ú{C­â”;/fmÝÕ'Îû!Ù¾<9%‰È¿"²EfÊ‘HñmØs ®?€*¥à·)p`>´©“¹÷KÑÁìåPy0¬?(бp,lý‚§ÿ*Á°z¸»ÃÜÏm¿?{†µ“p`]ÀÄÏíß„¥Kq}!& Z½`tHKÒ“`Ä#7œ … @ÕQÐç¨ÒܼàúQX7 f·„‘ðI„] IDAT;Ø8.+~½ùª¥aÎzhÀö@rb‘-Ô{^Þ%eù¤”mvK)ëõ£Rö*m¥.UGÁy¤Žid7ÈHâîC¥ob¢¤¯tv¾åÐhDº ÝÖÎv‚“™‹®¹»‹îU –¿Ý\8VtuýAÑÝÙË3ÛÔ‘1÷Ûƒ×Ș£ŽdÓ9Êá ’M×¶ì”ädc2°¬¶&ï¼(ŒR«¸0KfHœNXJ«¶2{R,a2ƒB—ËK³á& ç©0ݳ"9Þ’\RC\Aøˆ‹Õ°²PØx\ óƒ<»§–Ç®a™W¦Æe%éӞ˙ãoKÔ4–Yíjáá eÊCéòòY&ÊGuyJìð´üÉqzpˆ\§@¾AwRn*Ÿ×åSw YÍ­i%ÉNi¥¸Z|µ–χ¡`B?¨$ézw„‰‹`lj̻çÕ{ÐîmèÓæ¾M«ÁñoaþßÐkøùŠ…oÌ;i_ëØ^ÑY6fõ ñö[*o]…)ÃaÖÏðö\Ù¬fOX±Ï& ¼uè ?}ö$ôƒçFB³WÀÛ"€àÌßpègÛ~¾áJ;çM’àõ°c‹»zNB¬Þ3ܤ¯“àÌf9~oôŸ®Ý*¶S¬# z?Øö lþÞLõ”œÄ!¥*HŸ€ôÑ­«öëטYŠ.ĉn³ãÕјw ~qóùû7 #Ú‡Üo~ K³ÀtÙ¤*L ”°wÂaÆÏðí_Ы „ô1:oãæˆÔIEâ²Ö|§qmaÐ×Êg1åSq§/Ý ::Њ¨z‡7l ëöÁ¥ópù<\¾W.ÈgbÝ·î†öÏÉÚþ󪬻O\ì¿*>ÉËÂÚLZv…Aƒ¼ÂVRå¬:©°ØJ  h!Ø Ìúò€þŽ0Ýìd¸ö X“s<$¿ë&ª#<ÁßUŒZOˆ|~çdsÿXmåûYáœñ‘ŸS²ÌfƦ= 3ÂpùŠF(.RÜru\9Ú Xu3ו/k{—t »+Мrt*D›€´þiCªID'gù‚cSÜ´ÐT‰¼ù²˜ æ¯EëaDÙhר lŸ ÿ†wÁLŒU¸t‹Xçf½/·‡Ñÿ Àîâ+j¯ëÄþ-ðfÙT7h,ÄÅØÿjþ¯_ Q[IP1ûèS?íM€j‚‘—ÇKRŒÍ”§ñÚÐf4ÔéZÅÌqa'\‡À®pâ2ìýÙöµCÛɉе§ EÔsÙÉ¡6vµF=:¸«¾K¿C‰@(ßXÜ1Ú¼ W†Oàš²93½‰CÜÜ¥/¼rÁ?ÙŸ $ Æ ±Ò‡oöݰGTß÷’¥ a]ý:®Áwë`Ü7ð(“}€ëV€iƒ¡U-ù=,R²óÍ_cŒþ²ù²|6-%c5ÙAþÀjR‘Zn2wíx:«Ž‹¿€]‹ËÏÚbò³k Ð0²2=›ÍåŽu-Óy@Ízr˜Š^·o¡ùÂY#<ß¹ùôžlêZþ\㬯ëÖóÉÏUÈDH…·*<é—¬Êj`ŠÞÓH§G†Cáâ ó¢!Êü„í†<¾É9’Ëj`€jEÎ#ƒÏÅ>¹ƒ®ØX[RÝ] ^ Xš³bÓ^VÇG.UJƒ‡p<Ž÷¾~Fø-[ÁÜBìeåµKr2\¹—Î'„Ë`Šââ÷ŽƒãvW&¦»ÕlOÐÚ¢rxXÉ®¬6·>§Û\-ê8}îD™)k¥.ÿL…Ð#æõûÈqa'ÜÝ#m”žÄ!£gJ_ܼ,}c¯ -}¯Ó‰.ìX—>]¬"ºï^á½y0õ³ÌsUKÃÔAÐ9D~ˆOVŠsL*ô»%c3¸€ŒÕÝ×7WìS ¹¾mH¶iV~wñIã^:Ðݲn¨àxÎXO6*ëIצʛSe,[J”†b%åhÖ:•±&ÎÜâ|éœñ÷(;½jŽŸ–5½d1Yã¯ÞȺzn>“;f®_ò®PaªzÂXI’?~ÔÚºha¶7‹qÂrú»Âv3“áR·&çhH~O1ÚEx¿Ä{Á‹gÀ7T2¸ìz¤Ã,I­ðÒ©H 1›’77T)ñÉò*#+EõYÚ¶[žnÍ:Ί—2ºE¨\®"ä+`ÃØu.ž5lõUÓ«’BŽ—är<Í$ï nÁ³F§4w}Û—C\-T‹Uj‰‰‡©?Ir„±=áõçeqïØVn‡÷~€s™4;·W2Ù: Õá»0}Túbén\ “ÃôïÅzcß÷c£%Åñ’]ðâ°kìÞ`û;Ñ‘°r ´MÇ+·Ë.¡GàÑyÈE[ÀM)¿õÉ~òU‡ÀªpÏŠ«@¼âûåeGêoõœxþbU%ôKØ )ƒ-)Ú¼ HB_ßk‡àë¾â’¡ºš”o,Çe`Ëû‡4l#}’,}k§·ç«nÏ`ظ2}ú×óUñcvuƒCÇ qyÑÉÌ‚ä Åáƒн©dÔ‹‰—7sVضRo¾,ܪ¬ã!yhš»áº>cVàL32ä0Ù·CŽô¬­•«Ë‘ѵU¯—5½[Yãþ’uõÛUX¥Ja—°˜§¿æÃ$8 •ý„±öZ˜š ›ý­œº=¢á§ृ(/ðÆ{1‡[“s,$Wt>®òŠÆ?Äë¡öY¸ ç”§Ð/ eã³(ô›F»/AbC¥ ÉWïA¿!O>íºYq~ÏŒ§ÝgQ É È^‡D+î)ö¼.´e¾‡–$€^A;¶…Á¹˜ì¯lK’7]JÛÚ;q!|º &ô…W;BÏfЭ±„rûàQ°ŒJ£¨_¡]#xu’¸2¼÷”¯¾aÿ¦­5?‚‡—¤/ž¼ãí Ovò|ñž„l›ñ=t«áV¶—¬ ½fC…fð Û¶ïGX5­ôãÅeP÷=(ßÛ6$„HÎ[Í:$?Þ¸—w –dÕÕ"ÌŽâå{ëôÄêwS@ù©ðÂ|¨ÿ’ü½ú_–¿etÃxÔ HÛk4Ò'Ø×ç]^2¦«ž2ܾþVEë ï|*>Ì ?‚¯§Âµ³¢“B`×Sø—*ï)Ñ\\µò–æë?aÆ/j‡ßÖ?—àõ«ïoÎþ9¢Bnh–:ø÷pk«¥`ÛŒ[3Å]í”y«zå"ü“*H­·´ù ÈÒ,•a'®_1K«N¹Y ɉ)Â*-+ »üz8ó¬É•ý„±öZy~R-D“4P!jÇÁ¡"Âtºxa¼)pVï„ätËûnòP«÷”Rî3±0 (œ–¦µ~çÍH†¬óGvs•½PÏ7J–Ùã ªžÒëáæµ¬ó›ú·Š>BŽŒZ£“‚•ŽèX:*_º›ÛÂaGxö@³‡¼ÂMÖÁ6;_g„FȦ9+àÝþ0¸ h-ðý Ó–H¶½ôÊØÿÉçWßAl¬Ä¾x >øVà¥dŒé‘í»ÞŠ¯ÅŸuÜÇ0u‘<ñÙcY\8 BZAÝæ0m¼ÖÑ|‡î3¡^o¹è0Ø¿ú5 ÑFR‡ K’Ëtƒm¯Î†‡¾=›÷2{㞥M{¡ÒCê ÖÉêÊ+mrxø3Ôk#“Àþe°òm7y ¡ÑH›ç-¶J_Ø#­»Kk40{lúÞ<øÀÇË%`b¼7Ö.1êâ»ãE73ÉEòLj»«øûµ6ýcdûU£ªkTtïìP¡¸I 4 „Bžf÷I¸’|úßcv„DE±ƒr˜­iì÷)«X¥ƒW .küü7á·°ý8$gámëù¬äae…±lö¥À;@00ø*öÆA‹Ü ñ—a½^‰9·Ïs$$WuZÐkÀÅWY;c$tÈDÅŠüA|•­‰‹fA¦½ʦ½-™ɾ¹ m]èÚÚÕ5"“ùgÿÜÿª¤iV¹kø óŨO9²šÕÍ@»¯§á½&Yóf-3ZɆu`N•  |YèÔâãaÞ—Æ¿¯]"‰>[-³l?¼Öɾè?|¹|ÄGuÖÏé -U½’Ñí·’n¹ß(X2O"TtxZ¾î^›æÁ_3%³ÀKM ° ”î WÖX¾ö£ózòÕ€m­Ÿª3·.³7î©÷ M#z‰¶àá/uydc+ÝYÚ$æ&, ¿yÛ°~¨ÙÕØ†qÒÖMÚ˃ÐÛ/Ú—¦I{é[­æ¿o¿:HôŒ/×Bñ²zþ×Mb1«2ïKóºèfù²pá’}×Íço|Ûâå!¡â~ؘñ·-щpà4,ÍJÁÚLÞÄbŠSÍCбþneçŸ%ë†A6ûݾ;6¥zε9ª]IðË ¯u•#"þÞ¿ï„õ *“’1ª¬¢²KfˆÊT ó ké­åô «­Ð»}o–k‘[ØNŸ(¬7ÝNäPkrŽ„ä)nµBãzw æ¼-^ŠÇ€´lK•|!ÀnÄÉ‘RÄ‚ @Tºöt×*œ:…@×FТ&¸›¸Nœ¸ kvÁ¤ò{ûúÎI(ÇÉW×ä°¶Xe%4·²ÓÕ–\½?‚™Kþ–o¼CÚÛço 0ö ‰²d„¦²°ß½êÂç¿Cp-XºÆö†]ëí+ß—€wn‰v0÷W촢ܿ “^–òžºÐàðÉ+«Ø¾¥OZAÌ&ŸA퉶á÷Â2är½mŸ§º<¨~ 3‚Í=]÷¬dBҸȽLïmMÊõ6ÖÅ–Ôžhl]’Ä’úõmØò¥Ñß~<4~ö~£ÇÈù“^6f&´%õZHŸº¹Ãâ9éK4Ò¨­lðôñƒÓ‡aTW¸+ÕƒJ˜èäÐA¢£¯Œ´}Í<>F¿ýÜ^²â¯Ø–9~û›. $·,ûôœ(N=Ï,(àœ³$‰ pæ„f`­ÿ¹” e¿½¦BW$úEn/±¦]Y“^”ß-ZÝòBÿÞâ÷3çS+ÐzK,µëWÔ|ù' cÙ>K烧7Ìÿª7Hû;›‡U?Ãh=AùÜ6˜RW6§…§‚žÓßBü(Pе²~݋˔ê$Ñ$¬IB8ÄÜ2Fœ°v¤oãž5HV#iÄܲ~È9¥:I..·~^±VÒñ¤mL%ü†´á”ºÒ¦>y¥ïxH›Û“®ºzéKOoéÛÇÙ¯Ljùø‰N½ÔäI@VeΧ¢›ý{‹®Z’Ü^¢ãW–ˆÎçö’1Pã™±±U£ê˜M/+)sÅÖ2w,¨*sI!O™[–Þ–¹¦â™{ú–¹Èû$œ’!™¼HÖü2}„¶&h[OáÖJa† ý…!Ò+)zcҳ̎raÊZÖÄ 0ÃÝL¦sqÆ3h„ùêäÐÔv9Î’übEÆn¸@qÄŠ<(ÖÚqÆYéja§A@ë ‚å)±K#(WÔø¿¸ØpP,Æîð(çdñ¯‚fœ­Y€2ji.ì+;æÕW¹™%'®@—Iæ1`§ ëZê°¯¿^^°æOÛ¯³âÄ‚|ñŒü@¢” –MZIi˜ ‰’á[2°}õ7 na;[éºà×B‘My{WÁRi«Sâáè\ùêL°¾1/úº„D+ÔJu¶íÓv r_ሠÚ$}’oÚKÃÕ¢Tgå»»¥.V­äóè\iKrí|Ôú¬„/(°ÞRÚþŠ {kHzå‚5?HßÚ³yÂÝC6÷=¯¤.ÿ|2|=Íöw/\‚µë KGÑÕISL<<Œ±Äóú)0›±ÄAÆht¢ŒÙ¾æá-AqF-ÅNyæåÊyÁ2÷Wô…Ž! mê@ÝŠrL o 7¬Ù{OƒÎƒÝ–sСŠ0Ì’ý™Sޡз„°ÖWiØkÖ*ìVa¹mqÐÛWa<Åšü´ÏÖäÉ!.ÐN A£ó€s$ï‹…w+òd;¬È¦O7YaI¶åìå-k‰rw ü&ëàƒGòêdÍ.ØtØœ9œâ„f» YµH©›‚2[œƒÖã̳‰Í~Ub.«ÙÄ´n0lˆb±³#Ì–Á_M…K§aæ;%ËÃëÝàჴ¿ûîËbylÓ¾^ƒšËµRKí`èOâ{|ñÄÖ‚€Î·ºmˆ<ù%ÔEš ßµ’ÞòÂ2ùùÞ¶!9ô8”ì({éWË`ž®^rXƒQÓÿ[;Çž$"`ŒjaËÕ¢PCiƒÄi[’·º´íeä: åêÂømðí‹pÈB±²ÁðͱoøUúÔ@ÈóVC†’¦úí—`ÓjûtyÎgÉÆÀŒÙ[ÍJYXI÷Y)M%Y'cµc»?uB±SÒ”ð(øa½©™¢\Q±;Œím?S¨ÌâK2³M6Àz ŒÓÀ´Xäs@Ð& û…¸Àž曜£ yªê—ë_ÇC7¥ñKÆÈ¶ÝHò´¤¸·“àL&YhKç…’ 'RðR?õy›ÌuyêsŠš­Bs;åuFf¸ZØ’' ñ¢ÐÓIªë/^‡·zI^Ò¼°ï@ú¢lZ ý¯ÀkzV„‘]à\VP½Æ÷—ðpÍ:·a@SÙ¨J»· ÇLñÑÝñü0Íjÿƒ–‹`E]Ð[Ù:ž'>‡:“ öXÛÁòy—VB“O¡xÙ—hŹOõ Nkóž«—lÌ‹±âÇ›žM{¶ü‘=ü¥ÌÔÁšÔV¬È'>—6±&.®Ò¦.npô3Ø5,€&Càµâ¿ü÷l“ ¹¬ôY@>Øö§ô¥=›û*T])TîÞ°OWÌVñ=¢£õë·ÉVüŠoî¡óðîby—ÕòÏ%äî ×#';%]Ÿ( ¼vå·Ó/wÃÖÛé·„]J Ë\ {úr‰ÆRy+­½_†k¨0@UOø:^ó…ŸËaÆÃãÒÌZh Û¿Eú0ÙŽì-»‰n*.ºÒ³NúYUGûuÝ=yUt¹îˆìäòEe¬‚Œ]§O±SžBtza‰·[Ö8pVØãùÆÂ"÷×›¼ÙCXEov1e™§½AË”¹Ò•áè…í º ë=pök¡tB²™é®Z=`LÔT²CC!°Øfçµ»Z„e^ùÔ×Þp|\^ ŸŒ„fÕ%“êúý0ìc(Úê ƒKàÌ5ç vJ&C3JLÄa=áü°çsx­ ød]y ø}7T ã—y Á^œ“¾„ܾé»ÞÃ0ø9øm±ø§~º†M’`£¶$1A¢\Û#ð´pŒÛ$̤xø²§¹39¶¾ î$ÈSÁ6´žúFfêÚïX?é­|/ëçD^’{ç.j‚'±’­%ñ ”{$ÇÊ=­‚Z/ó²[’ÚïHÝO}cÊóT¶Ä mkšzûïÙÒIñÒ'ã6I*.}öZ§´ãVj4¢ Ÿ®Ýøm±èJZn9©%·¯èæ‹ÓDWÉ#º[}¨èrV’ð‘1¹çs£Ãz*ÿðuB±S2UÎ\Ö¨7LØcØÇÂ":°É'#…UŽ/v1e™Ì•±Ù ÉÛ–Ë£°ë‰ö3cA'$¥ê¹È½ø9šy:(£ÌÁ“Ò1§5ÊÄM{ [´Q«] ÕK7C¯÷!_h7¾þãéBµ8Å)iB³*‹þ†ÈXhP æ¿w~…Õ@—†’‘&+Do€d%lj“’I¯÷pøã ´è’¾k%%»ƒ%‰„^£¦Hh/OoÛßKˆƒaíáÔqЗ† ¦u>jfÙöæf8½´žðÜBqǰ&Gç€.AnXêË«$™HÑà]ÐÊC…>í¤"ölÞ³wÓ^ø Ë¡æ@ÊX´…”ùò*ëà[¦›Ôýè“¡‹´¡ÖSÚô¦…,r‡VI_DÝ—¾1”–¾Ö^úΖxz‹Œš":1{¬èHR:ß¿¶è":Ù{¸è艓ÊCSîÌ{µ˜ZÜ\eì­þ@Æâü×elFÆÊXUÅ ÅNÉ"¹& Ònœ0I¯÷…Q"b„YÚµPx+H˜F“ ÷Ü™¿dUT–++Œ×Ì[˜o§\õ\„ l¡+O:x5Jœ¼›yÁÓöz>¸C°Äëàðç+[“b°ç%Xõ<*› ¿\­FCþ.Ðw ¬ØšyA¿â»åå9P¨ôëöKÚÜçÁïSàÞJø|Ô«˜ù÷mýœ|~6zÔ’xÈŠH<乿JÖµôÈ÷Kv¼èHhÛ~ÜÒr#q‡+žDû/õ£6ÌcÅï·PTeý¼Ø»pf±À 5krbÜØ-”µ5CÝH—ÏŠË…= EÒòIV¯mkÓ^ÙîRÖ¬ûP×~Gê|f±´5©:JÚ0æ¶´©5¹vTú$‰2rÅSúÌ–(*}ß¶§èÂkÓ—`D÷æþ*ºX ˆèfZ¢«¦º›™R¯¢Œµ{+eì=ßHÆâºý26 õ±ê§d£DÅ ›ô"¬Òj´° ˬz^ئI±§»Ïá‡ÂZÁ~Â^öÈ„é< Âxͼ…ù^DaBMiK‡Cr-k„–?M‚³)ä.áÞ æ1öì‘Fù¤q÷‡CR}€+å…?ºÃö~P¿0Ü5yè1Wv‘fEúH§8%]ŸK·@‡ P´Œ^Ç/ËëÞ‘]aßpv1LìÅó?ýý<< i#yU½i«„uëßf¼q1’fxíxáå´]'Ì v=ô©/ñ‚kÁòPÍJŸ|0~+ ‚»àB8†HBk’ Û†ËÏ ¦o)ëç™->¶åûZ?O¡FŒ°$¦IE,ÉcK² H~œHÄÊÓ¾=IDÒŠjá[JêªO‘º[ßRÒv m™d#{@“ϤO.„K ’>ó±bnªV_ú<¸–è@Ÿúö'ѵ^ÝkÝ]tqÆë¢›O‰® ¢»O?Šç—1uv±Œ±‘]eÌ¿,c°h/“K·8C9Åá’œ"Ì2b®ñowc„m¶÷Ö©”7c×NÒ kiHŸ5YÍuaˆÖ röû4IX0X#løŸ‡d ð¹2g=t‡ÉŠE¶™7ð4zøHÏöЧ ýV̶‡“/C§²““wBùoœÍ)9\î=„¹+¡ú+Pu|ü+Ü ‡ Å%îñÕ_`ë'0° øxgìHläã'á2Àôzøùsè,©£}óÀ”ïd³V‰rö_ûê9è]ön‚|…`ñVèÔß2  †Û§áÃF°º¤ÄA•áPëm×_+aÛÜrC Å÷Ø¢ æ*\øE6Õ|Ëʵþ_ÜB!àSÂ6$[s·Pý~m%QÿgÍG8o‘-|JH“c¥Ì–¤æ[R× ¿HÝ­ÍÔ-¾‘¶»°TÚÒšÔz[ú"%NúæÃFÒWE‚-ƒr§þÒ×ù Iß÷®gúr[´YtÎ7è`ç`ÑI½b%y*:ëå%:œññ–±³õKÓËØº.c­ê{sWÊXtŠSr°”ÿFØ&&IXçäËÂ>Å|Ó­]p¹8ˆ°F/¬×LY’&Ç ¢°aN°&;’‡¸Jši\àÕxˆS,Æí<¤áÔØzéZÇó¦’ý=`f38ÿ ®*j¾8 ¥ÀÔÝ¢HNqÊ3#'¯Âد xoh÷6ü¼“ Y5X<% m‰)d¯´R^WoØôäÿîÞ€áà­¾²ÉªnsX}†¼ Z;}¤#«í$›‡'Ìü FÏ”ÔL©ù£æ ÷÷Æ~€Bf@é®Ö¯¿ãuˆ…b-¡Ò`ëçúP||+ ‚\…,˜fbPÔ@9+É­€ IDATøT?áÀ` •–ZoܳÇÝÂt¹¸ÉµMýŸSK¹^RÆ«kÍ7Ø©’«ÔÑ —:[“Jƒ¥ÍâC¥ ­Ié®Ò¤Oîï—>ú¨ù“ ìâ"};ó'éë¥ó¥ï#íL­«èÖêã¢kˆî ï º˜ZTm•— ­‹Œ‘%dÌ,'c(1IÆT»·eŒýJÆœSœòŒHL’°M©Â:)zaŸó¯ ù§ã…ËcHN§5úq΋G ó! øj¼0aQ…ÿ³ìÌVæ„ ¬4ÙôÜ*QæÙõ.žïÞZ¨:ì±c‡ÆÔ…KÃ`|}ðÔ²³üŒúÂâƒÉ)ϰèô°þ ôŸºÃ Y°í8x¸C¿çàï™pcÌUJ¥}½6-åóŸÍÖÏY·:U’Œjž^ðæ‡9¸¶eNi#áƒa’ /‡/þ†w¶? Ȫ\ùöL ló3¨gùÚñaFÈk4r¶|Þ£spyµlP«aÅ÷öb.jÄ 7~òÿO»q/@o5’†EsQo󲦖c¥Ž—WK-I®ÂÒV2¬L¬êIÛ£‘¾¸b’¢:5(¿³]úôåñÒÇ “>×ÙéÃ\[têÍEÇÖü :·ÎF‚UgU¶%UJɘ¸±LÆH¿çdÌl;.c¨@wSë:ãz:å™–°xaàï„}<µÂB—† yØáò°'L˜«V€0˜½ra< ó)²2A˜…íì°ûOõ?\ »Éß ¼• ØcÒ™P¬n ¸»Àñˆ¶1ߺhàÅÊpáU˜Ó½`ëu¨ûôY—9Sþeßo€æ£¡T_IÁ{î†dÓN|Ǿ‘Ìz-X7óçƒjU >víµ}¯ˆp˜0†¶†[W%)ÄÒ½’’ÚÓNW_ÃÖð0 Ê´†Báîù'Y•Ã3áäpõ†NkÁ§¸åë^X&®þÐ|õûúPfïʯXv‰¸¾^6Âå«y¬ÄT²•Täi7D$O”-1BÊšZ¼òJÝ0ض"7_ muõë~Í>Å¥Í]½¥Ï´  (ß=/}YZéÛ!­¥¯íOoÑ¡¥{E§n]›0PtΦ¹k¯ènµ*¢Ë©¥`€èþ±od,Œé!cãÜ +¥úÊØù~ƒŒ%§8å_$— ûÔýAX(ÐKØè«ÂJ.6ü¢S„¹Ü]„ÁÒ#*ãyG û©Ò=VØÐÏ ¬øŸ„äÞÊÇj\4á)Ê“Å5/8›ÎkÚãܶ4?v„â¾pü´[-–¡{ÎÁâ”ÿ€ÜxÓ†Šƒ þHøâwx ÕÊÀ'ÃáÖrøkôi!êZ6— RÛwA¢›‘öü]*£ kNAH+û¾pLüÜ€‹€-cãŽÿI ¯|ÐéOp÷³|ÞÖá¥:[·‡k‹n5 .ºD±À”ïc’-mÞKP Î®{0­M{j™.¯–²¦–j¯KÝ®ý-uµxÞÒF‰Òf–ÄÝOÚÚ+Ÿ´ýŽÿY¯OŠÒ‡ñÀ]¤on³OBZ‰î #¿ÿ±èÖžìû~b¢è®F#º ¢Û}Zˆ®ßZ.º_­ŒŒ…/~—±QqŒ•œó†Sþõrèž°P»ÂFÅ}…•Ž v²ú š¿dÆ»æ%Ì7Å„F/ê„ MYñ?ÉÍ\ ´’ ð’ÉCyY DÙݸ0¾(mÄG®]¶ô¿{Bµüp# ^új.†õWœƒÃ)ÿQÙF}»C×ÉðÛ.HÑAûzðËD¸û+, /öó7nNßõâ$ÞmŸ’1­h)IQ<ã{ð·ÃìP¾|Þ …ÜAÐm«™%Ñ'Ã_Ý ü$V«-ûÇÞ1†0k2Ïúæ¹C3ä³ê(p·°£Eµ¬–³Ú6ÂÀ©àkÏÆ=KœVø·r6¢Z¸ûCá©u´tï&Jæ½]c¥ÍžX=ܤ«H›ÿÕMúÀâõòIßå‚»¡æ}kKüEW¾Ý(ºsî˜èÒì±iÇ]N-ªî¾ØCtúãíë‰Îÿ¶KÆ@Áî2&öŸuÎNùOÊú+ÂF/ý)¬T-¿°Ó–>ÂR©eg:3ï™ÊBWa¾$a@U^ŠF,mpl>‡¸E÷Rž  ÆÍzïi”ÝŒ~ðk:ck5Ð Ðü© l˜ÚzU#Bx<|¸WœÕuÎÁSDë>…Á¿8ä)!Ÿ~ÅäÓ¿ÜRÎ+npl9o :Ñ ®ÅÁÕ8¸/?_‹ƒëqð0ùÙë€äX³[ŽèÝú·”„ƒÛ•ä¼”\²iJ—Έ§IjáAcaødè2·ƒß°îKêéµ_ð]?t€Æ‹Å·ÛVXÝ\6’¥–¤HXÛz’$M>ƒm¯=yÞ™Eb)-ÖR`pCß'Ϲ»noƒ"Í ÊkOºÜÚq÷׆šF‹¬Öü[‚× b9n -(î€Âÿ§i¤ü]=WI#Kµ[O~÷b‘õê ± tJX¶|5¥Lq÷¥Œ©¥ÊkâBq{›ÔÑ’4™'`{s“´•Ås>“6Ž•6·Nä€`xxÖ ‚÷÷Kß. Ñ–¿×¾¼ó)䇄xX0ÏI¿îèlJ.ù¹m#@±Òï=K6Á²-bA~–%À JxCIõð‚RÊÏÊ{YGÏŸª¼q "®CÄ ˆ¼)Ÿ”ߣï€.§8Xôøé¬8 #kÁ;  y 80–ŸƒI;Œ®©*s5Ó¥CÏ~M€©~ ‰|QùnœA± F˜q›ƒÜÿÉ”§‚ã&•®ôAž(B}á|:ý‚«ùƒ\Œ†{ × Þk¯Tw-ħÀ¼C0s/D8CWf»xú›pjö).6^«<bOäÍ»£Ä’p…*îPÅJ¼œè#4?‹ý0¾\#Gù¢Ë“æËÿ†}mÁ7ÓáÏ_Ò,ºøn&ü³ ÞÿZ¢ÌþE€MþdT‚ÚÝÁ#œß7 «°e ”£oÀÚNÐm‹„#‹¾aÁOÖ[^¾'Ä5ÁZh³ƒ3’k¼ Ç?ƒ“ݼ\úªŽ„ò£Àãäi >! Q¦Ö¬ä®h  †ˆÞÖC‰òòÿK¿JÍf|/©‹Z7KRª“´IrŒ´V<ÓPok;IÛÈjŸ]Ø AM¤w-6ÿN¡â0y4i/¿Ø ï¿ ×/f Ž;ö…W&BÉò@à S8¾pëßÁ%½ÁÇÚržðxîrè |z‚å°g:ˆ¾û$D›‚tB„sMÍ.IÔÁÇ`áqx»¼^zW„nåá›cðÁ.¸/ìUÎGXìH:øí|„‚|‘ÐÇ30ºÚ×CA#3þg ¹¬Rá &ü¾´þ°9 ¡šù÷‡Ã¤†0®äv—§¡E'àý]p3Ê©ðY!iYý‹ƒ‡OO­:ˆ¼e}b,; v„ÄpãGVötr…wÁë‹UßD_¸“¿7Bòµ 3~ðÈ,_¿ƒŸƒnƒaìl¡?Nç$˜ß¶Ñ@ÅLñ½|ƇÚÊjh¸«%,Ù£sæ@âï}š| ÍÀíOZCoþ÷B:<ŽÏ3þOã w#Á` ¨!“ )µC€5¾'$W‡Øæ Ûf~íÜWÁ¥$Ä”ý Å¢¬Ñ€KiÈ}ô× &Uäm3ȵÜŽ× #˜û6‘à*R6«”G•à¡à•_êtÓ‚?¯»Ÿ´HÛXŠl)Ô[zYíÓ &ÒÇ*$»¸@ŸðÆ ðÎ Q`Î[°z‘¼Mx*8Vt·’’Íqò÷ÿ"Nc^©”ÓÜHZ«ãFgÇU¯ÄKÀpåOØ8ѶÁį¨%Z·he}pZ£³M"áím0ÿ¼ßV óÀ*0k¿°W9a±#é4rnN†Þþ }$,ØË`dÄ6&ÌøŸ€äRðÔÈüú›bä¨ ôtÐÀ¶°ô_·±’P¬SeðS\ùÖ^’N=æTð§•‚U3nÎŒIÍo§@r`\w$$ïJ†NP(¦?Ìøb—Qˆv´t6‡ŒÂ²Á«Âö¿`âç’)mÂ<èÐÞ ‘ñP¾1$ÆÂ¡•Æï¥”ÕÐp!Jx²Õ-žºŸC¹ž’t£ÑØ2ôÉëš~‡šcáÔWñùúBщàU^^s$Q¿ÃÃ%æ®^eÁ­:h+> Ɇ0 $hT#4&ç¤@%ÝxÜÿn}htñè¾]¥Lù&Bîpk:„þ"Zs¬±N–¤ÑÈ]îî‘¶I-f¡ÞÞyòÁÃ@éÓþŸKç/~^ðÁ·ÆL‹WÂôQ–ÎÝÔÖàXÕÏ”HÇŽŸ~™Ái=\?ç¸ÉÜå@ ‘ÏÐpï„Octyk´S2.7£àåub]žÙL’‘Li ‘a@Œ°ØgÒwÍmqÐ;/è" ‡¦#!â~ÓÁ'aÆR¸êw¡l‡ä®ÊkJ…§(¾È ~ËU,]àí M0öó‡}w$fýŽ›N…ΈäÍM[A“¢ÿ;žq+pf¼ Ûe>Ñ:Lö) M}7ëçCró¹Üꓬ¬%×áÚNËçØã¾—–5à³Å°clÿœLÒ%g óJhRL¢;ÖÏ/Ü$¯0ÙÕtøEn‹Mðƒ\„] ˆ‰€‡ÂŽs ÂÙɳù5eM¯tFö ä „{)â£b¯4òƒUÁOqxza-üvÞ¢S¬ˆ‡'ÔmÍZC“VP¹ºð #6E_„;÷j+âè“À7Üü ÙQ¡CÉʪšxkÌwžÚ+OÑAàîÝê@7åÕzl8;O 4ï9õ±\3–·¬ßÓ7gBÏWåU|p|“åóÓÊ;þ'ÙŠ¶pe+›»U<:¦BƒéÐüXZÕIد` ÄGÖAÒW_ÓA«°ã\Ô/Û!¹†É»#ÅŠy§;´v…mé˜û€ï‚ÀÃÄ_eõy§ÒÚ#«ˆ¥¸ikhмLr<ÄÇÁÞ°}#uÊMaÿؼÄqåÕ%À£CbI¨÷7:¨ q8ž µÜ ¶ìÈ‚œå¶ úÛ<0¤üú;DùË¢\¡4¯.H°“WŒÐ¼ó$ÜÎ"Ÿ£Ì„å˜(˜úìÞ/þ,lQc„†Ãµue54\÷ÆÐpkÚš‡+;2 Êv— ¦ÃŽ7ÄŸ×2#‘Ír¡ý·©Û$‚¶hÀðÐ$W°ÉJh7…0pêß ¿©×J Éš)‰R&C <øQ@¾àLȯÄö5Z!ß"uö+ ¡G¥-Ìîgg¨·ôrÉöÒ·ê³Üÿ^„-¿<;p\$¯À° ÅUJ›§x7àì ¾У4üx†nËÞùª¶›¬ò‡“3ö@ŸIP4.ðð°ÌåY¾^ذF?ךý·Ã’5Æ5°J 9FŒ3_wl‚³'Ì`K *{Õßó»Ã¦j0ä<,¹o¿5¹·¯Â‚I†í ŠA&ìø¯†äÂÈ£ø#ÿ­‡ b0ŠÍcl¨´DL+¿¸ # :Õ–˜ºP4m  ›Ïç'Z~Šîé&\±¾c! |Ÿ@r`CB2ÈkËZnò3+ Ù–¬¿(œ_=•tÁùü%T›ºhׂêeåõ¼œsý¾94Ÿ¹&»Zs",ë•]ža·À£(t\ û'+Ñ å´BÃéS`Ó`èuªŒ„»QàÓËÜ­âÞ1ˆí ÉåÌ­°†HÙ®­Áµ-$›ÀžþâÁ¥(h|Á`bÐ+«‡K \ÀüœÇ“Ÿ¯\Ë/×6›ÍÛZHÙ,ez\¾ˆ,'@šk¬n\ê¬O–6Чê#{B½Ù Ȩ3êMj ¿ÞE}žáØE•JšCq‰T}–”"q•Õñµ÷ „*>fÛ†ÇnvKNqµP\Â÷æ‘âö¾o¬˜ _ϵü6µE[9îÝ1³Ó5#mùâ6Œ,?V„ŠÞðîÕ´ßî«›¢î † ¬8Ø ìXXw²ùY/[!¹©‹ñ±ã€+¯ôç`Hnû ÙËE¾{>H1À¨‹ðÕÙe飨r¡HÏ ?»Ï|bq($ïF}Û É#€Fn0+›ï½é$ë ¤8øyBd‚,Æì‘$“XíòÆE½aeYÔKpn1°û”qQ?tâ3!6bfÀr…fò¹e:Ä PÕŸ&ñÿ ¡É2Êi…† ;GæC¡7 ÿ$#«Wò€OWpí.ÅAoâÛœò—ÉÌ!=è/€¶š¸IèL6ª›ò4’ªXÛ¸÷ØÕâ‚\Ûl6ï`,‹ÙwŠËÿ Ipw$Ü}dn!÷š$ðî~.m`*ö„z³ÝrC« L7ñwÞ÷.ä ‡ ¤Ï·}3àØÒøñÏm~޽ãÇÏSÆj²NÆnvK£œå¾;ç@²º¶…vn–ƒñ–JN× ûeÔE8 Ÿ—ƒ % ¼7¼tâõ¶! An˜wÞÕÀT 2(¶0äÒlÎo‘­Ü^‰€‹dQi¡‘Mظû®iû#v‡?ª@-ˆH^g`ãC§B>üvºP¤çõÑ…C²þ”®ÞèÀ á{Œ®FûdØl…dS+MvJdì¹MKA˲°êÔ“çÄ'ʽó¤mKX‡úr¨–°Cç-[²–UH>·î€Ö? \å©u…ˆ‹e[¡áÜòAbk¸X]ïÿ wšXC!y%¸õ·!8Ù’×›[s1QNý’+¤‚dåÉTcÁ’¬þÍêéõ±«Å™Ô©ÜÛ¤,átˆü?y¹q# ê†Qè{(ØOêœØZÚ Y9ÇžPoö²9‰PIÒ\oì'.4ƒÌûÜpléMŒ{ª¥1£obZ–7-l¿*c÷?hIÖh!°¾ùî0ã‘·¬eºYÛ¬IØXõ³–ÖV§kFÚòÕ¸’Ë+‰Q³”'t> w¬0Þc¿dWaÂÉÐBaÅX —ÂÿjHVS žÒÁ4Ūù±jz§mE®‘[¹¨\އŽ'á\Ü[ 3êB‘IŒƒ+Ç¡\-(_Nîp\}îAìÈUZ6DwPA.é Tù\ ¬V~ÏNYA ¹m9ËœZô8uUŽJTK>•êÆ£±=EÎÝT àDöÁrÁ ð+‘÷A`jE]#dõ<`„¬Œ€²¥Ðp¯@å­àU âoÀõâÜðLü‚“¾Hv‰Sd£eW\ʈ_°Îd ¿µÍ{!ÙB.WõoO@²•M{ª?´þ²be~LÈRVµìæfNˆn/áëJÞºWÞ §šC@é´C½Ù È%ÛËCއ?<ý¦¯Ùtz8v)s|úÛ–3ŽÙì–²Z™£BõÙ?G™ˆoepõØ«2‡;RÊ×Õºx8}Ÿ³'åpºf¤O6>„GàOŸ¹¿–€òÑëÖä޾„G'NÓ3ÖsqLzêlƒä|(j٢̾I’ŸÏ ?U„\ZØ ÝNAØ0Pxf¹P¤WÎîH®Xß±¬Z"r•†¼ ɪe¦“‡Xj²{úë<|ØÚ‰S~F|´n‡Á²­r€åÝù‹Ëñr;•ê`ì,øk)œ=š5°üØŠ¼ÍüûaE=ãëzk~Êö‚²ih¸öÁ‰pð,q§Ý–ˆû„Çû0ʤ;A\‚Á­‹X–[“ÿ÷×ŵÁ ’•HÚJ© 9÷ÔkèSEŸ°æjáÖ4…¤ÌºT;˜<ÞMHØ'û {CÕ]P5Ðv¨7»9•ÿñåÕ–ÝeÎmƒz½¥ïC/g W¬úÿ~¼ñ笊£Aƨ:fÿƒVd¹r®«Eº GN׌tɹ8¨VW†Æ~°³¼x~ ³Éͼá•xh,×A=7aÈ|ÍF¿älƒäÆê€j*œeÍâÍl@òøâ0£”¼1þþ¼z’þcñÝ^}3s](2ÉG@åF°b–cÛ"|/ï/.—¿t`Av™@ò’lžõN݃;QPØ*„“™`ž‰Žƒ å€Tq^«@ëÒ;? ƒÞ‚«çáïe°n©üœY°|ä¡eH«uÝàeÍOÙ^PÞñ?ð¯ú¦àqg“CA7r÷abÕŸ6±&/Ï/Àm¸Hn‰ï˜ÔÙJ„ ½Òo¶Ü-ô©úV½†.•%ÙµHn,³Ùu‚¥n¤@ÂhЇJÝ+oïJb<´Ýr¨7{Ù’ÿ±¥—¦üÜ@xktæÁq© hßÚõ–Ÿ=õ@Ä<€;PœUqÆ+”1z'JƬ£ yWñGΛö*7zzHN-uÍø/IX2´<_ÁÀ‚°2&\…n< É(L­0â,ÂŒzÀEXru6Ú¥² ’›j\¸Ì‚ÜÅ%µ?²»ÆØ z¼}åÉý·J^?ÜÞøûŸ(F¥Lr¡È$›>…;t°)ÖˆÀ†.ˆ#ý’ Àºóå¢CPæ@rjIщuíÀ9øt|éÇÂÕ=à^N ãµ÷ä8w þúÖ¯€;v¦³²Ëq@ úÈzåNOÛOÙPÖ§À…Hȃ„ع²Ñè«?-pì>°h„Eò¯–$ :'–å¥`fi¨àmnø4õKr‡ùI0aF’›j³’³Í㥋qmøÐ Ó¿%+r^7ØT]9VÝOÿ7¹A0ü8n­‚†×ÇM+aD¨RZÕ„©ãåUOv½¶¹s "CÁ/.ëØ6Š:)Ñ«x:2ì_ê¤"Ù-j8©¶å³ç~)›Á| Ь m «At„ÀȘY°ñ*,ÙýFA`ôÁrç`˜0@ ÙÏ2´ž–¿§ú)?1p5-Kè¯ZpIÕ_j²eVNHÄ¥¼\CÅ´Qî¥1Æk~ÌÔ¯Êß“—J™ŸßAêdx$uTE[]Úà®^Ú$Ogi£ôrÉöÒ•¤oVÔµÈZOéãfŠ .ÑÎÁ¢ör`ѹ%»DÇÌŒŽÚZtÖ×`®ËY-êØtDè·’Dij ¸Ç¥ÄÈÜíH)\VÖ°ÈPYÓ²CT׌©ãeí®RPÖòM+ÏÉ “5ÿljÂÿvùè†0]¬NoSua>UL­Éq +š²cËlöKΖÛùk ¢‹@´¸|ƒ±!L¦‚·dkiì·¡ñQ˾+ÿÉå C:‘ï`Ï—ðbkÙ ýçØ¢l&?°A^å8r@N±&t/ÙÔBáQ“Џ"û³[R‡‚ËjÙ²âã¡vM(˜öü“^†&adX· â FC˜0¶Þ†ïþnƒÁ7ý°l*µÆCïÃP žåï¨~Ê—W˦°Žk¡ÎDô@9O{(ö¾(Ô…^óàž yü‚͉(«ýù¿*ÉÊ&8·Hî.õƒ[ó²>öKN½yÏB8káßÔï¦öGVï•lêjᥔͤ¬r²R¤n}ž]•º»I[\è%mSì}i«4Y#mßq­ôÅåÕÒ7V±@=éÛZãÍÿn/ûæÝúîѵ óD÷âDGvÝœô²èjÁü¢»ññ¢ËY-Žý¦&9îØ$"ê¾×ш0_»²ÒŠœ–¨®6(Óê~YëÝ´²öïùRX`HGï§ IDAT“„ÿBù-LØîV¢°Þ¾šÂ~©!…o!ìˆNXÒ?íRÙÉ\”eK™û¦dCujHn{kB/8 õ[ßù¬KPqøìu¸½¾} j”“ˆ[ýeûB§wàûÕrn«¦Ž/ï©]9’Õ þã.j(87­„™Êj‰‡ ›d§h{׃¤DØú¼Õ€·úÊïºhЦ.„íwá‹5âê•˾û­ld´wßeݪ¬ú)ï{Wé‹iÐ~¥øÄZåN»!h©Ä¦ºù>̤(w@w4¹ÁÕäéÖj¸û6 9µ»……ðo®Må^ºFhÓ2™†}ÓJ@©“¢¿.AÊß Òj¶¾›Ó¥´¾ÒfagŸdÿrÒÖeºIÛÿŸ½óªÚÚøoj&½@€PBhÒ•f¨‚t,4•&T,x- ×r•kÃ(*"¨ XÀ+"HGš€tAz !!u2}¾?Ö9™I5™Iðs=Ï~’L&™söÞgíw¿{­wýÜWÆ¢¤ ÜâìñÖ7dŒKÒ_.¼eî|­Ì¹ò³N/së…Ñ2×¹Mæ^A~ÉÿG³~ µ(Gé7oŸTÞ ¹MQŸ]@ry2É kyǶE×ø£§eí¯q‡`{Œ»]°ÂŠw;ôü­ì”M°Þ÷é‚ý5,è—Œ‚Ï"‡Wa:?˜_º¼½ŽBù-<ÑtêN!W%‰[tüÊJ^OV-Æô1}Ež ¯æ.‡~IÎ'PìÙêA«æ°~sùÝCE**’¹Iæ#[ 1åô%Q£],è@—úxåkd' o8¸ÛSä˜ß/¦<@Ó¡C?8uRÓát†H¼Êvòœ¼f-å‚ù˯’=Ú½+^š‘Ë9/ñ ógJÌh» ç hÖz ––›Ëæ‹JÆï+ÁUì<Öi ÏÂáÐu¦‡UÞ>6½táÀ_NO¹ ¶ï†J $Q/5@á ”Ïu,û,0Œ„ÀßQ¼²c‘ü®¸$œ}ž$ÀéZ «2¶ŽÅR]hu&ˆ¼Q|uæ¦ò]ƒ¯´ˆˆ?¬Us ‘µýT±œk«æ,“Ö,êC»B—ÒNžƒO§?é¿Ij îÚ¯Ö‚ç < ± FÜoÌø–ÒpA{½g݃äàF¬C‡÷¼ÊnÊÉkÝp°ºà¾ýðÕ™¿ÇÀk4Щ<<úÝìÙþu¦ÿf/ìüËÿŸk$wëP¾ ¹"±gKHxˆhQº*Nèª{€¯¾¦ ë@š‹žN‚°(ù•ç€?÷„ÈC$BÒeÎåÒ³ í<œ8 i™zN<íI¥Î„3çL”¸k; lƒ›ZB—ŽWÎÊeœ9S¤W8JZÆXúý¥Yehµ|jõ-h]JO¹òp¨t¸ ­´ÝÁô&XÆ{þÞ2^*×é’Áøئ)¯—$ W  Úøçý `]Ï*ö±bLr’Ì•ú¬.5qÏ+ÑQýÞu¦(`U“þŠ0É%è#Ù>K®.”|+dj’{uŸ.Ú }£í.s%$Pú®òb8;ûÊôUöXÝà¸Â—´ÁQíù©pëE?¯E=ÅÛºt ¼e«ÌáK9í*‘P5J@oõha8â¢!6 jT†ØH©ÐwéM2™U'ñ—,a!0É Éíu[Á™"€¹<ójçIp—ˆD´­²w‹Ï.O»Ö""¾°nвȳ‡à·áé`xxð6h/„‰÷ÀOëaÚX½ãâ.ûz170ñ(üe†õ’#ñc¥ðë{nxPuœr‚'ÏûºÉít SˆšíBÐFÉwÉÐ@ÿ°îo \tBØðÚk›ÐËÖÀ¸û kxéíò½· UTd£€äèäKƒdM` ÀWÄ  «†T¾„9Ï^Ȩ ‰½­>4ÁƒÐh£g‚ûËîm³ï„cÛáÁåPEeµ¢„ÕŠ‚1²øÇDHk\ë;‡åé Nð|RÔ¿oܻǵ]Ÿ:3ß’V\ÇvÈànzÀñ%ׯ*—¤§\©d+YD‡ÇBæQ^ Æ'%Æ×þ™â­ÏCÁÃ4_dÞ Á•rqI8ÛÇ`| CÀú/Q‘pnw¦TßÓ&‰\›;\© mME¡‚+OÜÓÖ”ÉìJ•ÿ¥nmù,§ô© —kÁ-×VxK|ÓÆË=‚ܳÛKvÏ0Zúd„õ îçPg´u»^ZÿøjØã¯ð!Ë×kÕá.ÉÔP‹ß7@×|/öŒ\Éyö¥ž‘30½+Ô ‡á+à‹íþõz`O4$é(k%mc1çu¦« úºÒ.ÂàQûȹήð^PùNéËKé_){Õ’'C’ ’ó`æGŒÿ*%¸ ‚vÝ }OÜG^{´üQŽCì¥dsó`óv¸¹tj ˱ROEHÞ © ‰Ý ñ6ù9²TísñÐ:_)â^˃Ùá01æZüË&;\ðÚ*a“'v–…Ùá*ÙæeJÛ~èÒ“úRñ–U£ V,DÆÀ=wÃmÃÁé„Ý›aÃRXÿ+ìÚ|a|ñe'×vi%@«» Ð, c®°çØô"œ»zVùØ/0¿7Ô[/tÄ™– “{LØc]CaLƒ¾ƒüv–AâŽõ]@ß ÃÁ>Û# gzOdÔò– ÇaÿHÞëžáX¤€äÞ`û@¸]À»¨HöÚ”¨ß—’/jaT*ìÙÕ {‘|3 —{sg-»­M”¾À¶w< »¶¦ô]$Rá·Þpnõ±ÇÑÐúeht¿¼/Ð Áæ_ࣧ¯í9Ðê I+¸¹;´»·œiÛY8ºO@®¯âöõZyAžÉ’žC_¯æ•…õµ¼Ëú!wØÿ’V"ˆ¾‚P4]eiÆb{ ¥|Ómé„CˤØáÿg&YMÂ_¿¹t„שsðò,˜ô•°ÊcûCçæp_i÷ÈÉõ÷«KŸŠRæ Ÿ/ ÝåÁ8¡£¿Ä%û$›€V êÏER &…B„–ëÖjU…úIU<5<-;_Ž;>üö—qá“å¿ HîÚ¡|Arñ¢"þd×› áfHºUÀqÕfBŠ(\©pjGù$§›k‘Å©"°ÉC›–îˆ×j‡ciÒ.f<S&ƒí0lJ…ÉЬ­´±/ «¼a¬["Àùì©«Ë+$gþ {N j<’†Â–Waçà²_«ìPm¹@mZ ænÂÊZžV*Óõ–‹üö2áN“ØÝÀYªàøU^³}(±½ª$œí}°ÿL§%îWלk=쮪>áÎó\o­ä+MÜÓÉ…ê k òÙÚF_lÿŸšK|ÓÄ*áÈ=ºÕòØáÒšÞ°jëCÐ2 NúÐêéÓ«aµh:nz^’ý\Øý!4ª µÈØ_U®&€8¹‡°ÆáQžßÙmðÇè'×=þ ˜:ÝÇ,nSy+‹ÌÜÒû ·]!Ž)QS _,©¹Z30ÅÉžªö@h9Pöé§wX>°ޝ‡\ey¹˜©ÒoËË(\Q åüaHÅí/ážmI{÷©æ÷ñOÕ¬ëÍ"´‚Çd †ÌBÝ‚-Mx䄯KÜF Fe3½^Ü9Í 0*ìî"Òü×-ü/ôjZäo?(Àøëåï£ÑZö¼øÜÒ¾üïÿ¯ß¡M_Ù™ûÊáÄ6†Ä®P÷V¨Õ ^ë±Ý GƒƒK!'’^ƒX3ìnG9uÊõÂ&—•}6^œµã`øHxd´ê 7+€%>Q”,z*úÁv `^·¶­s1Û·Z¾Öm Ӫ®ir$ŸÐ’߆†£$CW¾V9PQ…Èýµ@ß ‚×€¹§(R ƒàµ m sÀ|›x+ûl‰ïÕwÓ(¸“BI¸ ŸE6Íþ•€YÛ xAtÁZOœ°.YtŒ?‚S®^Ó#0Ò£«º|0:kRSÙü%P›œ®éØØŒ­Ø4MeJ9U ­è0;×Ég—ìÛ ¹Î‹I¾™¦€&J€¿}¶ŠÂåÞµÁµ[ú§(e-Y:ÇjÈ= Á#¥O³–_9{œÐCÆ1J‹ã^¡4ýOû‹™Á(²äÒ’ý}Ê!™cë—ÂæUТ Œ\ç2dÎút%½¾Xä2178OKË¡Õè¡…ö¾i"üUàñåÕšKëðtQ_~h9¤íþ{³ÈàY×ù §g <öLø†tÀܼ.<3þ5~©÷M·`ÆifØa,ÙÁ–m´°ÚåûGËgÖAGa÷:·Á|&¹Ýïša|Äõ1H­«y¾ïÓNȶo•ØŸ{|ÿù›·ËÑL£zP-öBÙÚŸë< yÅWeó? C(`æÕßn7œÚ^2û ÑCÕášñCáøå8IþNlò嬠¦Ï€çŸ§ƒþƒ`õBi 9¹‡}·ê$`&©1Œú˜ó`ój ËX·D€·¥í‡ì4…Øz¶~êYdõ[\d]ŽURb¡Ì;Àü°„è{CÐJ0÷ iÁäuoÅ Ëý¼Gâ“í$v·$I8û ˜ ï³<.…@‹A—ŒA7 “#–ç­òÁèl Ì÷Üs ‘)F'@7é¦\;Øt`wŽÃJ},º[òªÒošùlœr-P²ä›~€¼Ï'÷¦šéM¹wwºô…;[~ÐÏÂ0;ùN0‘÷5º2öX;V“ó2÷ÝäÄÖ“±ÎN“±/nÅçRWœÞåæÒSвÈô¾/ ò7c‘KcñCÅ'ç€Ýo y±îÝ’O“zxBÒsNysY†fT”""Õbe WC(}eù˜ñ³´¶$Wê®Î‚]ØçÁ4›Nq]Øf,رc†`ÉÁ–t×;HV‹ˆ¿wš ½QbKþ“ ã+øà˜ôðR2Œo…œ7Àä/áõïàœ•8ìvIàëÓMv¢_~W¾L²·ã¹¦Iw‰Š«q–nì{ nš õ'BÊÜØd¿±É|ãÇAß^”eôæN•Vûש´’Ø?sž0Š­CýNàt| œXá9®/)^ùb¬òeWY°(óTXâ _¡`€Ió*^¸RÀú,˜¦Bà4È[- p%IÂ9¾ý3˜ì‡°µÇà£óàŽB@lòX…õØØJ >'p~P¢+n¯rØÊŒ´ÄÄÍ„Ò œ`dÁ +Ø`wµÇʃXô‰Ø1‚ã'¹æ’$ß4‘r ÷äR⼕,ÌwJ\¶þV\š ° Ã…‰.P6%±½ Ù¨‹³ÇÅ㎭Y†Ë€Œ±7‹rá©„·]é©DR¢ÌÍ‚™«ÿ°È~1^|1ˆoööÇ ^!gJ&GZŽV–¡…IVYd5ß¶q´'§Â³wÂø›ˬ»&o†—ÖÅA…¶WráÞ@ÁŽwšà7u¸ ƒÞ?—OÌ´Sä@mÀ |&¿› Ù\ׯu5˜Ù F‹ÏÛ› àè!ÿdÕ–­Ü­Cù‚äk-*r¥!W{ì–2Wœò?l²ŸÙäôsðÕ70f$<õ8ÜÿÈEvx6Ø´RÚä§/Œ#O„¡H³ÛøÊò¨Õ^2f.»„Qì›í`%Å+g•âd“kQõ‘ìPp¸sÁx?-ópÌ/YñÂö ³jš £J”„ °®"ØÑP»²ýw (rXD>?S›aT&™L!Ka“5¼„SP$‘' 3 0³€Ê ¤&8Ë:Ž0‡`úFo4÷ ˜`‡\ ä;WIühI’o¦É ©*̹MIì+IÉB?‚¾/nû,c=t·Ú‡qÀ‹³Ç‹;öN¼ô6$Gaæ ÙPŒžß_k|ûSKLÜWßÈ\ý‡Eö;‹œ2÷ÒïÍ; ;æH+i(‹ÐŒŠTDDÕG^¶ÆÿŸ}.[° 7 –Iži}aÔ/›UÎq fü4Þ ƒæVÁ”F—`L#žu¾0Ÿ¥ÏµÔB ²¡Þ < ñ:Øn‡™æŠ; &=¼ÞIvZ £aï9Hþ ÞUbˆ:×+ŸëR…ÇË;.Y-*¢Ó‹@ûÅ,¤24w|Ï„ÇvAïwähM(!¿½ 3ºÂ+•àóžr$wµqi*› –5åY¶Se“Q˜_‹Ê&ƒ€e½³cß~\.¸{0ÄD_Ùßœ=?΂§CreÖ>|vl…‚Ö]`à@yo£^Ðô0ýç`õÃðuSa˜"$^yÈϱ¾Ê*ŸìÉ:2,½Âøá”̶Ƀ¾Ãamï(¯}'j¸ à>À"ïÑߪ< /û<ý­Dh¿#Öù¡6U×s9™kÈe:z’„ð ™<„åPÄ:ß"Bûšâ’oú[åÚ±(÷â*YÉÂ0Bú£ôåA@Öw–>DØ(¾O–>VrBƒä·eLŽ/‘1Zýð…Ù,cÛ¨—ü·fÉ|ݬhµD1»e¦ŒádLÔ°š¹¯È˜/žwmEi¼-0Pæ¢÷Üü‡E®ð,òåL Íø~¤¬%ï7‘µåÀYkÔ°Œû–ËZ4r±¬M-{U \Þ,r“8Á.Ç2Ë€`›gW_?¬òZ›`È `J$w¸™dp³’Ý@ûP0»áéÜë‹=.n«”`—rbrUÙUk±<¬z<´m©ìÒ;B„PüÃ&_Glòº ðûfˆ®£‡—Ýÿýí3°äAt8¬ ‡¾“°†#aèN¸m‰$î2 J¼ò—u%$^ùžƒ^ ùY(¸°€ñZêÑ$¶M‘Xcœð‘s3ß.jªâ°Œìè PE³  STâ¹\v’Ï^ DÅ-ä³i‰%˜zXHÁF:Fb0Y&ÙDëéÏ{Jƒôù—ue ¼ójt•±ºSÆN«—±\3TÆÖ’'c]V6z¸ÌÅß7ËÜü‡E¾îXä+±+ Íèó4TÖʶ-eí*/S×l_H¿]‰©˜eU ,öõÄ*?+X²}¨rÆå¬éK2Ù'û…fZSNé,zÔÀ›¹â¬8í­\¡×ÊNêrì+÷ÁÈvÐ¥>¼³Üÿ׬îBÕª=þÊ5@÷~0d$tê.ù0)@»}T¾Õ”àÿ±Ò…Q P;j)-XŠ[ ³GÃìzøðÐ)¼ú:t GÁÉ£zRÈדGÁz ¹9 6|]ÆBÓdøò.¯ M­äøîÒÎí‚ïÀ¯ÁióÄ+{ë+îÞ›}Ž$äÍWô’7‰.²ëO°ÏwŽ$­Ç¡`ÁKŠ(^h¬ïî~ƒ»vö’έ$°™PšMON3—D^¥*CÉ` ™¬&–ÁDÒ‰|ö“Ë6*Ñ0nÄB N%þØâ‰°(|M µÈ-j‘©0ÔU‘áiæMOBi†•Sœ¢1,ÅànH¸ÎkÞÆíÜQLÉbŸ’äElžäEí ô?ÐÖ÷)‘…sn’>TM;.^:\g„¤!ÐìIˆn"¯ÙóaïLØùd{¦‰¤Í†/d¬¯ÆLP½ÄÕ‚¸Úòµz-¨íä=m"Á½Â‡sÞìräY›×ŽäóÒòáxØ|Ä.ÿ?b‘/ën/¢šÑû!¸"€G‡±ã`õ¯ðõçðëO`³úçú Y³Ë“IîR߃aJ2•U^pÀ#XP0Rœðf¼ ztÖl¦…­>|ÔÊÜ:j)Ìõ {+¿b±ÇÞÊoü~eAÝ…µ¯×>Î× IDAT+ÀÚß§kj@!¤œ‚9¯+ÜAçÉà_9B‘_ì±·Ì‚ýg ^¸±&ü~¤|ØäFõDNÆ 9$ A#àÆ¶ž×÷>…ùs!+4ZhÚj7^càSË|¯[6ùbl°ú5ì©Ó ÇÍ%/ĺ-ðë=Ï„}˜W6­jUáô )AY½¦ØTpSšß|áßÛmp:Å¢UúøïP³-´¿*¥”­Y"=¶ãÝ¢Œe»×ᦊ2–Ç—@Èfˆè z°¿ú`.%¨?ÃPZÖ‰sëX æîRHÃ04a`ûŒãX@˜9 p=OršIåj1’1R•l6N+¢éSB\rÑä=5´Â’çÍ$çyú7ÞñÈÑôAO(ÙlÆH,$c'ƒT>ÁH,µy‚‹0Ç0 +F¹C?%ä"ÛSP <#1ÌhÁ> Fƒ6—‹ºE âÈÏoödo†_U")Îð{[ûQ` c¡q#èÙW™'^sÅ[îrsåä1)1Ö -œ: ­;BêIßÍõ±m`Z?ȵB÷oÁi¾ø6!HZçþOŽãBà|%,ô?,òe­×¨’GvÁôÀ킈(8î ›ÀOHûc#Ì› ¾†<„„ªÒoåÅ"ßXÂL‚]N^Á¡MEg•ÍnÁ”óÔ·`Îw|t]e’µ@²– ¨›€ï,åÿÐ\+{\ÜVîÜ¥^ù€äek`Ü}е¼ôvöO2  }î€`Åÿæd (žûìÚZ º`ö ðòÿ`ÈDX2³ü%v*4›ü@lÑ_%\ÊÅ”,³¾ ïö†?Rasªoî5õ$ô¸ Ö.‡.maçðäƒWÇÆ'^X<âÚÍìÞÃâá‰Gál:¼>Y~çr ûw:¶” ¦±8Óµ!$‡ã ñ8ÈØ+ åo [‘ø:±\Z¥ÆÐì ¨7ï”vt¿€í (Èk"ÅBôý ðÐ÷ËÃoø•€Dm’„8·A~GZúŽ[b—0‹ Â8À“DÓƒjÜK*ÓIa Œ'šžçÜ8‰¦z"ŠÄ%§òq‘ä=ïÄ=o&¹xÒ^¬'‚hzáÆIRwq’G S§ Õ¸ð$5™(>Ømù5Á• ænàÚšêžÐw®lœ«!ð 0Ü­œŒü$úÊñJ-úÆw@-‰8­°ÿ aö3Šeé†'BÒ`aü+5„D ɇ³‡`ë‘Òů?;^æšÍ&so÷ß=Ô•‚ä2êàƒ òl]Êl.8˜/­D|™0ªYhpÈ%$#†ƒe%8ŽþÃ"«ÖÿQˆŠ•µiãO%¿g×Vi/—0Œ{î‡ÖíåuÐ8´¾™ß|.¡×j¡!²VÛí°zCùôGçK$í]¯¬²Á–Û•¨…JnÁž»}€’Ë${K¿ÐÁŽrŒU-+ö¸8Hv»áæDЃÕÏ“D­û~s+èÔ.½º¿×é$&kØ}pK/I*H;ßΖ]ô±ÃWþÿf=¯/ƒ»ž†Ÿ§«üÿÄ&ëª (è¦Î’7ƒƒ¤aåýË+Á!³ÿ|þµnŠƒ¶ñðÕ]Ð{6¸|´u]¹F=_~“^†©0gÞåÿÎj#I»œ$ÀË; 4ªZÀÝÚüGZÚ&̇¾…üÓÒVŒ‚„Q¾áA¨^O@rp;з–D=ã0Y@ .Y€a~;IVÓÝ(!j²š¹=-'È)qÝ!؈`4çYÆ1Þ¢6/PŸ)l¢5©|BOR1œg Qt¡ ·_—ì¼ç(IvwѤ½ó¬¦ ·£%€LVR1€†T>ÁÎyê3ÐpŒ·§qŒ&  rÕ$ßuÌ]Áu t­½äjà:"}£ ¦][Üù`¶ÁÐB”P™êõÀ’ N‡SÀìl\ï`ÛÚózU „š ? žjÇK7׆ ’9ævËœ[éÃRfZ<; °1Ež©ÒÚ9›´+e¡ƒ k„˜ ÁLT[ (D¼ã(XVu¥€fçéÿŸ,rp¸¬EêÚtYX ±É?Ìšu„]¾k¸FÏ¿ÏüVüsfÀÊÅà¼Jñ5É~ýæÒZ×̪뫸Ý×’+2«¼Ã ÉI¡œ/@r™§¼2x@ò‡å¤‰|%ºÇ×ì×ò`÷I4@ëZåsê±zŒs%V³L˜[SàË…r* °äpO_h“&\@ضv®†Ð(¸ýÉŠá(ý¡›¬­A!r*TÝ ÕOA¥¯ d”dW&˜çÃùG  K>¤:!Ä ùáé½ðÑ1øõ¬°L6g€Úœ0èkHχIð|gß~Þœy0áEQ/˜9º”R³0ã8¼Ólfˆ5Aæ,Ø÷%Ør„uxFž€+$.6 B@ÛÆ‰0+6>úS`ø…ìXù-À¹EÀ`ð‰?ÎOÇjÁ«Á0 \Ç0ä È!%P]l s†o°B7RQg2.lTá2‘ƒX†^T/9Œ8eÑŠ{Ù$íyÇ#Ç*ª™,§ wàÂÆqÞ¡:£ U3Îð ²Þ.¶`‚ì`È!Ù0LîQSMî9?Yú xô‰s‹ô‘c…ôYüBЃá´ôé¬xécsšôyÃQ2#OȘĶ–1Ú÷¥ŒY¬IÆð¥È]:ÊÜÒhd®]ÉF¬4ö|gyvÒóåY²ùXªIe¡=+¾âé½â;BÌêÄÒ%ŸóˆqeŠÏ %>¨ú)ñI‘SÅGi+ýÿa‘oRÖ¢«emº;vXÖÀ–ñ²&.ùŸ¼Þã6Y3·¦ÈZó*r Ué·ò µh]K°Êî“‚]JcQW¹cºìé‹ýqYÿÃú^Lò/ågq5ºÇ¥a“n©_>CÕZ¼\QS (Sü¸6„qÏAl59JzõYh#úòŸ¯~‡ìmŸO¯Ÿ€ðh*„•µn²&{CÄÛ» âÎBôú0€; ~¬§ ­%¤ÆÀ¹Û!w8V¹ W–¡f‚I!þïÙp÷·àtÁ¿»À­u}ûy¯O†w§€Ñó¿‘­ÒØ‘Mðñ0¡Dnóá³*°d0ù\ˆë·|£Ó ÷¨;HwMƒJ‰ÊnìÁ»Àp/äwë$…v™ L²åaaN1IFÀë˜Ü7Á‡“(n&›Mè §!39È3$2 'fNótSV"éˆìbqÉžä=5Üœ+ $ÜÂ;iÏ;ÙN6‘tÄ…• ê£AÇi¾ÀI>‰È½ä2=ád³‰(nƨdS›Ü7@Àëro˜ä^-˽(³u’ôá^é«ÀþÒw;FKŸº]ÒǽHŸßò™ŒË!c²d°ŒQÆ|3·[ÆðȦÒÍ…ÆdN2ÇÔ_Ù­uå™qºä:QÇe“BÄw両WŽU.r§‰IŸ“õ”ø wžø¤Ð‡ÅGÅŸñ¶ø0M¸ŸŠÈ"‡GËä½&]‹9²&Žè/kä«ÏÊš[MÖÐeM½}˜¬±—2u./}d£¬*Ã*IW¹cºìYÑArãÜ"Âs°&…/Øãâ¶B €ï\NEE6o—£µÔeqkÒ^ÿv†i_A›`Η ÞÛÚCr˜úFéb­¼mïFØ´‚Bá®gþl²Æ$á¯B•õPã<Äü aãÁØÜ69ÞÌ~ÎÜ '"!½7äLÛ6.Ì Øí€{²EõåÙ`x(Ðÿ²ô ¼²tZ9:®îÛÏÿœ0|áaðËQÀ(mû~˜ ìás ¾ œ‹Àg±°b4¤®”‚µûCo`ôèö„?ȱy•ã2À!d¸vIì±ëèn‚àÍàÚ.À;‹•198OÆè92f?L1,Õ"S]æRx˜Ì­ñÏùv×—gE§•ggi9¬jŠÏp">dw±Í%>'g²ø ‘⓲_å¶‰Ï />¬Æyñi¯ŠÓ\e½£ŠÊ"ßõŒ¬A›ÉšTv•É díœ7KÖÒ6dmÝuZÖÚ&-/üÛj±²F«!’åa*FY±¯lÿïÅXeÛAkâìé‹bÈeJ’7×P(ýæOµ“˜b4{YÄ_ÊÖR¡u-2‚ÙÏa%v»$ðõé&;Õ/¿»PÞF5_ËÛ¨6ûhÕ ú= óß…Œ  ©xU±Ézhå‰+h[lñp€uXWIÌŸu¸¯6±ü'+<š†Á”08é’×üi¯®’ØäI0otú´l޵¨  aX÷Aöi7»ÀddÅ,-' òåûü\È;ôïö/„-7ÀMÃàñ…ðò‘"²p{gJ+[ÿi¹™pБ ö8X‡ƒ®¹$ð9VCÁP0Ž•8eÓt%Ym˜>EÐ$é¼OFªpNঠ5yš¿xHÚSƒ±œäSÎð=± ­èsÅ2”SÌ,1yO‡P{Þ‰{:BŠ$íyÇ#Wc”lq¢ÅHóÐb¢cqãPÂ,¦ãÆŽƒlLÄq†ïIç}*3TîÅ–1`!IŒö¯Àö!L’B+Îí0"ßPݦ3„Þî¹Ðâ1áÞV)^ÆÈ[æÈØÝp„†Cp(˜‚ 0Â"ä{SÐ¥W)j¥:Döi™[OÝ{Ã_ÇáXZÙÆÚuòŒÄÃ’òìøÛúˆ¯ñWâ/T_µxUÙ¶S|[gñsí¤…M?fÝè‰g¶næ’²r‘E®TMÖ·[Ö"_ئuÒ&Ž+*“:â!iÅeRUYM¶÷·£8]‚Y|Ò'Åb•½1YºŸîy-p‡0 4×@jG0”=HV.p­ŸB-b °ª™øo 0äøþ°o?3Ë,ñI­jŠH÷¯{üÿ,[# ùîAÐn€dè<»_ ¥«vh;¬ý:Ü CŸ‡)c+›\¢Ò…ŒÍ$É.  ˜:;†tm»²h¬Ë9Æ,µ}Tñ:a†¾ ‡äÌ ™!_šË-GÆ[°üVOxìçkzHª â¥5¬ IqP¿†T*b©âj"b q¤Äƒµ‡Xn¤Ø1ðìnزIÊm¥ýgÿ°¶ó}iÞê Q ¡:p¨9öM‹Väßô@ÿئKù怷<êZåiœR:¹1°“„q#!4â@ƒž“Ì ¯²Ø@$)àûGSpp–§Áô!hbÁ}¬O¶9ÿ&cå>'ºÑzÔTÂQª$à3³uäÊ7Š4\[ Uk ƒ0`ì0xxصy€KŠ…Ü@:„§Â¨îEßS`…}'à@*ì=¥H;pl×ðŒ½ÕSž‘ãYò̸ü?ØX/>B¼ž/¾ãZ‹ø1ËJ… SG̦.`l*~ÐÔÂÿ#~Îò›šWm…'c•Eú<ÂoßÉZäKËËõ§/?)Zp«a˜4E¤YÍ—ýœºV—‡µ¯+nzó1Á,¾2•Uþã|w“`±UÍ óÿåµn¸CÁžÍ5°°"ƒäf~f’U€Ü(r¬fð”Ãöµ­Ú/ ¹s½òÉùòµK'hZI¶V.öÉÍ"lò¿!y ô ß½iG)wóf“ký ÒsPÜ ´QÅú¿P¼R@±+ÃG5!jè$Æð—h› ©~,ߘa†»æÂÚDnCÊÅå¬Âƒü6Lv¸A¼|_3ôº’ÿæä9 –ï@ª¨ØÏø’ÛA¥3ðÀxØ{èÚYÅ*’ˆGtíµ»A>{n§æ´ß!mlyUZtS¨w/˜†U Á§ph˜Ç€î0>ÆG ÚÞ]Ï3 ußÃiM#f³‡{iÉ "é@.Û ¥9Á$b#(:D]α˜hz‘Ç.BhB­.ÐK®Dw‚¨-Ïë¤G}­¸>rB×X8BM8Ç/Q—(:c# 1R…\¶AÜØÙý4b6á´–£I{B# ºs ¼šh¡mSÁ¹‚^„Äf`LgàäXù…G§:¼6Ô»[@qlé_­‚ÚBZPÉQypª§ áãÉ`‡uà¾û¡zÄ…ó²z44O”V„Yu ˼÷ø…ó2û"òlƒšÈ³asʳ’ágø8­ø†0 ̱ˆÏ(+ò  IIì3uTüb‰gì% $1вZübLXÅc‘ckÉšãrÊäOÛ÷'¼ø$¼ötïCFB§îÂ4WÊÇ)?£|ú¥4Òo×b*öʱ &óP.ÄšNƒ–±•)Hn©QvœØåc°ê ÷äÃ×gàÕ¦ 3ýPäcÕ~x¦»ÿã’«V‚w†Á·¹ …•sà_àdJù:«û`ÅWÐm8Üó"¼5¢ühx5Ðþ $AÝIBBªÁå!›TÈ„ŽÊ†ªZèb„_"¡}&dû‘©Úœ O,’ÊaŸ€“f0†– t ® QÉ0Ï—ŸK’³ ¡Eéħ†Wƒ¬”ò÷ñ÷¼z#,›-kPy˜Í ¿“V=Þš$E É…Cׯðä48íGÀìoœ¬,o†!!þÊ»Pü¦Zú y¯Ì@r$¯>ÈZ‰ƒñ@î¼j„( 9Æ?bíA9ÁkA¾=Î!í/„°`0[`ÑÏpçhY ÎTºê_¾ ‡À-wÃ7¯—ÓÒ@ƒ~Ðr$$u—ù¨.sµÒ`Ë¿¡`yùð{¼*00 ÖFɱêüèy^^÷ ý9©p4jÅÃÚ'€š *ò²²<¶Xàλaê;ðà}0ÿkxp̘um÷P ouáA‡û iM˜ÿoؾN@\Õv0W«Ÿ4ÌݧÁ u\p¸+èoû÷`yŒOH¼²®8aÓ¶Å誄7Zr‰e0©d‘Ér¢èJ.Û1Meú’Ï_Ó€H:Å:"HÆI>Á4ä, Hàv #¨G¹®"r¹]ÈìôÀ®âË`œä£'Œ,ÖI{LÄ“Ï_ÄÐpc!•Pš“ÉrLÔPþ&‹‚´ìÚLpløk4àJÛ»˜ƒæ‚^µ\`Òç¡N:´Ý',q‘þ÷Ú|¤ýÍ“aà+R³þ·0û!éëkµûFÀôDÜ}ú xäÉKËðdçÖýÒ¼íR¡AÕ£¥um¡NRà(#ÏFNª<+i~:š3"¾ ±^°fùÏ'¨„ÜiÈŸ# $v…›^ÐXˆZ „öýáÀ¯°õsøë'p”Ãéeú²Ö8l²öT;sJÖd€ï~†Þ …ÔêÕ^ü¦ÎŽÁ—$ØÄæ¬â¬`¯ÅiðIž£ù(;̉S0h¤x­Š’‹ÐÜß DI9Ý™Yk‡º¡"Ç™æãjfl:*q?íaá.ß}ÖÍaÚãÐT9Eüß:xì8™M[AR:¾ø®üDÚQXüô}†¿¯Þå¿Ï®rÜ8 š ƒ…ärXaÏ|صê¼+•˜›ÃöO+€7ÍvC¯ó°1Jå™á’½î Ö(H+A·è7„)Ïé™B–ç.X™ ËŽú.Ê鄇ƒÓiðòóðé4¨V^ùï5Ò`ø| ¤€;_‡Û_… mUJ@†×†ØvEÃb›B4R¼ -ÔȃÀ`¶/ä\Ú8ô}°èímP@4&²pa!ŽIá}BhL(Í ã“õDnjò/þb,$ºÅ’©„Ðí²· ÜÀB Éh¼ÜëIfÒ€7z"Ðb(¼gÈcñ<† .œXªÇª •Jƒîa“5!`zK–ªYÀ*û¥¤HÐG*‹­EÃX²•#;­Þ³Qq»àÛ§añ[¥›'ÿ~NæÀ‹¯^ûüA •æmÅ“L»Õ‚.á s§¡Öø²…<æÀòtX–k2À씣A|@£èª÷:ïßÓ¥‹˜ã¨øÌ¨X°¦Ãš' Ioh4êõ”–wvÌ?f™?ýwmÃ_­}R1Âû@Öâ¤:pà0 ýT¯ïƒÛ’áÝG`Dxø=X¿Ûw×Ð>QY6ö°@¬I°W®vfIÙÎ;ü”½1g3 ¬*ÃǦlA²za: cøüAecÜ+;šïOø~b¬Ú/ ù–ú¾ÉÑáðæCòPi4p䔀㟽äm^{fO‰ÃÜਉs_…[G@û;Ĺú2‘" š–# ¾­Xß›?…sÁœ©¼v:®„:AÞ~8ø~𨩊†òº(‰Q>á„çÊ þP§áP|s”TñR-Ï¿eÈ¢¿~ Œ¿Uâ0»†ÂæLX²Ù·ÇA¯üN¦ðåç¡jìå™ÂKÙâ· ýŒùRÀZT<|x—°ÍÙG¤íWJ*{'˜ÅvíÍ@¨„µ€ÃÆQ"í_‚¶:fCoÂl£±RÙ“ܸˆç1R™NA;òØC(à8$C?rÙA͈¢êÀŸÌæFúAÔ¼‚È"“?XÈ  É2 &‹ÄÐ-¦ÂÏÊc´Üœeñ<†n܈ +@žÑŽEà:)›M àj›Àd€ \0®‡Í«= ‘öÂhÃaì·pí`+€Oï?~(żÕyNœÎÒ4\vƒå†#§áøh ]ºóð IDAT›€Æ-ñù“—ÂÍòüt¨ä=QG }¬Ïô€æmÙ²•ÖŠi!û5OáV÷1ñ™N3¬ï ™›`ï©òÞt(´±M ù i)aë,Øù5X}¨¨”Ø\Ök¬9ÁôzY‹ÕµÙáéÕ"ôi+`¹i"¬³–ÀÓÁ9ÈnûBùJXäžG!ÝîG ¬CYÜ$·Rã‘UêÛYµµé’Ûû $¯ØÿîSöqÉZ Œé “Æ@TXíðæ\øï9ý.HÈCY‘ØäŒSðÓ4¸ó)þx¡OÙFÍd¸q44¾ŒŠ*…%vÌ…?>ƒ“[/ü›ÌM°u ´ú šL†ü£pê§ àYU åù¢z‘â¼¶LöZA²¨w‹.Ñeôbpݰé¼gaßx¾h¥¿ÁßÀ–Tx½Lì 7ÆÁ°y¾MXš1 ΦÃ7³U©ì‰9½œU­ Z@½&—Õ r50Ùà¤I@Ûç!Íiç ï$d–²Õg·@ÚF8¹x U ñ¬µLrÚnwx4Þî,¬ö™Øµ·cp…c¦€ qc4Äñçø™hú¢'9’€ U蕟©N3pœÇ.jÒ„MlÃA4Dá.J† ¤“Ï6ª2œƒJò_Jýqb!ä ' α8@À׈™ìb×fcuþ† P¹ z¹wPp6ßv%ÍOg„Ы-¬¼ú5±9Ôª &Ð:@· ú÷†Ö!-Ξ„Ó)p&Uð.g&“'f½  ô1ëWb•‚`Î è^.xv1L^'¿Û’ ï‘ÍeÛHφóÆè-íµiƒ•çä¹Z–G¯á™¹œr9Yµ~â+q‹ïÌôªc΄S¥Uo)þ¸ÙP!+âÛBïɰû{ñÇÇÖù€EþG?M«’£ÅYä¹ Šþîç°b<7 ž #{Âm7ÄOáÓ…e{`ç+}ä‹2×1 æm~ÊZ»ÐªŒñ§p»ÝnŽ=JíÚµ9tàÒR ¿­^ÎÈ1ã8|p¯ìæ’$Áä˜\ÊÅ€æ ü„[Ùíhö• tª «ºÀ¶óÐòWßOŒ=œOJ2V~ªôeZÖƒŸ€V¢ÿÏÒ-ðÈ{pð¹#÷Þ)lòÃШcÅ`“ãaöw¼]Ùˆ»‡T–8ã–# F™;n7[ ›?‘° û`Ëúà†×À‘«ÚAön*†=(ÊN$ñrš¨‘Ã]`\'¸èïçË¢½<]ñóWà™:Õ†yƒ¡r;·Ïm>^Úµ…ßCT$¬]÷?Õ/ÀQ"•Ö.ÓeNªÃÎEdߊû$·C’´ Ò!ë4œo î()|8êñ˜|V¤%Ÿ0[0@4´˜pãBƒ7NÌ&˜$²ÙD8­Ñb§T•pD íK¨Göò3!ÄOëo#…Mä‘NCú°Ÿ%$Òƒl GÝôØqa(üL3¤t…׿ÂB&Îy†|2ƒ½øj èÝPË ¦`p¤‚ë «âÃ!q ñR2 B¤ôBU TSv3sž0ŸQÀ³7¶æÂœÐþfÈ<}ï€ ¿ûvÞµ¨? ƒš‘p6}«¯ 뻬Ÿ»~²AÖcs®Yê­Ì}xcè¼ô!ðçDØ7éòc”0ŒV÷CÍöbÒ÷ »¼õs Í(­5l ïm •ÃkCö¹ŠÁ"ïY# yø£—&¬êÆÁÔÇáÖ›äçÍÁØwak0¿ÿÇÝ™ÇÙ\üyï¹³ïc3ÆeMö-²D„ˆ_**´£E…¤TYÒ¾i/)m*KB´‰HbúÚ²3fß—óûã|®c˜™;Ÿ»Ôy<ÞcæÞ÷çýy¿Ïûœ×û¼Ï 'æjj¶ˆû × x`Ko¸,®X ëN8áœÁ‡hÈý"8`…:%.$˜¶4v=ï EÃ&ˆ?oø™N;™cIöj‰k¬È•™ÜMIjk!>îbæÈ-€ŸöBÏKôä¶d‹ó}…Ãô[á®`µÂ¡“0þX²®üïz£59õ”þŒ| ºÂÉ¢ ^mn…F}ÁfŽI;¿½¿¾§+™{çLm 7Bçå°¶dòüœ•›C¹,‹–­X4âµn\ö|r#´¯?Ý w}oÿæº÷þç/Xú:Œ« iófHò… Û…Ä"äåiŽ”Ópâ>‡ö®?´µ¼®zB‚¡p<ŽiÂW‹øEh o¨åšv(°n>œÌ€Ô`eº,ß Ãå"Ÿ(ñGÈÃbøs[°áO- É$Œv¤ðщH;¦°™:F™é4C€útåJÂÕ³(‡TêîÕi† ˆ޳™pZ Xðe7?N' ÉÄZX°c²RD‚?éF"ù { @g)€ÐÃþa†r<ø”ªé+…~òŽ@ƒ¨SOÑOf |5~yªU‡ ÕãõçØ8ˆ5~ †úµsú-„¨|*‚ÌTxr$ºøäzËeðò5jáøåòN«Øw“óáÓ£ÚʺÁ©¤íÎ:zƒ³9åü78&åB6›âU6úÃÁTfV„ò³Õ7ù÷ ²>´ —ݬF>³ ×4ص~]»WhÚ6gh¤Ø?{Æ;ryVäÒ´çô~†vƒùcÕ(¶éxy)LY)U0¸]ÑH·çO{ÝC|så)+‹ÜbQ¶*H®%*ÊÌ K3$7³”ÀÆ&‚äÊž>² aËiè £á›c®gïvU $[,0âJõ=ŽÐ¨×ù‹á‰·!£‚ò² À;}“?ÇB‹npYOømuÅ¿[RÀ†5á óáÏ¥U°l Ý:| ë¯PŸ;SéÊ7çAóèbßÈà[6¯HýŠÍö<œ¦•øžéwµƒ·†@ÛZšË,©;¸3ÜÑÚ]¢©»ôø¢&Ê XÊ…äBøãì?x6þßop´þT‡‡µ  ß$èyTÈlX=¾}^OJ1m ª„Õ‡à8¨ 'ýà¤/ÔŠ€àd$Ûȵù‘êa¹¾ì·@m±c£°bÁŠ su-ÚœÈ1@¹ëJ§ÙG$õ°"ØR¦Ì÷Á’ØGõôªÎŸ\b€h$w-ÚX°`%àÌs ÁÎ?@¾dÚ!׆šÔÓÕ:ïWǰŽfBàßp`·úo§í+þ·0úŒ×9´¨ïñêç`Ù,È2Rr¤&ÁÞ ÜB†„fnÜ®n [ûq: FÂÜ›àçDXù«ÞSo7)*Ëϧ˜¯^ÞXu¾þ; ^; ­¬X€vÚixv,À§à»Kr!W…l*âáÔ*+ &>ý|3¾}ôlCGãÚœ5t\ÖSuJúiÕ1Þ@eù"W„–¬ƒaê-pßP3†tS_å÷VéM©3 ÙMÜA£•í7•Ïêr l-þ§™~5É}ÅÜÆ¸•4û'²ƒ~<¥ ¹s5÷€äµ#v¿¸òßmZ^¼.o¡ÿÿ~ŒyæÜ ìŠ7Z“3Sáã§aô,¸ezù Ù]WuEy°áZ½NŒl í>„Ÿ¯Á¥ùH+ à­ãS±´³RØÀkjµÛv7DÙƒ‚†»—¦ÔâvW;hY³r·’T«Üs-ôo jj€ÖYW™°q3¼±j5ƒ)“ "L-çÞ‡™OC† "+–L‚µ/ÁYÐnô]FÃSaÝÓç¦)³øCEêégƒø@u)8Y@úéBóý ŽX N|°!XðÁF …äd¤Ò ¬uèÈ vƒ ŠlÔG7€°óÝßø[®ñY VN°“:Fp^r 줃@ƒ… °`£N ĬH³g@xÄD‚_ a®Î„#¯Â±‡AJ…Á[} ÛípÍ­û—á“IZ ¼2”žªmo"Ã#àÖžê:“’ ÓgÁw+¡wkèÓ:6Ë›k{j´^­­üUÛê-çÏÅ}!Š -¾!É)pÍ I¡À¯)ÚžÚSvV™¾±Ð7 ­¶’‚mo2>Õíýʶڨ,Œl {UFU1;BQ!ìüZ[i—¹nC×I•s™»ÅÒûøiÕ1ÿ6+riÊȆ‡^†wVãw&Ãè~ÎáYëæ ½+`Ñw)P¶T“š’MñIþÜ ×ˆºýÅWÁ'ÙY€ 0 –vQ¿˜+Öºái…¤g Ôâ'ja±ò(8 øäècƒãÉU;9:È}“ýá¿4}ÐÔ°¡Œ@¹’AþfÈËpmÐÇ™µ¸züªÅ¼v΂{n®|/q4$ØB !d %œç[á¹SîË×z–éÆIßÍ2­Å0Q{ÀW¿ÀsŸÂ?¥">ªÇÂŒÇá–áêtôLœï/®Ú&¹ì*¸~>DÂ'ÍOœDqàq‰ G’‡í °& ÕŽáŸgÃõÒ°Eäa5Ü/±¼a$‚°Úh –LNH5Ò8Lqe5Õø[&' B5Ñ~6PÇè#…ƒ¤};ô¡c …hnð\@lyгRîSìG P¨Q†ÛŠÖ §øó§v‡ãá·UÐ6> fO×l&EEðöûðÈãpìøÙŸ ‚ž­0÷iñ%àVÞÊì _û²¨ºÜ ã‹À¯ˆ`² 'K†ù¤?¯•?=EMgÂÅ“ ?Ö´ æØu&øºÃxb)œ>7ׇ\/¸ý«Œ/rE¶Hé›åK*~³‡fCZDݯ±¨®¦ïºk<ØÀàËÃæA+í“ ÎÖp‰/,0Èx÷ªú$›’ZÕä àš*‚äªdЀþSƒ!§Â?=ÛýËUôõXè× F¼ ïo¼ðg>HñÕTG˜áƒäŠÍj&  cž‡}À]-5•jéôArWú ’Ó:¯«]#¸ÿ^èÆÉ±B@?Çþ=9S9(g5¤/´}SôóÓ”Š÷¥ÃKÒ çdXYœ RÖâÿÁ«_Ág<ù´¾ žŸíµ3¿l‚qÀæ ZƒB M7èÐS›Ã'öt‰,y8ŹÅÄÑG)Nm™ áÿ@Ø ȵE¯åŠŒ€>H®IvÛG¾øc1²Q`؇Ëö½.¢¬ø€‘Ì­€œ³ú;bü¼«Ä³Ïd dÅÀ©Z Ž :_G•Žíhîèjꌼuœ‰>üëOذZÛ¯ë´t´;Ö±Y]Í¡å°2—,‰^ž•ùΚµÅÇ ßìq}Ö– Ñݰ D×aY.ï¦r«œ»÷Ÿ7ÊF»1 \Ý[¡Õëj9þñ*8±Ö=Ï­hO‹^Þ õšÃ‹ã`é Þ¡ß\aœr6Fix;xo,ÛW»a~ìVH¹ümý™†ÅT”ÊÃz΀ä/²áà $x HnÔ° ¹VÍ¿>JàÍ@çArU²ƒ¶_MàãjØà§þñ=aÞPxëgõNÙŸqe4«·[“}ýàÍ][Þ| ¨«n>†âöT"zO*k8‚»Á§¾±28ךdEó§N4,±¯fø4—ä!/—lVx¢Lî¦&þ€/ÂÍ}³»Âióí‹Aqóvú;eehîß_VÃ/k!¤ô¾v1Æœ¿~ß̇ý›KÃÕç@Üà§cŸl?á§ F‘Œ‘Ã%†»E …§Iì% ­ ”ÆB©yÁW/ù™Sì%Úø®£ÏýÆçþG.VüÈNZàT5H‡ü¨Ï…ﱇÎu«¨Óz‡6CŠ#cwÿß<é{¡}whßÚvÓ¼3ë[l,ÍÛ~Ñß¹úF ¢V浿Âý­4ÿ·<µ¦®qmþïó AàùP¸ÃXÙ™êƒl ¥ä-’Ř₿ ý%È|ŠR\;< JÐ… Bñ7Œš ÇÀ¨FŸ‹ÇÉÕ†©Êf»zófÙXóW»þý;DÃÏ=aG*4sâ’éB˜Ï<* Þ´@¡üŠÔöáq<°Q¸¦¦À'A²YàåÖpg˜¸ žvÃÕÕ¥µ`ëØŸuK†øçEôó…Ói®É‹èíÖäûž¾÷éíö_¨1ÒÓ%MK“;®V†7úÃÂPð·Àº<š §,xúõ1À™2mâùç]"kA±pÅZM ͱœn4‡lÅb–d{Ú"’5“¡Ói¸$ 2 €k ÉÆ½|ùH±GDyøßÉà$ÁTcg j<é! –³Ç qÆùÅRšb´ 0ŒÝZ•ð»WaÍ pºšµ,W_ðMë`0õ²•pߨû—ëy£K}xy4qø‡œCz¼užÿöfºoÏ4õ¥áPϦé§ÀÆ|÷ÉŒrȯš/7ÐÂJ^¼\zKÖ…é+¡ACõª |³žxþÞûßµ"ŸsÖ*§o½høk$eB̸%ôË.Ð?†o€8ßOY@ùDýʃdKdXT¼M¶ÀÌ¢ªƒä*ç¢èaü»Ûâ|fd(®úÒ©šXWS‘ÀºY.jÇÂ3à«Y ·í….ã`Ô,×dÐèÚÝgºðäé°~ôiðá,H=©ÂnèX¼6^§7©Òèð©^?:Ã!d<ÔÜ Õ¾ÿ^ ™ñ2m'®„ì¯*¡ì6æCÛ$Øœ¯J÷çH-DàÒ 0¡»Vw„aª°“Óaö70î+8• µüaÙ ðÆ`¨âºñ„ ÖpY!š2îAµ|h§VÃ{Âü °î«Êdr!6šhR‘0 ÕÎu óDÂ1(X ‰“áÛVÈêpØv#Á‡N”¦#-vÖ†7ZÂäÖ0¿E4/5‚/`cµ<„@¦/†_òyä ùdúÂøµZ_$À‹`~‹jLn [ê3ÒBõ™Aitèl»Ùë[é Vꘛïeäpô›è;SÉëœÌtãùtÎO­Ö5¨–oäSºF—êš…ºŽ/j„(ï­¥ùT&Œý ®ýÖÒd®÷Ôƒ]Ýá˶šiÂÕºa€ŸîÑz6ݳm“*uñÉþJeÄÑ&*3$SeHµ/U¦„ŒWãôÖ¶«Œ n 2oãõÞAuEƒ†ª;>œ¥º¤Ï@Õ-“¦«®ñU%£…3t*U1D—qŠ)êÕTŒñÅ Åެëv¹ [-бJb.gÉ‘õ"1³8ë…³äÀ¢=̳UÍ’|qbžîuÒ’Luó²ƒ €„@õ“Ùá`:¦¼p=l;µ…@HË„©oÁ Ÿé­§;ÉSÖd‹®= 5âÕ‚þÑÛ0ó8~šw…Y«ÀÇóo…•oxŸPˆ‡îô߃À¦•S.÷/ô·À¡pƒ¿ìG2ÔÇÑLÁi‡Mah Ê8#2á‘?ᓣſ ÷‡)Ýa\°Û #f­‡ù?B¶I:&î cjT Àï{aöb8m›†Ãà`ø|žN†Eiéëm(LQ·Ü<Ü~†‰uÛ/ðæÝDw×R×.{ °——»¾‡«àkñ¥1Í2Þ#Ãj#%2!ËEg†ÀtÍ‚ˆdÉÊå·¨áXöÀ%ëεªáG=¤.¹9ðå»ðÎ|ø»Á-šÁ­·À ×iµDÐrÒŸ} ム‡Á¥êGMJ¼¸žû N˜ädà ã;ä®l‡¼Bx~L_ )%\š‡*H¾1ü ÛÐŽ4xîoxÿd›( -h ÁŒ`=d.ÊÑiêjQPb¦+†Ú¾§•²yQA¥RÔg4Œ_y0éJøc=ÄÖ€‡gÀu·¨¾9zžœ_T1ñ7[‘Ïy¾ Ɔ'FBhdåÀžMÐ"Æ~/®sýš†iü×Á,¨ý¥9}–´(;² UÖ’ü¬îŽ[ z‘¸[Ô¼¸ — ü@ÅA²o€äÄó«¯|Ðn¨­~2¯¸áJ檋aùýhõ€:°x-ŒŽ&yF¸xb7k Ó@ûËõÿ[7Á”{aË/å >o£J—duÓõ¨«1m"à¹&Ð6²¸0P¡ÀwI0æØ}ÒQðt¤¥ê9˜~ ïÿî¼i£Nux`(Œº  «ùúm0ëCøfóÙZ12BÛ-áUËâßoÙª~‹>Rð\’Zu‘B׫5°¬¨Ö oÍ…-eøjùúÃE É•Ф$\ZœÐ @›_ Äì‡È4 ²³´GV¾ž! ¬Päþåìã°€O‘bÀ _ ÐÔŠ¡ Gâ!+Úª%3ß‹ÀÁß!ñ[H\{~‚ü2|a+3•c‹EsOºº á³ráÍ0o ìw2™½ÕÃ/…i½ Á0§~žVÂÞ Ýh;ÜQî®5É?• À‹ûáP+Þ¹ãk‚¬¹x24êV–ºÝûdpy•Víaú³ÐÒ‘0å{xô>ؾõ¿k„*M5¢`þÖØäBßg`ÅN×?ûÎÿµèܸÁ¼~ÏeãÐw'”7½%qgà{ d[ô’Ñã ¹~#Uˆ9w°¢»áÅ8ÀÂOYÿŽ,‹ú7€÷úCX- f“{^ȸk#GFÄ'à¦;UÇž<OMV rÑy„õóàÚñz…voG8²¯£š ÃgšzhÓp8¸ÈÅÖgh€¼!½Ò½&;ÆoM€GBBgî¡3 àíC0adU¢Ïnõ`~_->°õŒ_^±ÜÊjRG­×wW³‰|µAÁñ†?«få|ç} B¡³VT…Æ@Ÿ;áÿ&ê³ìI ,Ùðñ,Xù ¤U¢úÎù¬éoÍ’áæ*Zë;4V°Ü¿ƒ‚ç‚Bøp­Þ$îw/ùZ`hÜ[Úü‘_Ÿ…ûà—äÊÏ}œ¾‡Ö¾.0<¾tmD²3·V 7@Û÷5ç†Áê‹ìu²·<û3„UÓªz¯>pžó‚U-Ê“Ÿ‚j±ªoÞ}žž §]”Ùʃãg ƒ‰WYzF|_¹X§ºÒÙ)~L aÌáò3Ÿ–ÆŽø ‹üKAr¨öÄh^w|aìqx1ÙÜIvÅU@YÆŒÇ:i³Xà×thÓv‡&»'‘·'7³ ¿&MƒðHá¯? ¦Cj9·©V›&…o×þÞã»xOõ¤’tѽÐb–¬^ßNot^9¹Œœ  ´ÂÓMá–xr˜ fôݰð`Õ6‡3–>³€”ƒüü`@?¸}tïªZ ǪEZNdÂ;oÁ˳á´å{] ³Þÿøy<< ì¡ ñ„…µä¢ˆñ¤†Bf$d‡B^dVÒ#8 |³ BOCxü/y>©©[!ù¤‡¼4˜ù&t¼r²aÒøöS'N½1p×D¸y$Äi.%C˜ÁÚõðÚ›ðå2M-WYrö䊛 €öp_=\| þØ” Ïþ KC~úöpPmEë‘í ëZ-=½í>Øó¬÷ÉÜ 0˜ÿÔm—iª¢r¼aÂÂá¾)pÛ½ª—RNìGáý×Ì7y[šU+$> cá×? Mˆn©'Òæ*ÿdWº´Ž‰€b|­_uÑ HÏ€d ,ûöí@öîN¼`{óµgEDÎü_,ˆXŒœD ¨Íñÿ²Ú“!ˆÔ@vÇ#r1²$îŸw¦Y-HÒ`D†! æ÷î‡,ŠÈ$¤`"2¡âkEv=‰È«ÈMíͦ3í¦¡ˆCvý„øø˜×oÇnÈšß‘c¢mñ7HÃÆ•ë#( yõd• Ó¾F¬6ҭåKÈAúŸ@¢F#1«„"$AôߘUH@«Çm¾‹$VÈŽnô?ÿg ßv ú 2@[áaCg¡M„¹ã ð¹BH\§„ÜiÂܾBx‰ñY,BŸ6ºù‚¬Ñ–¹\x~œP§ºycéÖVHÞ"ÈA2Ïn‰[„gçýû !ÁëoÔCÂöB!Q„'^l>e~îrîÉ­s IDAT“ÙˆLFd¬Ñ&"2 ‘7Y‰È:D¾7Ú:DV›¥"æÌ÷Ad6"—s_Ùc²ùèXEÇ6ꡊ½KH°¾û³st.JÏѹëÖÖ¼õ¨S]×8syñº¯›¯¼`±.Ü_y&wšòPúãÊS¾æòj|€0óádŸâ}qøJᑆB´ýüß»Ñ_÷œÄꌶzNXU•%£¢F« "*Ó¼QÖZmª V‰ê† °Ê}¿acÕE½´æwÕUfÏÇGu©SÝê:¾½bŽ]O*™ÐN1‰LRŒîgþ3[% V¬evÿKâîŽW¬ødÈ…?_w–Ä¥çîçkLüÓÏ?‰o»Õ’\ÓªVä MOjCR!Äì1¿¸YéIJS³jðÙ`hIÙ0l)¬6Œ\7µ‡wFþw­Éq ðèl Î8°OSñ,w2º·¢×jž$‹ ®Ü!—A*êú•ãN—Š ß½rÁ‚ ©3CÃE?r aÉQ¸oGåÊ%U–j„Àô^pK+µ2ŸÊ„'ÖÂixÈÅÁ]­Š™P-\­•¾mÚAÏ+ [ÍÁì ‚Øø+¬þNÛ/›Î6Ù|à±—aÈ­jY}f’ø]€îd- ¸‚ ´ _Z%‡ŠÄ öð¯ÒýÂ_õÜ?K-çŸ,„'ï:;?´V¿ëy…¶vmŒ¼×edÀºôýÝsoV+ÿɸêaزۼµ9_PæœÅ™S»CtšÄÞÞS¾…£.ôk °Áðx¸§.4 5öI|pžÛ«çM…~Ê%n»üƒ5±Iþ¬j Rè}²Ö,7¼¾ƒ4õhízúÿ/ô‰pø`ÕÆçÍVä›ß‚wøŸžu`ñ@ˆ €½É0ø3Ø~Ò¼çº2Í®8qDÙ`ÈXÙ¢Öä#Eî·$»$¿£aIü_2쯵}áÒ¿a›Éî[f$º.M×] ¯Ò šßŽÁµŸÃþÔò™Ö“dÆÆö€;Çý“! P‘ž} ^™¯7»U!oÎxÓú̓ú}à0šu5/C}ùN~‹wÒY¥oó`g,Œª ¾ÅŸ9žó÷Áܽn-}KËšêOÚ­^ øÇl0ÿsxå+H79@¡{KøâIMA¶b y\ƒÇœŒ6ÁmÓ+íÒàK ZŽ(¡$ ®ËÆ¿ç ]«nÌNšÚø cIç ©N>˜£Ò® ¯Om;úÁ'ÃUmu}®y Öš!wö‡ñƒ z!ZĤëö©ßñÖ#n<=ª)Xî[œOtí)x} ÏñŽ’ñåPµ^[aÖ¬æqÀ_+aÙpâOï§ÙÝfë,oôE¾Q®N|:.«®Á·®€L2踲`[ ?ø½.ȇ:ÁÇ0ÔÞ̂ѩîÉVw.h3¸9ò6dßwÆKu2ÿyŽÜ}«™sb›Û]OgÁvxwtzÿl€ ʤ3–ëÏôÕïyšªš7¹ï âœ”z*ï| ,˜Qu€ * Ÿ»[¾ç%Íž¦ hø"Ü» öüHœ'¾UeÓùK¨5ÌKAòKYÐ;KVô³ÃE‘¥QÛR¡çÏP}<íf€ °ý(¬ÿ w£¥eÒ€àÿ'D§B¸¯¹Ïr9,Ÿ©lÑøèÙÙüŸ{Bd  ϽîT0yõUZÀdã:¸¥ $¤Ãéõpe+¸ë6èÝ.j •Ë |²x±ÃcˆE±W(š®øràÿÎÓ.šŸµ‚ÿùž Ûí:†Þ=uLW¶Ò1&¤ë˜7®Ów¸ú*}§?wê;ªïܹ§ÎÁ?Ÿ{’ÎÊÕ¹[´FçrùL[3)ÜWyÀÿOå Ò”G wÃ÷?(︓X}l‚FkÕŠœ^Ý}áÃPèç‡%­z'{-@®5Le•=XeWâ•e û¨lø¢Ê:OSó®*ûAur²UGu¾DuV@`qîþ¾NèAwçE®&y¤¯þ2ðE$(ZÿnñA.{Yýú†!—<Š`ñ.¿>{{$Ø$XBÕWRb…¯#…›çÆÖ8Døõrú¿0¿©ðM…ïoW_SyJÈ›&,ºNhWõçÝ~µPð­úº.s¶ŸkeZÍÂM7;Ö r¼ Ý­ MØÿ?aí aáKÂ䇄aC…¶­…9ïJ§GD^Ed‰ŠYQ¹¬öñÙÏé4E„9ïj_Æjß _ÒgíÿŸ>ûBc“ãú7Ý ïäÌ\X,:—²Fçöö««¾N­ãtÍó¦óÁ÷·+oÌoª¼"”w‡xŽlÂágöS°„JM±IôÄ–àeþ½•MCŠTV]ö²Ê.PY6ðE•m3Ee]—Töyb¬5¨Ì_%ª\õœªÄÑx»/²O9ñ0c[)v‘IŠeªU!N+Ò®˜*k¨b,³ßëK#VmD ôgB;®ˆt¿O²Û@r?}É”X$ªÄÄÆû脤6Dl.`¤ïº«ƒù'ƒ[UGÜ­ÌutÒ9Þ|vG«Ì& G¦ÎEå«0Ù™„Ür·¹¸ h£ª­aäþDU3¹‰9½è~äÚU@mßC¬~^ôŒT[yvÀNµUˆå± !Ý,J& vwY„ë ÙW+ØÙ×SèU1 4¨‰~¿²Ï|äÆâ`°Gn¬ú;´½XAaÁ·Â•í«T]Ø.Яl_<þ¶W}>ª:¿V‹®mEH]£”gd€òЃõã g›Ý3%öå‘ }©•®{­V:: ±Ø½@ø©L"*£.º¿ìÏÅ4Vçw÷'ª tçXݼí㣺lg’ê¶CùªëÂÂ=ïô{8aˆë¯F&)¦iUݹgˆSLõ]w©P,(+6tü>ʪØQj(–üÏd+È–h}Á‰Áç¾àîz:)mýÍŸôiÍtAŸ¾´òßÕÉ~P™ê§HÍ`×2±§­ÉV+rý(dû1 G ‘Y/"‘Ñÿ]¡YeQ£?rMº*£n? ~Ñž[ÛЉH­\‹Z’ííKYÁ–„[•wF ½ì®[Ý@a]§âl¯µB|ÎÿùZaÂì>BòcÅàiïƒÂ¸B°Ý3–N»ø¦ö9ûör•]¸¨Ð»§p×mœ§„O ;6 rÚ0|Zûút‘ö}×mú¬‹è³/4¶Ù·ë;$¾©ïä K}°]×rïƒÅë›ü˜®y­° dßðQÞqðѺNÊ[®æß^vÝ+Ž}³$ì¬Û[½¤xßÕØ‰ø÷òœð‹VY4DT6Õèo®qà¿b‰ŒVÝv¤PuÝöcªû¬Öÿžù,«}°b™¤ØfTóÊ?ûéKSMkfþ{µõ7²ZÔ;÷oƒCn‰VLùŸÉ#ôåÄ þe\M¿R]'fR”ù“Þ»º.èÏ=+q]mC^êmä^š¤?ÛmîcdOX“[µGVl,¾Šúb=Ò¬åûúÍŒkÇðK‘~ÿ¨Rê³ ¹Ø3®%]+W³³JßÌë^n¯-¤õUPsäJ¡_lÅ¿ï ˜òõ>˜¬ -g¥0ärsÞÅ pÙó2íã‡Èl–ÉwFú·%çißéàf³LûøaöÑó2׃ýж!—ë\Ë{_×~­_¬ò’ PÞº½¶kÜ*y¨ôï¥Ù±=á‚r±Ê !¢2)¼†¡òÜÌþ«îuÍZª®sè½Uþ׬Èf⛟{*¦ê]Ýüw›¥Xð•2úö·(†”Š)ÿ3 ùB/æh×…êĬ¬åÁáƒ\‡äþhsÏIëßdMŽ­,x9Z¤Bbë?Ƞ닇ýl›wE–çªí3Ú½~Ç•m5‘›U9 8ÄôðkÅJý½3×Ǧº`Ôð¾nWlõ[ÜJˆt2§mE¯åý„å3¬¥}%toiλ”t³¨Š›Â=ƒtl¯Þ¯Š Y_Â÷xýyý’‹ÄŽ‘SúÕûµ{yþ}J¶î-uÎe®A ŸëÜh@yiq«bþúºòœ‹\+*º7,vu¹ð„ FL•=CDeQ@MÏ*ÒúŒVپܦkxùkº¦Î–;¯ÑJœá3¡úàßËuò î­*sì*ƒÖwU™ä ežRYøl •þá*+ïù]e§äŠLUË\ :Ï‘±)?Ouâ;UGþ›2ZT†ÞüC1ÎÁ4Å<[F*ºµR,µ-E±•™d·(–Ed+–L°)¶t¹¶EYáaãE&¤Ÿ?ÛÔ‰BHÌÕ*¹mýÍÇH7¶¬½ªÁÚÐúmØrÌPºIs6Œ…Úz~“À{8ã •K¡kS˜523ðZù†ñ±Ã£K´ðˆ³ÓF®ÐÓXóƒ¾u•63r…dÂ/C`×°úB«×¡ÙÓ`1q‡ÙÛCÜ?> ,vUÊ)“àp-Ès&÷ÁBš W&îhä«"`I˜J¡ÊP¤/,n¶‚H;,;M×ÁâÃæMÀæÃpÃGP.<ý=¤ä@—:ðî`èP™‰ðÌËpâ¸9Ï{âh\þ<Sß®Z_kë¿W5z’Î@âê%>ZἦqCñßuôå,M}[ûj\[ßÑ :q\ç>3Q×âÝÁº6)9ºVõçêÚm6‘V[v\yîÃVʃ‘•L#˜`Sž_¡{`W©ºG*I…áÔP8q%äïßF³ ¢—€-Á¼×·XUÆ´z]eή9*ƒ 2MXÎRò±´üt–j6PYîcWÙîM9ñ33Tvmª:14Du$¨ÎôtáP Ñ0V1Å¢MUïoË1Å:kØçÅBç5$V;S™Imý&æ*&,Ófb`IPlåãK1%¬°2Ö”S(Äù’»”’ý}à«áù^àk…y› ÷GpÒ¤´—ÞdM¶Z`Âõðè ìy°g%ŒïÅ+éõ °q™Vä›ú…Uîû¥óç¤Àòá¹KÕRbªE¢¶O€-·AQ>4zÚ>Uäik0T[ Õ[¼âªìoàp¤Í6aàßæAó$x82†øCbL Ò2oåQ¿XØq\§æ…;¶Aÿp4Ç5LñO*L\ Ï…§lÊ€§ºÃÁ‰°k<¼4®m ‘NHì‹á¡PX#Ÿ†œ*V#,eIµ&ofÍ€œŒæDv€æÍ¬)¶"—ünU,É ï2òi}·†ê»V–"tn_¨s}p¢Î}P†®ɺ6ÏÕµú'Õ5¼p4GyíŽmÊ{×Å)/ö‹­À©åñÄ(åù Ñ=Ð Z¬ƒ×œí3à ²[aÑ¥P; ön…¯À½_×ÿƒÔh wµƒOn€“S`ó˜Õz5€Àr,fºYÔˆ„ˆHN‡£§ÏúÓdb5&+‚ârÕÁÆß΄§µˆí³*TY·‹@_»Y½u.ONѹ½«ÎujŽÎý½_ëZìýM×fÑ¥ºV®$Ay®Å:åÁþÊ“¯µP-‹ªèZQ᡹À# ¦Ê”¸A*c~¼JeŽ«¨0_eæÜ‹T†‚ÊÔ÷¨ŒµUÀpoµ©ì®ÛLeù¬U¶{+=ñêÆäÕ•¾6Õk¨.õ™mE.mÌ{p­b Œ<ÅD? WŒtF§ZC•ÄT¦‚äÀ³±à…hBšbË»kºš\¸÷q„:X¿QÁ´.6¤ðb$§à‚ ±Ýý4"ó²ýÏ:È©{Õi}ÏH³jÿg{gÚõ=äetä3¤w[c.G #EG‘!W{Y2ü*d¼ðTJ#LŒ6¯tÖ 7§¾òhîZ›EXÚVŸ}èJ¡AÐÙ÷± ík \!¬½UÈy²8hLžÒÿ¯½UÿÞ¾–~Þ•©ÒJe¶(Ýv’$ÇÙm´cˆì$©ì¾ªšá¢¢Ù.ª:‡ ‚tmd€®•ÍM¼Q^NnO¥B4) †§³éàdÊLoÈdQÑ6äjÕ‰‡UG‚êÌ#Ÿ©M^¦:•QF‹Ê´fÕÉ$ÅH=ëèï/‹P µ»ŸùÏ °(ö+¼X±`E¾óF˜bÌ#þ¥Ù-Šj ™Õ‘š•„[êhdc@óáͶºÀ÷5D&´C &*,Š„ûý·˜ÜÑ‚5Bç×#ŸMG¢KZî»]µræßHóÆÞ-¼ÊËxá Éñ©bÞÒ*e­pC¦ {® šáÝ–úì¤>B³Ðò¿è+ôj Ìê-l#Î8ð¥<&,!ÜÓQÖÞüì¥2[”nݸRŽàØÑºÓ»ì¾ÌÈpq¾lÃÚë,¡sRrŽ gèÜÍê­sXl%ÍB…S}t­ÞméÞÊ”¥«;.h¬¼ëÉ¢:UÌ‚áMyÙ+cŒð¦Låê˜Æª å˜êÆ’‹SêЧ<ª:–QF‹ ÆüÉ$ÅJÚ)v’aŠ¥Ì~^@Å~[êTÂpfUŒYTõ Ùe•°-À¼L8R ×…µYp™¿ú¦¬É2wp2É;¯À/Æ/Ôèè#{õwAÑÐó h{;X}Ôwnítøù9׺UT„rOÁ÷=¡õBH?‡?‚=Ï”íZöd±¿bá!89ÔÉ <3]0åÀ¼`õÛœäCÑ1˜ Sö@S¡,h #jAf!ôÝÛ+àË••ßîÕÆ7êO{E}èa´†Ñ0àmlÕ€³ù]áèep4NdÀá4ý÷h:Ë€ãê×[•á\’Ö±êïµ|Sv_•õK¶Y!6ªCˆ †¸Pý·Fˆ¶ô î8û»»OÁš¿´}÷œÎ®ÜZmOƒ~aMG]³ä|¸w‡{øäÏtèðL»&„Á½y€áôøI<áTPž™.™‹ bžú*‡Ï„ [ yœú2—¦‹î‡æsÀbƒƒïÃæ[¡(׳²m÷Jøk t¼ºOQå=aÓk°zªfÊð¶L¢jQªàíT7–¤S©0x Œî ÆÁ =¡s3¸é)Xÿ»ëÆå*_ä QJ.ôÿë¤möpè¯b,eº«EPÅ]-t¤H1æ£.öKvH>Qs+é3¹6Œ„n.ðKþÝpŒ÷W÷¹_ÃWnV[´I™Ýá›ü® ÀÝ¦Ý ^V+üò' Ÿ] %ÐÂÅ  }+øøuè}äå{§ [ùÔn ׎×(é÷Þ€–wjª¢¢õ™sho¡¢\Øt¤ï†&O@‹ùÒ¶Ž)ЬÕ–Ay†M}̤ <3è`!¾SS ëšMVµ²¬ip·@@0<Ÿ{Ý8o÷Ôƒ¼"°6&;×Ïéløt‡6€ZaгÜÚ :Ö‚!Ü:•“E¢H4ŸÈ, Óõ_¸nf¤4(‘Ù¢4¥‘L(¤rúàÏè£Y4Š>ìV)„ƒôç EéðóQX¸Vï5'Ønc²®ÕŠöºvÉùðø.×óJŒ „‘)`Õ÷$‡À“Ù¤NÍ#ÿ ç·•# †/ˆx¾8 FÖ'ü€þÝâ-Ÿ‡zwêé)ñ1øßt\ïó_Ñw0ü•{§ØPÑþn¸ôØú Œí™,ÎÑ›¾ªûêÔ‚_¶¨N<½± Öm…÷…öaí30÷#xt!ä¹ †+}‘Ëoÿ¨0Þ»Z±ùÅXÊLr`¾µ•ÌÌ27î„΃5-ó÷ßS¯^=öîN¼à¾_·š‘·ÝÃ_{4oVýFM´#cÓŠñ²c€—*i ±Âé‹ôçÈ=nÒ‰)Ð Ë›C×:€?LN„™Û=³oj¯ÖäÝÇ¡Éãæž ×÷§@Ë‹  ¦¿ 3ÞÓŸË£±°i%Ä׀߂±{¯@³Ú`ÞZhr¹:v¬„e˜“ÎÍ•Tk´~ lþpb ì|»;v"d¯‚¤!&åU‘ü:Bµ¯À ¹?À‰WýQÐÝ0yËrá¹,X“ç~o=µ" \û+,=fnÿ>H¼Ã;`}š‰Ô“'´ ù®¡ðjSØM¾3ÿv``uø´FÿÜ·žÝçmÖÃ÷B?¿â°ôµyXÞÌ"æŽ\üº@Ñi8Ùröže²Ø!d<„=¢Á}’™ó I'ˆí …9°y$ü³Ø»Ù-¦1ô›Mû@$~t÷î@½f˜‘pè¨Þ¦­@I<2¦Ü¤?oÝçßûMKVH|\AòÍo¹Æ°Vz¸<ÕÈõû¡ïev©*î»;^tì#sŠ!–-ÂL[»ž÷|ݰ "ÂÏ~¦SÇNæZ’ã1N¸X—]ùï§Á¦è`… ùmø°1t ‡Óé·×y‰jr7¹Âšl±ÀÝ×Àœ» Àö†ÓÕŠ\Q:z®ë>Wa±-^ß;Ú £`@M™Pû4¼<Ùû2¨’Ë:]–ALðާ=íZq Ñ‹ÁYŸCÒ 9¹ðA.4÷Q@r£?ô÷Ó¶£@Áòû9mк©<ÓTe˨ßÍÈ7Ä+@Þoþ­ qW9×qeˆ…ÚÁ€¯É·p(íl°ë¬KÈ_Ið@ƒâáÝÌîÒcºvo·ÔµLÎ7ïØÔPi9ä(/þQ€'>…¨E8bVéaý¥wì³Ò.5†ÀÅSdæ'Áý!iƒ÷˷“¡_[„HTVoï¿îc¾m¸ê¼ìÕG+˜f½ žx¾ÙïƩͯÁ„WàÅÏÍ)Èå)+rI²[3b¨®áŠ©'ªÍ¢ªÔ9@m?g;g]— (öŒ¹bš¸×ß‚H€:PßædÉÂÕÔ{NŒ9á/5D¤’Ô iŒì¸JÏïô`„­™NøÕ#‘O¼þà|#Œ²Õ¹‘.í¼+¨"$yy‘–=&Èsï!óÖkPÈÒt¤uï q´ŽãÇ ‘;Eƒp†Ò~ ˜à]ã ¾I(Ðà¢È—Îum W+Îp²š03Xˆ·Vm« Fà½õ\ó®>aWw}ÆMµÌí»OŒö»®Ó9‹—Õ«W‹ˆHQQ‘¼ð ò /HQQ‘ˆˆ¬^½ZâããÏís]'í³OŒ¹c½©–ö»«»Î‰+æúÞzúŒ‚þº¶Ué+Þª§ee€ê^‡^ñ´êfþeÁþeµ;(fÚq•b¨¤NŠ©^jhNÿsbóÍp2ÃØm>Fà^€bP¼¹,uK gÊêuu²g‡OŠù’'׆»jBV!ôÝÛ2`ªá†8¥ ø»!¿Þù¬ÉfäM¾¦ lú´Ó ‚ASà¶9¨ç,½·æ½ v;|ú&Ôª‰WPóVðÍft=d¤Ã˜ápÏ˜Ø Ö¼¯®±Ó¾‚¾·y·¥eÈÛÐÿ9ð³BÔIØ= 2 ~\™&Õîùq†=‘¯6H §ïBS–E§Š`F&Ô9 7¦Â¦|ˆ¶§uŸ IDATj¡†}Õ`q´wÂ’Ú=>n­×AOìrÍ}i+ò"“íÍŒò ¥ Ìï¿ÿN=8qâW_}5cÇŽeìØ±\}õÕœ8q‚=zðûï¿3xðà³ûtôåèÛ4ÁtHçÀaMv=»O×Òfѵí]ù>Úû*Oí«¦<mUž»1UypF¦òdYT¨¼œ:Uy;òuåuO“Õ®{ÿÊD•ð¿Ç!w%„GÀèo¡õhï–m}oS¬2yb/•Ñc†«Ìt½Êðæ­¼c¼µjªŽ³ÛUç½·Äù¾2²U÷š¢º¸O;ÕÍ×tùw[‘ýmŠ•@±Ó¶ ÅRY…Š­&×®ú3º;éì 3X³ÈÀ ÞlIþ̆ˆ]Qý'­™ÎäË+«ÝUSO;]‘%RåX@~ëm¤ƒkôï´&»âÔZ²ÙlÈÊõtýÛ·H`€çæÉbAFCæ¨5bõV¤ÞEç~æ–éj½X%ú³Åâ] ;2nsqº¤q›õweYzïDb{yh¬fYÚÚû ‹Ã„¼Øb+߯HáÁ·ßo!dôS«ã³M]÷¾®´"S"]ÝíµuïËÂ… ÅAË–-“ØØØs¾+Ë–-;ó¹… Jpp°þýöÚÅiÕ̯;¬É k*tÛE”ÿy_”w6FóS^¬òX{_×Þ”¸¸ÅöÒ=_Ö­’Õ†ô›W,7úÍÓßy“l«ˆü­w‘Êîc¢²|ô8ÏÊèÀÕmrLuÍÄ95ãv×[¬È÷5R¬ô[oÅNŽßˆVl%Ýk9Û¿õ1Þ bW j¶%ÙT¼Ï_$Ùt]'_z]‚šß¯ qîûå-àÕ5uá]ƒùx49¹ Ú7Fö,ÒÍ—µ ;Ø5Â&,Ù³A…ÈâW=#ÐÂ"·>/¾®{êyÄ~œÖ}oCVä« žø^1õt C¦œ(VtCÞ®¼²t‹²óG¢?3r·f!Lè×™+qwæ×u5(ÜÚUûï!mÛ¶•={öˆˆHVV–Œ3F,ËÀ‡EÆŒ#YYY""²gÏiÛ¶­Ð!BûÜÚõßwh¨l¾kWºò <^+Ë(ìñ™îO¹V\èpÜz42=WåÇ-Ë¿Pï9üO|OeîŠ|•Áçû¬ÝOe¸Cž¿õ¹ÊxO€úůªnÛ³Au+ž1fêhY¯:»}c÷ÑÌjA>Š‘d˜b¦Š"+Ó® Q¬·ÎI=W×¢X39@±ç>/Éè 3|‘¥~:𛜠EëÄ=[ùï¶ E2»èâM®}þÏm襋?ñ’‡5ÙdžL½É_«›î·…Hã:®ß%!)F °É÷ºwnZµG¶Paº+é;¨ò>qsÖ"ÁážU"õº"ÓrT¹=U¨þÈú¼ÕŽ4šT\4àštý¿ÕÅ€ßÄ~¯`!> ñëhò3,ÂmÂöUü²c„…¡BsÏTjs5 ô±9W Ed´ɒŸŸ/""[·n•ÆW¸ŸÆËÖ­[ED$??_&L›, о]ìÝeM¾PåÄæ>ÊÙ1Åü²=Jy(ÀÜ1ùuTžOÝV7g÷xÝË‘)'U–Ü·‰¬çᘅp•±• é;Heú1QßÊÍ–ÒÉ÷ªNKÙ­:ΕÏj\Guµ¬WÝ=õÕåÿ+òÄK#m¸À­æäÚŠµ2»(öªì3ž‹U¬÷˜“ û&Ãy©ŸbOñ5°¨7‚ä+,:À >Èxcào8©Ø;èÄm¯[ÉrŠAw*ï« 4 õõnkrýšÈ†—u£~‡Ì¾±»É~u/-ÏYpXvÇ)ìDäP¾ ÑeZ•< 4h‰,>¢ÂûõHŒ‡â:ŽS`› '@p,Z ÍGº¶üåùhæsðÑR …/ßÕͦNWÀÚmÐíJH: 7öƒi!ßÉÊ'ÂýaÛwYæ}­û¸~®|ì0n3´ºYÿd ÌŠ‡´ÃÎõwü[ø¶9lØü,~!ö°ÕÒ"!Ç/‡ÂÃnd¬½…po:ÄŸ$hs:äÙ™s‚`k$ÅÀ×ášÅ £/˜µO]˜Ñ",,Œ>ø€nãúà»3›æÍ›³fÍš*÷½fÍš7oŽïNMaÓm\>øàÂÂÂLL.ÈtaG×pR®iRŒ®ñœ ]s² — ÍÊÜ›îžJŽÖ=kì‰ØtT…ÊÊZ±ýaÝÓÇ¿u®ÏÜ4xwü8lv¸v¡ð°º![Së>*K#k¨l½¿³ÊZg(?_eüýTæw»Ru@§+ÌwIÝõÑRÕiî¦õ¿«_´Zuú ªã£Kl]oÈhiWLT#]p߈b®õ)ŠÁ–7WLV]¤ï‡lÅ|•¥šŘiæÜ*gcQ3ÉKòvÃÔÝÆ@ïË ¿äë´MŠR3ü+ÕË9¡[‘u—ê)æ6HX%ݾé¦'¦§š{5¹w[äÈgzâL^†\ßà òwº(ØfCz9\ Ö„ϾCj˜hͬL`I•¯¨* ç Ö(O, r‹,˜‰øô³ £„·C…}Ñ%,ÌFËŠÖEO ½ìBÅ«¬È]ºt‘ýû÷‹ˆHßüÇõ×Å™?o×Å 2@úæ?.""û÷ï—.]ºx—59È¢kôD°®YV̹ë¹/Z×zt€øô³I­Lå… [<˜­Á¤Vwâº3 Ï•Ñ5âTöÕ=a®Žñ–lMŽv}Õí²^u}ï¶ÞcE~ª¹b¢oºU2ÐÞG1˜tSLXŽ«È+ÕãMŠrrmŠ1—–ë6†Ëïv/u·È÷Õæï¹¾ú/;¹‘Úúëî®g¾™¿dk¥ ‘1‰ñP(¹9V=Š­ÓÍóݳHB¬ç7ô?²šÈ‰D6s§z·`ÄÍ)â* çI¿FoI}åp÷¸ 0гjꯗB5p«¨ÈÊ7RËÍ ø QV¸øúúÊŒ3¤  @DD6nÜ(¾ÿ\å:¿aÃßÙ÷Ÿ«dãÆ""RPP 3fÌ___sžQÙÃD”U×`^ˆ®I~©µ*2‚ï^ Õ5³^ðÀäRßx¦BtwJGWô¹+Ŧ« &s§ªÎ:‘¨:Ì[ôiB¬êxY¯:Õ£ž÷EŽñW,$ÃUöû•q{Ý]O1^['q׈?ò$Ã%ÓŸbê• Ùà/ÐÁðKNtrl © uã}Ìw/Ù¾ì¢L1¿¥ç6̘ÿgïÝã{®ÿÿÿëëµ×Λ Û #ÙÐÐ49åCZr¬Iʱ(õvVŽE$¢9‹B…B´BHJh…09Ìaa˜™Ùl¯Çïûëe3;¼¶½ž¯×sŸß÷~¹<.Û^{¾žÏÇóñ¸nÏûó~x\D-C¥nC eÔY­_ìØ¡¨ÅӨ×DþyÕ¨¹ös×ÊR”½ÂŽÂfÈûµ~%¿;“— ^¨²Gd.¥?·ñ{Ebx‘«V­ª~ûí·»@u„ ÊTÒCÛ Y*g˜Jz¨ &Üè¿ýö›ªZµªöÞd-`^¨¨„7 ^Îåтȋ³*Ó aBŸ#ßÄÝåo.6!^‰hñtáÏ¥ç² 6~ø bóÕrÁ¯;±»âôHÁBšþ¶P1 ¶K¬*X¯0×9ì!ó±,ֈ݂äeY  F &p4Pžý¨` ¯Ùç|y5u[RV°Ý Bv ~Î-ÄÖZeM· ¹y6À3Ö—üI!•g-wYÈÓ¡¶-|QFõ¨Œ.¨ÔçQx; […¢iUTê§"4½éW°Ý\QÛ׊Ú»IþFÇäíi´NгgÆCwiØ$DïÈZfl —rÙã§ÜT©@sãb â·RŠ5þŠ}ƒ½< \U“.MUÜù8¥”Rׯ_Wݺu»ÿº³;,L»{&טõð}ÿëÖ­›º~ýºRJ©¸óqªI—¦Ò¾¹“‡ÜËǾro¿•’{µaMÜT)å²ÇO1ÐKÛò|z‹O¶zj³4 Þ%²åŒÐ ­úôRgÞ: ÚXÊÍUl’Šåæª_;Ú»‘ØúÔOÅöç„ 1¼ûdt,d¯óææÐ<*Ø®–{áÎû‰%yl¶½µöë°'H¶¡P‡ít([Ÿ3Wx¼…æþJ…„ xÀ*»B '¬ Œ:s/ØoîGnÀŠ3нŒ®}×¶ÌJ lï5àðh¾.ß‚ÇaÀ XØætƒØËò™Þ(í<ß~û< ó¦AÏ·î?ÎÍÆOƒ^oÈß[ÖÁÿzAâ5çÎßZ"nÜZ¨Õ\ÊMè û¿Ïû{•›BÏ­`re†ïþ¿ÌÒÇž˜ÓàØ·">’’S5ÇBpõ:n ©ûœ;Gƒ¬–ŸÉË y©ÆÌ¥Ã¡tJ·àêh7×»@%¨`„¨à•,¿—7B°eÔ½ÿ”»ø‡P£ôí’\=v™ÔV)PÃÎe@œNg@¤¥vå_7´»7ë¹#½¡¦éžûYQakŽ=D©ˆ@Ê]#mÕ T­à¼Yîá´â2”š¨¸—ÄïÉKÁ£9x÷ž‰¯ê–óx7õ¸Új|%C‰Æòù¹Õ3nÕ~Þ¿NÀ‹k Zkèÿ‹”»úoÞß«Ó Æ|ž>RâíÝçàæuçÞË¿B‹GàãÅðô3°x-,ž ã‡BZêýÇÏ›&6étœØ¨´;è’šVbó­v¾ùŠLl°½[&6Ð’FW7#|qZ°½hî(é ï?(Ø­ÅŸp9E0]B†`¼ÂSþœ‘7µ‹Í² fN:EåÊ•‰=~8Ï/ü¼#šž}ßää‰#„V«À)¨œ~ï±Àu/pJ§ÀõBÜÀ7å¡“/Œ¿o†A)WYøÇ08ÚF~ß±7 ³ÒGapK¸œ ?„ØKúôˆê°wxy ±ðñü,€² Ìÿj>"ÊìÝa¢Ü”ÒÏüMn0d<Ñ2ÒaÖØ¼ çc„¶ƒÁé©°ä)øw§>÷ÅÅ ^ÚnÀUËgé7áÌrˆIG3¯ÒŸ è¹sÔ± Çµ:”ýT2œ¯æ¼ ¿È]4W4R:2ˆGÚ=Ê ¿›Äqxt*¹P0AT %}8´ñ^‚³P|6âÍ`ÎcIü¡|¼ábM¸sÄqUÁûÁ5\ª^vÎúù†CØ@xà%0ùÈg%;‡`y}ÈHÓç¾—ª =6@™|¾ì§~ÎùØÖ}aàp1Á_ÀG½!]G÷e0ˆ³eÜTq¾ü}ú=ÿžÈ<æý`Æ{p+k1Gô¹/aAðËpô…éÑ0䛂c„â„{æT…þåàê˜ ãKÂê$è\ˆºüþHð„;€ÿ-¸íÿÿšàA x6(îbÚìØ5×õ¨Z¥¿ìý…F a·f"9!øÛÀïf±9 y¥Æ^Fò†+0ð„6Ì{–þ &Œ«é<€ 0| lúK„híkàç©Oa9/à;m´|\>ïø"lûCò¿' m#X4K_Ä|ØV¼/Æáóᕉ¢³R§¥Ðn¦ääË05T¿à™¹Píüö’Æ&oíO†&Û l;¹G‘÷+Õ-¸Òɱ^AŸ×Å%psY>,^0ïw0¬IåõÔžÄu“èÂ{è ƒØŽE³Ä–ü{Bl˶?Äր؞iã丗ê ûyŠMô?|ÍýÇ\¾%Øàð•Lr —6óWS0ÏÒµs >>jáÂ…wïgÓ¦MªL™2ÚÊfYK£¿c÷БñÉ®þ"­b3åä™$‘ßð,‰ÈõEÆ&+‘9=ë„ÜúœQâÍ÷„Ø«Y²JlŠ[¤×y»Å–«ybÛý<í‹Ðq.–—Q0œª)˜®f!íèT ¦œ˜ ¦«×¶ÔsAï?[<M Ù2³¶ âWO‡gá–Æš3ɰà$ 0þaÇ{³Rb <÷™„\´y>ì¨_Ÿ©°õ'(éÝ¢àÎMÚúwƒ¤ ڼƴƒ”›~1u;Œ>å•ÿÿñ9̪£?KVzäEˆšæ XùÄe‰AN: À¦ Cyó$ø„Jür›8ˆœ#¯•íî‘strvv/0øÀím¶‡ ´mÛ–˜˜Z·nMBB;v¤OŸ>ܼ™¿«ÅTÙò–"ÖoBbï½f^tóæMúôéCÇŽIHH uëÖÄÄÄжm[›®u爬¡ÁGÖÔ‘”¼Tx'+/Ù›|ÃEÚĉLø„ŠŒÄ ™98àÞ0¥¸}"cæ ‘¹G^Ô¯^0gÀ¦!°¦„†4 }¶À”hÑu)7E÷åj¦7Jº!¶eh?±5Ý¢ÄölýIl‘^éÃŽbË/'‰mOLÉûx­=Ê㬳à¤`-é–Y0é‚éjZ±äÏæ‚aÑÂ’æ ù— Y“GàSÀsš€Q>–EûËk­iÒHÉ€Nà‘’ÎÈVнçCZºÄ(÷n¤Oá¯Õ=€ëà–qp|?ÅŽöC‡—¡FC¨~ 6¾ «_Ñ÷Ü+5†N‹åõéwoÁÑ ¹€ëp|:l­ {ÚkŠQj®Ä”Þ9 Wû;xQŒàk¹f’ ¯Å½¼¼˜3g6l ((ˆèèh"""X»v­ízË ’ÿuHþ×vl¥µk×Att4AAAlذ9sæàå•¿õµ®¡o{ZÛèjá!×pá)»<ÀåR±§½ÈÈñé"39ÑÑ "kƒÈ^¥Æ:×o‹`Ñ“àvž|n×ÿ—_Ò²éø~±5nib{ª{ˆ-Ò#õn$6<-]lº­yFZåGJ ÆIÉÌ£5™ ‚áDq ¶+hå –L·`Ëb’­E r ™½ üa–ÅhXÀ'‡nžPÕ'RàDTuƒn%´ßÌ )ðY¬d5¾WÄØd{à[+^€dÃ6­ª/á´ìž JÃo»`ûn(;¾…ŽmŠŸâ%"ý¤@ ÌÏ>a‘úré0è¾Vö~ {?Íÿ;Ê 7®(ØZNÎ…ôd(ó$4ÚO‡ªƒÁÕ¿ðórf2€g;0…‰Ç5ecÞÇFFF²ÿ~ú÷ïOZZC† !**Š  VFÇæV@wáQQQ 2„´´4ú÷ïÏþýû‰ŒÌ›ÉS6ÊZšÂdmIöŒOvõÞ~ê¸ðz™'…÷OÎYØ%²¡lxs¹÷S‘97‘ÁÒaúÕT‡>oÃÃ%ÀÑqA‰pí\ñSÓÛˆ (%6ç·]bƒvÏ›¤'Ê­’…­¤P~¯¦`œÏbóhMÝJ†;‘&˜®ªI0^A¨¡‹`É?Ì‚-sÔùÙ°©ÓAòËÏ&y³Ë‚ø R ˜ä÷Q¥ãMþà($§C»òP¿´ó²•í‘,X7|ÓO²cõ@-jÃö!Ð¶ìƒæ!ª+,ü<=àë0l@ñQ¼aÁO‡ÀÛ SaÕ{xj5ƒO÷ÃàEPª¬¾æì=·ÈÏ£`ãÀ‚ŸC‹P ×êPÊÖ¯¾î¸ŠYé/r.€Çh42tèPöîÝKxx8GŽ¡~ýúLŸ>UˆLÓ»žä“É'ï½f@§RLŸ>úõësäÈÂÃÃÙ»w/C‡ÅhÌEY›³y“LwŽ/ð–kõòCC*l¥Eö²Ê¢žÈ/~ óÿ‚º­¤¬Ûã!ùB™LúN {uö¶$‚œ½-ciÏÚoZfRßú$T·QúHàsqC øU’qüŠrµSb‡Áˆ*ÛÕdª“Ù’Àd–¿Ë¶“ÿ£óÖ¶$š…„„¨èèh¥”Rf³YÍž=[yzzéºåÏÉ}›ÐþMȵʟ+bG9OO5{öle6›•RJEGG«»&BÚs¤¥yQyÙf~óºW]t Ln¨NCPk¯e&ç üåÙþyçߢóvþ-ëYG›LbKT¼Ø–a²íIl‘Ú)¶©S3çÎW‹ä{{`‹­ÍÛLŠpÌ:ô°´¡>VY°œ Ávª¬`=[ϳËC°dÛ<-±$í½‰N:îEZ@rl Ù߀ÊðBÝöByØ"¹,`ö…ÖzcK¹¡®wfjè\€¬¥Ðfôk‡Jß.Êèã¹·—îØuë´(µ­«P~%Š@Î:Ê…¡Æ­c³M¡¾8ƒjþ‚çm@uùBŒòÈ8”_ˆF™ä…¨ŠQ£Õ(ù©Ì¡ä§¹<äuꤔRJÅÇǫ֭[ýáÂÓÌSѼ#–Ž‚Råš;<4·nÝZÅÇÇ+¥”JHHP:u*ÔÚj=ly³µJ…]AQˆÈâd%²‰Áyú¡Ñ³¨¥'2õÕû[PäðPS\€²_ ±!*^lJÇ6¹·³þx Ø¦ôíb«œâÀÐЩUŒÑ$P0ÍõŽ‚q4°ÉÅÁ™Ýšßy< ™á%˜2·ãb- 9R/ ÙT¢eReó¸Áƒ–'€f6€ºÜÏÞäq5…¡v´p>@¾ è‚P—¦‰ð}ÔÙñÂ?ê%Q@j§üžßñõ"QcD¹ý½õ@HñÈYG­f¨92Ï'{QáNh³ýÔd1Æã®£‚v€gÖF;€Õœ IDATС‡vÂyy;}}}ÕâÅ‹ï–BÛ¸q£ ²ÏÕ”{/wÌq÷Zî˜\Óµ¦Z¶©7Þ]ŸÅ‹+___Ý”ƒ#Ÿ²‚Î,u"‹ã®‹l>5Ù ú,5u{¦~ZpU§U>žyåBÄv¨x±%õ"ío§ì=>ê,6úÒ4±Ùö>a±ÆŽ‚iÆÕtÌ:äæÜ,¨7¹™Q0äÁ<"ÊZœ¶‰”‹^@2 ¶X@òó…èµm«ÙYÞ䮨„ç„©Z–q>@¶Ž¦U¥ß»š'ýßâ½)Âza”œrÖW¸OõB­º †h«õö TPEÇ̻ޫb„'¦¢B[8Ø‹—Çë먊Nª‡|,sú>ÛºÕ«§bcc•RJ%''«þýû+ƒÁ`·ëz¶—ënvܽn–kz¶·§¬TÿþýUrr²èûØXU¯^½{Áô÷r]ßÁÎÛgëYÅdá=­C*l¡-D6'+‘UG\³TYÔàE¢‹¶)Ô7—QíØ~ïzÊEq²ØúÆÓÞ£w#±Í©ŸŠ­ÖLö ˆ9Z–,“ðœ`gy‘ ãMk©üIÞïç- yK–}ÖEäÝ–Ü–&y$Ôí´1yÏZÑâx:¬È!ãrÅ 8îÀJ7îÀ‡–Àö ¹çÈ6’àøŠ®&øb4¼Õ Rï@×waþFÛ¿æ4jÛv@p>*_X“ôÜÜ¥mv‹G öùͰu1ô¬*ª2î@ó`Ñ?Ò½Ê]É¡- ýLù}Ûpò'Ç®[^U1| {Aå8)MÀÅÑÝ"s(ûæââÂèÑ£Ù³g¡¡¡:tˆºuë2wîÜB%çåš *?QÙÂJw+\„Ú5Q…¹sçR·n]:Dhh({öìaôèѸ¸¸Ü³¶Î(çâ)¼RFx-ÂKx¯(U*ìI'Ù‘ÕÐÚ]Ëݺ‚%Ç¡U/ÑE«?‚žU`ãÛï=á2<׎†j5ô‘Ìg­`$¶£Q;±%¶Òüb«Rïˆíúb´Ø2-©¨•, BMæ³b˜ ¶Ñš¬-ާ v»Ï¥Ö³¥Ò…;îÌ+iÏp/&µ£>,š'¹‰½Ìã)-Ѐ2{¡’½Pn…ô";Ë›ìmBÅ?#O`mË9׃ìèW:€òò@mþPžÆolAµ¨­]â…Þ=ȹ¾¢®(ždë+ÎUÄÓloÏ…³_åæŠÑjªÊ|ÅmÏ¥¡ZüŠª5ÒåY^Û¹xv°„<œ@aDUªTIíÞ½[)¥TFF†š:uªrww×&z¶Å»:È^óA–øàÙÚœßÝÝ]M:Uedd(¥”Ú½{·ªT©’Â(k\QÉškº§å…wjÍ^z.í~>룄]ýõ#Z†D ’ñÅ™L½3n­äNå¼zñ(Û3ñ»Em±]j§Ø2/슓B!mÁ mË †‰F0³½Èñ&»!ØÑì%X2×°^KTCìçI¶ HöuÛ€Ê0 üòX´Ã–¸äÇŒ…_,gÅ&ÿ¯š0اPd­“Uªê—9¢\.­G=ZM ÐÙ9ëo 1ÊV£5ç€Ä0Û%qEGIA÷µ`ÔøD™[—Q»£"?Eµ<„ê˜~? i}U*l ªä£(ƒ÷?k@÷îÝUbb¢RJ©¸¸8õÄO»Ð½„x<ñÄ*..N)¥Tbb¢êÞ½{®a-E&ተÂ#­ÏÜÏ?Ó…·"?^«ñ²ðÞøDáEÝÄÓj”\«¥žq6PÖÊ‘òh5±aj§Ø´RvN"wvR}^XÄ€`ÕU°Œ3c‘ ã}Ì|8‡?ƒÞ6Ü[ B P»,¾u‹6×—<Òµð^dgy“=\Pç:“u¬ €¬µp–@ýµT”Êé¯QU+ØwÞΨ|¡%@ÖÒãÇòRYÇs dn/—ƒlû¢‚Z¢ÂÇ¢oAu¸~?èyæ&ªévT‰Cê^H£lM(«xÓ –¬Yt7ùì›o¾Q¥J•*vIt6ݳ“K•*¥¾ùæ›»ëºdÍ"Uñ¦¡HåàÜeÏkLxææýüÑáºðNøXá%“ïýçyù;áÁçèK6ìY¦ÑQo¬œ”m­`QØQµ‚Ø2µSl[ù€âá¬**PîXA°Ë¹‚eôâE¶ÕA:Ò<7»×ÚѰ+›,è$O¶Lpr ñ‚¥^òf÷¢p;Ë›üZ˜0ÚßO£Êxë kõšG+ebϤ =ä{Œ¿§ÔSÞxK ÚæT©·ìSÀ×ÁFTõbd‡ž@yë,ó<¤jRjÂmT@ÛÿJÔDU»õÔ±ûAQ'%Ÿ×]*Ç•¨i[’µ4Ù[I=”RJݸqCõìÙÓ1kaçrl6?”9ºì¨ž={ª7n(¥”z+©‡Íåà´Üû€*ƒ“2„'õ$#Þ"»“•Ȳ±€ûäéƒze¢èmJtÊ+ås-çíH ì¨än-œ?Ž{,,P.ã-˜Eu £'/²­NÒÍî‚_ÈCnràºɹ¡ø{¼,¹ÑDÏÌò…ñ";Ë›ìfDj'Ì÷²~2v®x¡õk)g(GGdì˜uÞaŽ×Ñ—P¥Ãôeü1 úï-zŒ´=¼‰î®*4ÕM=  ê¸:¬öíÛ§ÂÂÂ÷šØN= eøØÀä®L……©}ûö©ãê°z@Thª›rtuÚ[„¬1Àý÷ê+ DvG_’ùu˜S<ªè8 (;ºL¨=ÃUÉ¢°@9îeÁ,§Ú †Ñ›9?G© ‚•—`ÈܾŸ[4ƒn@rnñ ÙG¬åf5Þ‹ìTor¨0œzuDGÙ^ë¨G¾fs&@¦ˆõK{=³Ô[¥Æú+ð_Û úöy”›½ZK­74X¸ÐSUT¨îæ(5aÂe2™ºOP-ó³ã÷¡ÌÏrm'{]“ɤ&L˜ º›£TE…q¡§ª74Øiñèn>‹“•ð¦Þä¥RãÌÒp½^<ê±k ”ÕpÊ éÎ(ÅZ |¤`ÕU°‹½Èù9KµÄ#Çæá@Í+/N%àÀ¨›ÇqÖòM-W6!ý»Þ¿ é¸fº‚÷ä÷Q¥¥?¸ÖTÏÜnÙX¸r ]Ñ¢=ÒÞÍ$ýâÂlÿn§f°ùCðõ‚ÑÐá¸uÛ1óN¼mºÃÂ/ÁÓ¾^Ãý¼E)ófoŠ=ÚûÏÁ…Xx :LÚïo‘ß³Sx{hû («{ÁéÝúâ57xj’ü¾õH»i¿s«t¸öÄ΂}Ý`ó°)~}N| W÷Ii+ÿZ:*NçdÙ%D7þÛÉ÷µÆPó£tª ‚òÏ‚$¸•Òv=œQþí®.Ô  \Ž{^JÖ²ü³PeÔü(ïkáÆ;y8Yv §Æ:@öF™e¯N|,{·)Dör_7ÙÛkÈ^Û‹Òn /‚𦛾dæôn‘e¥D¶ÃÛßL¹0·¦n‡°H¸t&wƒ·ƒ£¿:gÞZ•‡6@t½§‡èþ6ÝÅ8‚nÝ·"ZlÞæÅÚl[‚ÄÆº™Äæ.Ú£/^»rK0 ·³Ô3iM“A°6K/@)¶t Ä‚ ­ÓmjCé·ºìcÁ¢v½'{žl7ðð8°+7l†^Àã.0==ÿºÈùÑŠ²)ÖºÉ˵c€ne gYH¹©&h,uGÇèK8†¯je Íðö5h2óYÛ~í`Î`p1Â'«aÐlQä5ôéÐw? Œ†ÇBÕPè?BþWœrVÚó-ìÛÏ „n£¡n+¨Ý6χeã ñ T¨/¬£ l}}‰î¨ù((QÎþ –i½”ópîA!¥™°b0AM\8Äwü‹å)"8•²írá±$H> ·NCò©,¿Ÿ†[g íj”ieË5b’cïCQ@°×à] ¼*ÉOï37ùæöÍT<Ê4æÚriWcºMçÒ¹‡®ÅePÿ5¨Ø@xtëÛú’›C_‚xj²Èø‚·|üE<û¸˜ å&|õ|=ÒÓœ?o+P^»=(?×\>/°¬˜`îèó"˜Í0ü=˜:Çñ÷t'ºO„Ë×¥Žòªq0À7ÿ~žb[}aÓ_bsõF"£\O÷‚]¢¯ÃŠÿ4ÄHùÔEÎÏ¥@¶ÖM^–"XÑŠs£Ç³`P»{žl—‚7 ÐØ€%’#‡c,OàFá½ÈwƒÅ›üyYË+nìéÅVªâ ŸYvüï8ÄfÀ¶fðNuøë:|uV?‘a†Á®aðpyø²7t˜#ŸçD£^‚‰}ä÷Ñ áýåÎÿÔ9ðïXþ©(ÑŠåáù~ó0è ßåÛ4)øÿÃçÐã]hû´Í»ÁÚYP©¸zÁþŰãý)à€*Ðxx 7Ì]Þµ¢–-[²lÙ2Ê–-Ëõë×Ù½oÕŸ‚]³à—%yƒ<¿‡eØDßÉÎô$WÖ ç¿> {£áÊÖÿhVÿUü›øÓî·žôèуèèhÇ-†ž°OxôÅp儾ägÇPº Ôé/¯‡ã3¡ó ð ™ú~1, W/êkÞöÊ~%àëùÕ RnÃK¯ÃšMλ'¥à³(Oìó†B îvÐÅ(6õáòð×y±µf}íS—Š‚M2tÜa.0¯ª`˜ßoÀ‰û_³(^ä»úÅ‚?÷l¸*E°bVì˜56dbP}ƒdËφ€ Ó=RpVAE -¢ùîÓ‡ÆÞd7¬ª¾.°êÌ¿ Ÿ:3kÃâúp< ^Ó$¦ÀsŸÁ/ÃÅ£üaGòͽÇ 0ã y‚Î0Àé뢧%­Ùq`ýç¢L÷l„6/ÚÖmIïùž}º³^‡ ŸB¿Ä«Üc $§b!ú}Î»Í 0¹Ãï áÜ~Ç]×ÝÝI“&1hÐ »víâåW^¢Û/gÄK·®”QXXXíQÍù Ù£š„Ch‚ó{H8d€&Áã‘Ô~ô>_ºœ&Mš°mÛ6f̘Á;ï¼CjjªCÖãÜ~yÀ¬ÛGxõó¶ú“¡èwà±Ç!2 _>ûsÌ,¡Yz¥¢åB`Ó—P£Ä_‚/Ão:¹×÷— Pž3XÀr ÎoT?ì(6õr’ØØÄ}íOdIÁ$ Fùé?ø hî]ƒËVïЗ°ÿv´ÎTª¿nÎ_©'€œ•ÎQOÃg›!òiù," ¾ø~üÖφS: 멵ÔðÃÇ]·F¬X±‚ˆˆîÜ¹Ãøñã™2e ¶ÈÀ§ \>ä}Ž´«2´ÑìuâæD´ÁùÑ…²ÕÀ%ô Í›7gĈŒ?žÁƒÓ²eKºuëÆáDz?Œˆç…W«DÁ‰múŸ# ÃðÄ‹àni!ìü¹ †=E± Âåz‘âô‚ÃÇlwz8’æo„«IÒ¾ú­N”_™,a½‰-MKÛ{I_ót,âå‹þŒb¥WA]_Á2ÓÂàM;¾]±‡ù®Ž"Ó›ü–;–·9(aÁžZ¼x1Úû„V$ß$c¬±%Aªè^ä»O7ä ÆêM¶u€7ÊCšºÙ6kÀ~ØsB¼àÛ&àfÔ—Ðì<.ýãAúÉ7­ ^°~’ä¤[Ðz¸þò]ðxµƒm;D¹îø:¶ù¿ïòZxæiJùaÿVpó„Ö}aÞŸ0m4é$ñŠÎ"Wh÷‰üþã{¯ý5 dÿþýDDDpüøq5jĤI“ÈÈÈ VW9.fUѯeÐç¿…3àÐ[°§=üëJÀ†Ò]ö>†Ø™pq#Ü8"ácÎ&7d.7ÊÜþ,s®-s_WBîeO{¹·3ä^¯,@¶’uju…ŒŒ &MšD£F8~ü8ìß¿Ÿb0hŸe/< ³.®N”“Èî´"Ë­ûŠlïß*²”í£D*H2_Ç6¢»ƒƒD—7j§?€l¥Õ;Ä&&ݹ~’ØÌ¦Uņ‚ØÔÇõ5o7£`/Á$²½á»‘!&Í,˜¦C€ý®m//ò]<—"Ø0HÝ‹s¢&Ù°§d—pÖÑËR/ù›¨žžÎ/=’Û¨èŽJh„RÍPoåQ·1Ð×^ʬ,¬§¿²Cd)v~ù#Ô¹öo3楦ònUª—2o…*¡Ž]“ù¿’åÞBª¢ÌD­KÌ,µ"õÂ;(?'4i2DÊW >ŠrqÕþzÁÁÁjË–-w;¼ÍŸ?_y{{gò…;jÜ5™S y¹LM™Ã ÃΛàÃ2‡25XvªšÌaÜ5ÙëçÞÞÞjþüùw÷qË–-*88Xûnw®Â«“•ð®£×Ã/PduE\¦ü®K™ÉR¢ó•"ûÇ®‰.(Nº+¿òpÈÎVñ¢ÃM¦âq_Yû˜+¶Ó^ͺ´ ëYz8´L’Ûqo…¦Ih$§È¶Y£R¼==#*/ÁŒ¹÷¥>r¯ÜÊë¥\A<É7`–a¼c¿kÛÓ›l2ÀÊêPÊ6&ÀÌ<žz/§Bû]p+CB/VÕßÓñð5°õ0ø@d 8¿+^ kå‹áÏЇcaÁG’%]Ü=È®®ðÙJðó‡ÍßÂÒ,YÞçŽÃœ7á…˜ýÄý!Ðó}XÃ>‡jõ3Oß`xb¬ü¾ñ-ȸ£íõÚ¶mKLL ­Zµ"!!gŸ}–~ýú‘œœ|÷˜ª­ÀÃ.”WýÎ"¿ù™èDï˜õÚÖ¹8ƒ.“½ðð—½±Rrr2ýúõãÙgŸ%!!V­ZCÛ¶Ú gÜ^á]ß`ǬCµz"›+âDVBDvg¿!²<çM‘m+-#²ïç/ºÀÕµøè¯Ü<Ê&“èè-:cø{¢ÃÓÓ‹Ç}ýqLläù‹é+¶sëa}V²XU°Ç­ Á"y…}Î<'˜¦”«`œ¢–ε·ÙJÆ;™8ñ¦rž'Ùî ùðP¨’Ë1µ²T¿åj¿×”ö¬›üÞƒÐÐÎÞ†žÿ䟼ðôÚ'Ç͈„eô%Df3¤^D2Ân‚ûp£ØÑÔ9ð|_ÉŠîó"lÿv,¾`Ø»ðh8õÎù˜”$IîëSFFÁÞ `r…'{À¬}2žè®îÚÍóÉ à^þÙ¤m|§——sæÌaÆ MDDëÖ­»ïØK¨ÅŸ«œ»‡ÿ$g’u/¬{“•Ö­[GDDÑÑѲaÃæÌ™ƒ———fó9±MxÖ½„ð°f»î"ƒVy|²‡ÈèÞ "³}ª‹ §$åüýA½E<Ú@tBq¢ì@yÃNØöµèè”Û¢³Qâ­¨à&¶’dà†ØP³Î*Y´(#˜C!$¿ Á4go ÆyïÁÂ_Ûž±ÈYÉÍ‚ ­®• –«bÁšÿY°g±ÉY}nÞäƒ<$(xнìciorT)QAʧ¼xlô˜}u&|ÝÂtTÈ~TCh 7.ÂÏÇ!À~ Ýë?ŵf4{.]Æu!ð6oO€üxKxcddÀ€!1?§àÀ0®¼ßLƒ¤«â¹±¾8¯L€€òögH)W•ž ›i·µk×fÿþýôïߟ´´4† BTT.\¸_‘zCx;Y“˜¯t’㜒ãô’c¾’= o'{”.\¸@TTC† !--þýû³ÿ~j×®­Ùœ6 Þ­ÓKxÙ®@ª¼ÈÜgD«Õ™üfšÈè¸"³ùÕO¼&: #CtÂã-‹'P¾|ê”…æ á¿Ë¢«Yâ­°Ô½¾ØÈo±™7âņŽj¨Ÿ9†ùÖp1ö°µmÂÁ6J°NT!-iåEîel˜`‰:ˆÈ$;"YlQMr¹1ëSÁ×ð9Ê<ìtí¢z“ƒÝ`ÙC`4À¸Ó°»€åäÆÄÀ†óPÚ]‚èKèàµYëPßDâ…uÐbÌÞî&XÖÞk/åàŠíÿ̧€DpK…Àd˜:Â,>÷³—ƒÑÓÆÃ¾VB? †A·˜ÞN‚’e¤!Á²S0ê+¨ÙÄ5@»Y`0ÂîÚÔœ5 >œ½{÷ÎáÇ©W¯Ó§OGå‚.ÂÛ ;û \?ãd\ÁtôàI®àܵ¸~FöÄÍ;çŽrò°§˜>}:õêÕãðáㇳwï^†ŽÑh³tå„ð®Á(¼Œô]Í&"cËN‰Ì•,#28½Èä‚a"£¡}»E¢‚Š> {~5ýD'“(¿*^¶Å`›¸¬§ØÈÙÛÅf¾°Nlèø&bSM%\c”vÌ1¦€Õv' Æ1óðͲV^d2½ÈVŒ˜›'¹‰†õ‘µÉÙP~v²>,΀Cf1@?x“] °<ʸAô5ø  BðÒ¯ðw¢(‹å ì¢ ¯¸JŠöroãwÁæ“Ryà*xc¥ý˜6ðU_ð,FqpÛ¦Ap Pñ0o!ÜL–Ê1ÛaâHðòÔ¿"ž¹‚‚á—0sráÏ•šß/‚þ‘0øqØùµ|Þôy˜þ3Ì=­zƒ{!פvé^vãlßþkQ¡B¢££™2e ®®®Ìš5‹:uê“·Ö¯¥“P øáÙéÏU÷îQnC:u˜5k®®®L™2…èèh*T°?Òßþ¾ðpÅÂÓ…!wO‘¥¹E¶š>/ŸïüZd¯¤Èbj*6Íœ,:!(Xt„Þ^ž¢sc¶‹¾™ | ‰ÿÂÓJ³ªâBž®b Ç´ÛøÆJ±•f±ãw‰-]Ñ^l«Óì‚-jú Öxé×Âõsúà¬`2n‚}\ ÀkZy‘û™2 FÌŠïÉÙ0§Vd×ê€r•hÉ8,›í î¸ÊðÕÞE²/z¢¼pn¥‹QHÖg|CT°[Ñ®惺ò¬d›NŒpN¶«¯êï>(5µúY”!‡c¢ª£®,Y»ûÞF—ÐÖñ¸W$ãXí”ßU¶ êó™(óEÉ¢>óªKýÞCÿ!’ ~ô *¸œýÏPõÊÔWñ™YõkP}§¢‚´ý¨·ÏKu€Ú/Ûž:uR J)¥âããU«V­lúž‡?jÂmÔûé(ß`çï§*Kè¡ÂÆ]Ý,{3á¶ì•-ßiÕª•ŠWJ)• :uêd÷yÕ~YÖèíóÂÛ¶~/øA‘5 ™òôU¼ÈX@y ªº”ݯDWèUué ºVÅ‹îý|¦èb@µn€Jß.£uýÛ•àbÕ<±‰QÕï?Æ€ØR5Rl«¯›sæ:1B°Å•gké¾Ýó¨f‚pbE / */Á†ÙñbÖcËZ*©%s¢Qu M@2 ¶X@òóÙ˪PÊuØ”ÉtûuzÛþ   µqãÆ»|±xñbåëëk¿y„—'+áíéM iá„´e s,¸Ï#s]›3>ší:Ï[@ò–|®¯»pwã]r‰K¶ºÍcTfxÂXKÜÉpøÚéú‰M.í _Z^5L‰ƒmWí3‡Ÿþ“¶¤Md¤_ÏŒj«Ab*<³’Òr?öð¨7vÇB…’°k´‹Ðß«°²¥aÓYÏó—!jèýÇüúÔy ú …+W¡YC‰‹›5 üýœ>¾0o¸¹Á™°Mã6àwRáÇ/``}?,ƒô;ðX{ø`,<í_Ï/  4Ê R¸÷y9Pƒ 8xð ={öäÖ­[ 0€öíÛsé’íí«",Mœ°RîÌÝÒnÂíëΛÇíëšn>2'g“uo" Ð ãÒ¥K´oßžpëÖ-zöìÉÁƒiРޛ /+³ðv@%˜<}E&y¬½ÈÌË2åèÇ/D¶´¤mEG¸¹‰Îðñuþžúû‰.=ðƒèÖ+WE×ÖyJtovz9¬Ù ~Þ°î}ðõBwÔ.Bl^…’bëM›˜%¥‰MMLëÈD¾œZNÛ…×® öq1*Gè¥V±È¾ ˆZOkÅŠÙC.¬Ør·ÒvÍ5É?[~6Îö¹5ûÏ,7¶5ö˜!ÀoÚ1.Ö–Ød°ä!¨è¿$ÂØSö]‡YÇ¥=¤—‹´‹ t×^¥‰Kå IDAT²&êuÛ±×òÿΕ›Ðr|±|ÜáÛþ0äIý(2£~Ÿînšu_ͽÙ ¾€*ÁìÅòÙ½àÄ^èÛ]Îå,š2*…Â_aÂÇ^ûØo0õeèV–Œ‚+ç ÂCðÆlXyÌ„,5¾ÛÌ“;ì_ çöýú&“‰±cDzk×.BCC9pàuêÔaîܹ¹&çå¨Lƒ!´…T+ø[5K­1À×Ï:.z©p²7驲W©O¬”bîܹԩS‡Ê®]»;v,&SÑ“WÎíž6¹ [)¤ªÈÀÊs"Y2JdfêË"Cޤ #DWT ÝáLýÛ·»èÐ7zÉg³‹Ž]ðEîºX)èù>5„%#õc=äI±u>îbûZÎ[˜Å^ÛêÈD¾¼ZNۃƞ TÑC0QnÛ¤U,ò›®‚÷˜ZÉŠ³'ï5Ά5µ$MÂ-<@Ý6 2 (¿,Ÿÿhq·Îæ"of7ûUO”¿Ý÷ù½°w÷™œ†›µ»¥Äín)£Ñ«˜°’¨ëƒäUÐ膅Ó0 Þ~eþL^=-x åêâü×aÑÓåµy§„\ Á«A­G—W$Æðd*T]L¨&PÓvd Å0£&}zvŒ¼’ŸhŸ˜ßÊ•+«={ö(¥”ÊÈÈPS¦LQnnn…:×coÈÜz¬×ǫڪ­,¡[uâ°UæRµ•>Ö¦Çz™ÏcoRwº¹©)S¦¨ŒŒ yºgª\¹²]b¦Ç'ÊÜž#<¿Õœ)Óvˆl¸è ;\h5ÑñJtˆ£¯o¶°òr¡vJ†³×ÔÕEl›š'¶îí§ó=ËiŒn(¶öú ±½ZÍ×Q"¿.ÃZÅ"ûû)/Á‚Yÿ×Ú¢ûcYôC°åmÃý±Ê—p‹ÛÀïWu£,Ÿ?’ƒ'`‡~Ê€’â Ju|áÃÊ–"ÜÇà¬F¯ÏÒÌðì.8w Àœ:Ú\Ç× Öu?wXs Þÿ¥0OL0y Ÿ eÔô%´Lš%¿¿3Nê ÓaF:ìZ C›Á«µ`óHK‘W§ý߃ê@‰“Ðôñª–ºwïÎÁƒiذ!çΣeË–Œ1‚´´´BOOU-²zmYÙâ®'YG.²îQ~U.rÕiiŒ1‚–-[rîÜ96lÈÁƒéÞ½{¡çTá!áé'…Çû¿'<Ÿ–"2ðj-‘‰]«EFœM'‰ÎÑ!¡ÕsݲeDGþòè̳çE‡6NtjA(ö°æKøj)º£S1ðq?i™»ÿk‰ójF›saÑQXuÞ^m_³ 4ûûû³råJ–/_N‰%X½z5µjÕbûöí…ž§ÿP±!¤%ÃÑ :ÉqΟ‹žÂ-@ö(-YöÌÿŸgûöíÔªU‹Õ«WS¢D –/_ÎÊ•+ñ÷Ï?øºÂC³o¯^tTxºf¤ð¸/Âó/„ˆ œŠÑŸ|~µTt‡·è7 ÃöÜ\E'ÿEtäíTÑ™áE‡–6ÿ ã—€‹VŒ…°òŽ_Ç*AbËžxHl[Óibë K ±µ‡¯ˆí]ÒÆþ%_ ÒrÚ´þŠ`"7£`¤.ò¹V±È¥ ‚ù²bÀ¬tÞ‚KY0dVL©u<²æ ÙZ»®±…k¬1%‡r¹±_̰%J2¸íA9y“çUƒPO8Cc# Z¶®.H¢ž­ôûi¨ÿŠËT.M«:N¡Ù’¨WPº•£?€ˆæ°n øxôqðçvhÕ\›û3Ž„Ó'aDtM©ÉUV…™ýaûJ¸zJ•…æ/Øš›6mÊŸþI×®]IJJ¢W¯^tîÜ™«W‹–ÑEbn𥠬ƒF"wA²NŠX)-YöÊ`(X_NtõêU:wîL¯^½HJJ¢k×®üùçŸ4mÚÔ&PÜüáá«…§göáùÔd}Ëæˆþ¢CŽ¢µj.ºpÚ8Ñ불®ýè΢’3ùšVÍtöŠÛöû颟WËD¾‚¶œ¶ lê)X ´ó"7 æÛ’!0':”-.ÙŠ)w9ˆw4‰I&‡¸‘‘F‰-ù8׺F”Ù uÓ UF£Øä×ÊKÌÍ&¨*žÅ»Æ! Z‡¢ÒGÈhjÿùú¸£Öø­´9¨>µ_#£unµÄ°ÝþU¶´6×iÕutwf¼Ý·KPaþÿ£ŒSN£×û¸=Fö ëÿ*<„jûêí¨U2ã7­cÕÔ¨UFµðûgÔŒÃJ)¥öîÝ«BCCí6¿$Ž´ºŽj`ë)XOñÑÖQ½ƒÌià;Æé††ª½{÷*¥”º‘qX-üþ5j•1W¾|{…ðn…‡î×3Ûc„ç{½¡ùÔª|d؃¢û¬zðènÑZ܃¯ê異ÛW¿W¸Xà‚Ž>Åv©ybË|4È?²·vv¯…*ž‚‘T3ÁLZÄ"—1Ö3{ öËí¸];Ž4æžïFq‹IHbw .9W¶¸Ï{i† à ŒÔ¨ÒÅ'ŸýkÇáD '{¶®Î©£ž½éf*<;¦nWXð|ØQÚYjEÛ¦Aù@áò6#àb‚6×ù~;ÔjCßµ×¾àrðÉñ¢M~þÜ®ÉÓ ÞzG~Ÿ2æþŒõ¸à»Ï`r7èZz‡ßïinÚÅLŧÖñ«±›o–`ã醄?y²H1ÍV ¬å"¥ÔÙñïõ³nÿ/&9o:þ½ìY¹HÙâR…‡ üÉ“l<ÝÍ7K𫱟ZGÓ.æû<ŽÅW'wÞûçÞs™ÍÂë ¼ïé¥oýs¿èƒAtKp¹¢/§nyCßøývmî!é<3 “¡cSm;ò b«¼$¶kê6±e75Y°gG¾¢¶œ¶HŒ‚™´ð"t¬·!C°_®|ŸÅ“\ׂ)c,SkÒ¼ÖnËÏǹ¿Frnd­‘÷š ÊÛ16y’h¹Ý†åaÅÎQtöj]mD=[ɬ`øè»îdÀ°¨ÌÒ9ö¦¢&ê”ÒîÀGs¡jCXö5x¸Ã¨ÿÁÑÝÐ¥CáÎéâs¾„’¥á§-ðÙttO=_‡2eáào°Õ†x߬ ùÇq}‰L9@8sñMnÏÍ7\}’hÖU:¦9;ÕzA~þ½VJ‹é$ë0Ü¿¢~Ö'=Uö,ëç>Ѭ«ÂÕ'‰› nø&·'œ¹D¦àÇq}sÅ9ÑÖ ÂóeÊŠ è>›.:¥diÑ1..…;O—¢ãFýOtÞ²¯E~4Wt¢–äˆD>k)ÓaQb³ú.fÖ0ŽÕ‰|öj9mZñŸ`%7KvÜ$;Æ"—7ÆËÚ+#7ÊZ+ùñlز؃ä]–›{ÜU Îg‘cÌðMxïØÑ›œ”XFé[àâDEwãŽd©&¤Bûò0!¢à‚dÏD=[iánxòc¸š íkIö;6I±g¢^Aéâðò›Ð°-ü *–‡Uó`ûZx8¼`çzómhØ .ÅÛ¯.sÚ‘ä[Zê6Ocû|øöÛo™?>ž‘ìøÂ‡§Êíเ´=ͶÆ4çD:«júi$b%½5¹ë ZuïçSÜ;ž Hã©r;Øñ…ž‘ÌŸ?Ÿo¿ý–€€Ûœ*Ó›Œ¨[Á¨Œ²¨°,‚óIa‚ÿª BœÜ~Ô–¶“¾n¨¿ûˆÐ­~eÐÓëú'QésEA-ï…r/ÀzŽ{E”£Ú)¿ëÙ(ué€:ó‡óEÔç3Qe-¯Å^ ÆêØ5T…JÅÃÈ–AJ–’Ry•¨3 jàÀ*%%E)¥Ô±cÇT:u4›4Oތڕ¸Ê:¶šQ+âPýŒ¶õÒ8TË—P5¡J—ÓnŽ-Ç m9^?{êˆ9•.'kÛò%YëaKeíWÄÝÛÞ9§±KÉžÚç6êÔ©£Ž;¦”R*%%E 8P †St”ŠÕ¥ƒ¾ï£uTúv­Øþ=w“Ø5OlÐ'õsOÄV«‘b»}Ýœ×rÚÖbL¤Œtܺ†º,˜ª°ç/l„@kC&Hî…ã@²[väN»²Dµç—´—&Þ—Lð‚ &¥ÃÑB´c|Í < °þ6Äfd~>ø?wƒ'½á» Ðð Ü2ã²¶®>ðTfëê>¿eþßY‰z¶ÒG?Àñÿ`Eè^*•–R;Wnæý=g&ꆾZ·Á;oÁàפ#Õsm`î—Ðeˆ3ü5ˆ;M± ÿ’²W›¿Í½D]pp0K–,¡U«V,X°€Aƒ‘œ¬m÷…¸dTð†*OÃê•0k?Á•¡¬õge¬!2n’ƒ|݆øSpñß,?ÿ…‹§ägÊÍÂÍQO•-¬d†"ž>÷¯qðƒ™?Ý¡5íß¿ŸÚµk3cÆ úöíËÌ™3iݺ5={ö$>>þ¾ãÿÜ[ÖAëgE6F½©Ž;-:gÞ*xw*T†þ/J3”Û0ý3˜ô‰}šhIÖD¾ ½%‘¯N_©‚‘øH‹ÆaRÖ­ÛBب£Ž‰ÖD¾‡Jg&òuþö^Ûí¨–Ó¶—Q°P ü,ÉJ±°ñ6tðL5±:3Ü(X.Í‚í Bw]²8®‰€C@ò à+ ‹‚À’|÷´‚…é0Àã]¡KK?¹`€·ü>ûÖ½ÿË:Ÿ‡ß*A-wX^:wø´¶®ÞÝRÚPþyfYêjÑQÏÞ´1šL… ¯‹Òúímh÷)¾óñZtÔsY»ö-ý ¦Ž•ú¢ÃúÁÛ°ï7ø}gñ¸òá¥~R+öñ9Ó¾}{.\H`` W®\¡oß¾¬[·Î¡óleyˆÚÇ~—‘\LËæèÊV¿@¨.#G`y9€¶ü¼ø/\9é¹€dÕH¾$çQ+Ù–õÊó…\¯7 Hns?rÌz$''Ó¯_?6oÞÌ‚ hÕª111ôéÓ‡ î¯uøáXhÕAdcÎ48Vÿ²üûN8±êGˆ.é–7ì=ˆ=E±¡÷—Ã#aR?yÝûðØ©«œÕ(_‡ î´ÿT:éé¬ùö¿’Ù‘o¢¥\«£[NçEÕr—zÈÏ FÊJ³o Hà &CZÁÒxW©˜1/]°]A¨…å©ã+ ¦ü?’6*èb€1øRÉ“„­4éô2Agxߘ¹¬ÔÑÊáH:ü˜&š¡Í9Ø_ žó…÷aÌeç1ªµuõʆҎòp"xøÀø&¡ Ûˆ½¦_%w(êM‚õ¯C½J°g8ç?h4¸¹Ãš/៿³y¼¼˜>}:¯¾ú*Û¶mã•W^áâÅ‹£‡'4h"¼±ó‡ÜËH‡ÿNË8ôSÁ=£~2ª_0ÏhàúÉ@µº¹{ÞMy”×ÔÊó¾óÙËMdoo;л¹nÝ:öíÛÇÒ¥K‰ŠŠbýúõÌ›7ÁƒsëV&ûçoøv%t|Qddh?}ʯ‹ <Ýú¼mŸ´ÔK¾$Áò¯¡Ç(Š)=?€‡*BaÉHè<îþ’”QÕáë~àç ¿†ŸBü ýÞWì5±Ý:‰-?ðܾ霖ӹÑ{‚¬˜(1{ücª`©ê&ÁV+ ¿FÁp·-˜®@ÎN;Z±¤£”RŠS§NQ¹rebÎó ?gß79yBPOXÕ6]ÈÄ Ð_AAß´Ípƒÿ™`}#§–¡ÂW8vÒSVW¼¨[ëÅ€wmšÁ+yP^G…ìHrv‰WQÛD½ò"ÊÍ5ûd·ôrž0SþÝ©S'uûöm¥”RW¯^U-[¶ÔÅ5ö-*rž¹§ÏžÓ ›‰|?nןl?nÙô8ñÑÅEîé5%÷X2µlÙR]½zU)¥ÔíÛ·U§NˆŽ<®±½–›«Ø„í?&µpS×Äv x]lIzÇèÚTlÓ­õb«ŒjgM&Ôo“Åg¨ù¨ÓÄ—ñ\:®ºh>½±øøbêñîiŽ£Ê çqµ¢=¯5üª®Y8Û]ápVɈpEeîˆH²9»ÃÖë}@!àmk_‰*˜©UMwIûwûzJUâOÑjEáT¬‚.ap&jyÀ‚BÖÏ^·>+9àûP{+Ì;N°ºŒ|Æx¯Ï‚ÏBØIIá!x߃ï߀âùŒ™j1ýÈ—K^®Ø–þïߎ€Y߀c¨ÛFò”FBãzðݸÓ?¿§í+w¥êЪ=DEÂ73½X´h«V­"oÞ¼¬[·uq-©{v8>=%5*"_¯]ÑŸl™,2ê qqrO“ßcG#00Ö­[GÞ¼yYµj‹-â›™^DEŠÎTªn_üžp%DlBãzb#¾]!6ÿ±ØÛékÅ6±Mùr‰­2"ŠçƒúAý¼â3x?í_b4Œ|F|·‡“øòÚ[Å·çt_ŸÝ0!ܦ–‡p.aÖuªMnå¬q­´`áj3ã…ÃYƒ·5®¸O㎎@¶“dŒÕ.Ô0xYKãᎂ&NÐè1Ò{˜¤ÀôLTa‡'@‡0©î|%ŒÊŸ½×¨y^xÙ$À3¯àÍýðÞ!I¬Ÿè k«Ù8F¢wE¨œ¸ «÷HOË«À‰%gÙÝÅ8çò\Mx¥DFÃ[Ó­ÿüïûáõÁP¤2ô{„@¾<0è 8{ÖC¯Îàéa{Ù‡—\êÀŸŠðëæÃôìÙ“ÈÈHú÷ïO»ví×Íu¶¨›õ¹ jES×uH’-2YdÔ,÷T/$ <<œvíÚÑ¿"##éÙ³'¿n>LàOE0™Dwl OÑõ=ëE÷½!¶à@ˆØ†"•ÅVü¾ßúc¿5]lÔ+ÍÄfî.âN|,>âA Ìú¡Ôô5ι¸šÅWOôßýÞ!ñåñJ|ûƒñõÍóf¯\£ò ·¹›(\'<˜,ÜÊ2‡"Un®vG w³^GD㌎J=wÍÚ ì¼k{µG$»ØŸ¸¦þ;Ý=ÀÛ,Õ—{3:ݯHÛµñ>ÐÞ+›”Ê3ËÊ÷.Â¥dÅ5ÓOBÇ=ð0z•„- Ÿ«þ Ew˜ûœ|ÿGt^O…‚»3ŒoGÇBýŸ‹§;Ì,ß´Îe Ý»_-…ê- Zs˜»îÞƒº5`ápåÌ™ U+ÚFöZõ¡IKˆ‰vãµ.OMm IDAT)Uª¤ZµjÌŸ?_W×Ùl†€æò}Ð}î…B…å«®#É…õyí,÷4 yRš^0þ|ªU«ÆÁƒ¢#¯u9HL´MZB­¶ùU+Šn_9"º^·†èþÜEb ª·Ûpï~æÿƹ+IÙæ Û¥w´ñ_0¾ø†Нø|¶œL2ÃÝYÿç’ÏU|t¯’â³;înÁ¥ññ >ß5›^Y·÷N“ „ãËdïÞ8áXÞfá\©ÁÂÑ>‹îf jqÆæ‹õ‡Çhlˆ òXùÙ™qpSA=3<çôèÿ™€AÚð™‘Y“qÃ.ÇüÎüÝì]Þ+å=áD$|žJcô5—!`;\‰‚€ð{s(S߯"°¸9CL<´\-?»!Ó‘š|GàLi ¿áù^¯× J†#gàóÕ¶;îÁ£ðÖ(\ z¿ ÁBî\ðf/8ð+ìßo¼ ¹²ð°öá4ñ’ùÝGálöfÊ”)Ô©S‡'Nèî:WªyòÁÅsúj¿õIÖR®†éO6‹LzL·¹§ÏÉ=¶wCfpâÄ êԩÔ)Sp6{“ß}”èÐÔÌ3Í\^¢Ãû·ˆN¿ÙKt<øOÑù•Ä´a3™ÏW‹­*UXl—^Q¦€ØþõoË÷GÃÄ7¼òµø €q»á¯›ðŒ7|T_ß>¯tNñÍ4_½]|÷¿îÏ%ñõå=Å÷ÛþnÂeL·Ùð kdzp¬A9þ–úœ“p´›J8›U5&çŠÿ9’¼Øä†XùÙûÀ-šü±Ë£7§©›4º¾š?Ú …Û´Û°ø®6®±(ø8ÙïšsƒÑÚp‚§Ÿ#tà6Ôúßr^°·9Ô÷ѧ±è]jiѬ77CDŠ{²óTýDZÃEDÂó%’ðI;鵬'ø—†÷:AB"¼1 âí0$$2J&ùÕ{ž €_Ib5˜?ÂÃ7Ó¡Ž•ÄbÂÔæT©™üÜ {™fÍš1|øpbcõÙÀL奄Õsº…oý^?=¦\$Gll,ǧY³fÜ {3ù©R+š S›[uœ:ÕEgËWóžñ•èx½Dçí16:>AlUB¢Ø.ÿÒúºÆ.bëŽÛ)¾ ê'â’#:^F<'(RK¿iõ}Ä'—ó]ëWñÙ©î1%¾Ä÷³c ÎÇI8Œ§Y8Í´ÛY?æÑµžqîeIãfh\ÍÚ"C4n¸]ãŠÿI’ ðFšÀÚ´ßÙqpMAM3¼Œ¸¾£å"ÏÉÄÈÄÇákÅ\`MQû½ù§X/~MgúÎåHh° Ö‡·lm ÝKèËX<’fq>&BŸ_lƒòã`a°DGk9i/UÕǹ˜M0(8;ÁœŸaßßöÿ›ÇOÂà±Pغ½;ö@O"¼BvÀ€×%‡ñq"¤•ôz€ÓGZâ_±;vìÐu$¦‘¶oôšjÿO·È*,÷Ör¯uKæwìÀ¿b=Ni @ÿ¡wYµj%yó>>‘4_ÑÍ¢«¯uÝݱGt¹°¿èöñ“ö—ßßb³œÄ†™u2祪bãG·›¿0X|ÀÛÄ'¤z.Wá³?ô›vѽ„øbo7ñÍ ¶‰¯N ¿ÞŸoÏ">W“p—b.ÂeÞ¸f£I%\+9÷ád5ÍÂÑf[EίqÂäÑÑÈÖp)×F­½Ç§™øì@gi-rÈ]úç•qB%ø¢" ¡¼mÜ^ÌÇ ZZÚ¥,òµ};–æyQª‘õ-aœL¨Ï«H[™Ä.¨+f®— =ÖÞ(5=•ÇÝŠ>ª¥PÇhíâæ£¶ BUðuì¹¼ÝAZ*]úååé89¬é› BCCU´Z£®)Ô©;ÊÃSÿ­’råF]Š••+·>e4›E¾k åê¦?ù\ÝD¶K±úmµh„ûœ|yxŠ]S¨hµF…††ª€€Ý÷E±Y—~övÇ^Ç ¾bÓ-öýà±ùý¼»3êxñ-Ÿ6ÒI«:Ä÷&v_üyñÍXÛòµ‘p[Ë·ÈW¸Khiá2¶<¶·Y8W‚¯p0ÂÉ”§p4k÷©Ö&x£É6ò®\JŒÓªß6AA+?ûU<\VPÙ `` /‹’){¶Dx´¹ ‘‰Ð37 µaë²´ŠõÒC‚V1;à€TÏ~àËë‚»“cïkziiaï9¨>Þün>€æàð˜úätËþs)â ûjOË3à~¤ã®ë™ó0â(Z:¾ÛÁͺ½Akàïß`ø'¾˜>šíÛ·S¬XnDJBÓ䢈ŠD÷¨×X&ŒüîÝÕ§Œù}DÆ[á£?ùbcD6‘U¸wW‹Üs½#*RtàFäŠ+ÂöíÛùbúh†pâïßD»½$:¸]t´hÑÙ3ç'ûýH±] ¶¬ˆwöËÓMløá1bÓo>_}‚ØüŒBoiîNâs?ð<à€øä+¢ ö,âšO8Kd¢p˜p§ Z&›ÖÑI8Ùe%ÍÔ¸ Ò¸¡àp’ü'°ÈŒ°rcD´PþÇ.Ð[ ÷϶‰nWåNö66*˜K¯X/#øò4¼° îÇA—âI¯|Œ¦Y¤…DóvA…q0—¼*ÚN‡®5¤YvaÖ È•~þ ÖîÖ‡âÆÅÁ¿@«W d ÿ9„]•1Ø“G'0°ëTL÷:³}{#\=Ïrù",ý C À2ŠZÏùÈEå«S-,°Èf‘U°Üã€ÆØ›K¿‚ËÁÕó,Û·7Ât¯3»Neòèž.#:8þsÑÉV¯ˆŽê¥Ç÷ÚÝbÃrå›–]0™ÄfŸ/6ÜÙIlz…qbã3A†ô’vaIuìR\|ï »Ägö(âk“S¸ŠB¸Kˆè-œ«·gR.ò„8áhÖ`„I¸à:þŸ$k°ôÀëX[gòm<œWPÞ 9ãag,±£QZs>å\VžÍ"Íh±^F°é*ÔÛ¡‘PÏ[ŠÊçÊþû™Z7‹L?¥>€þßA‰mðÍ ËûÀŽ÷À?œ»úСÜ{fèÓq‡†ÁØ)0á«7ˆñøÜÚ ˜b~ ‰ßoä¿QC÷¡¸Ž ¹,h¬=`í4@>òu“äëÈK¶ÜãÆÏé_/":õ7ä¿Mü~Ãóníˆñø _½ÁØ)¢“zÄ€bË:4Ûfoø[½¼Øî½çÄ–÷×ÞfŽîvQ>—øØzÞšÏÝ&>8³°uß³nÂQœLÂYÖÜ·ßµ8'Ü+g¼p±óJ¸™5(¢qÀä³4þO’5„ßîÀ(+#„±Àx )Žùí/ïÄ[°üä6ÃÏE²Öñšb½ŒàhÔÚûnIšàfд`öÝˬ¤Y¤…ƒ¡Pw ¼¾n܇€rp`4|ÑòxÚç\¼<áK-â2j„ÝÔ§ãóññaíڵ̙3·\/±xmÊ7ðdñ2à!8ÇCý*ðí ¸xNü)ðò à­³‰‡%ËÀS¥ â6Ùn¡ç¢= ŒP¼wd¿Üë§Jɽ×¼ó‰ŽÌ›":sñ€èPý*¢S<„ÅË][Û·\/1gÎ|Ö®]‹>s\ÂnŠ-±m^v²y<Å6-¶úÆ}±Ýu§ˆ-·™vÑ´ øÖÒ9Å×ÖÚ"¾7«°UŸ“p“Üfá*oÙÿšÌ( “YÛ7i”I8à÷'ü?IN$}€V~v{<(ô•ýÇH+ ï5ø# ʸÂÊ"™Ë!J9YÏfÎ1m‡.A^WØ}JÙÿÚ"Í"Íë®àÛ=Ò\~ævùÙÀ&pòcx­žíS0&ô¢>°÷/˜»FŸ$£E‹„„„жm["""èܹ3½zõâäéûxE—aÆT8Öm–eKA¿°z\?‡¶Â´qЪ äÌáØó±¼vúÑ- hùÊeýÊh‘­€Ž'”%&ʽN~ï…œ9D¦¸~Lt¤_Ñ™»÷D‡Žâ2xEÁÉÓ÷éÕ«;w&""‚¶mÛB‹úÌ!™»FlZQ±q¶„É$¶øäÇb›AlõÓcÅv+G‘vѧ”øÔ¼®âcmŸk+duŸ«I8IWá(}¯ÙZ á^$Ûne¹„Æý4.¨'è†$ÿ ¬\1V’?“\Ýxíàƒl诙Ãàr<4ñ„™­ßÈ™-ÖË¢ s0L=.fXP¦T¶oû[¦Y¤…ˆHxwT›A§ €|Ó‚‡AÕâ¶ù5+À[¤Ïh¿i™Ë›³'ÜÝÝ™>}:*Tˆ   *UªÄêÕrá}óCÛz"ÿ”E0ëh×òW€Ú­aô$ØöÄÆAågaÈ›°q9Ü>»ÖÀ¸!P¿–Ue'ŒjPXKõ¹qU¿2Zd+\Tß×ÒQ)..²ÇÇ ‘=û„èÀ7E'bãDGFOÉ_AthÖ7¢Sñ ¢c¾ZÿÒÕ«WS©R%‚‚‚(T¨LŸ>ww}ºKTbÓâÄÆÕ¬`›ãV-.6ø›b“ƒN‰~w•Øl{!»Ò.Ì&ñ¡ jŠOzB|l” á²ZÄ7³ p’ËñÂQ"³!Øð‹p¯x(ûY)ó“p¿ÔÚ.ù**Î$«ŒŸaF)ÔÏ.¨xOT¢'ê§ìiýRÃõ°œ´WyÇŠÖ-#ŠK»—¿k¢\Mö•±O)Tl'iMó}=”‡®MïŠÒ’GïÉ®Ö;&Tר+S¤PÂ<Ô¼n(?¦³êð7Ò.éÓþúkEU±bE¢”R*66V1B™ÍæG~gdw‘ÿÇñé´SrC5m€š0µw#*>,©u•º†ºµq9jÈ›¨ÊÏÚ·˜‹ êÌ=i]æ[TßíÀ–o9[¼ _[¼ 2.ߨïké[TäEÆã7ô=?ú\d9Á8û5#£žžžjÞ¼yÿèíæÍ›•¯¯¯n®»ÅV<Ü,¶/ô:ød!#óˆ¯T]Äw–Ï•½ç”Q®PÆU¸‡*/\$;dËmŽ¥<…s™¦\„“eÈ_#\/Æ$Üïÿ$9ƒk¶öd±*ÞTœ‹,w‹auX»yÜPNÙ4qçÇ"²IO–Bå6Ûv²ž­–·jw3Qú{/¡ZeѰ9*Í"½õRUÔÅIbÀ硾í‰*˜8UœÆwèç\Ú¶m«nܸ¡”RêÆªmÛ¶™z ¬÷ÈÜæ?…(5n©oBg„iv`*`òÕ¸¥È¹ùOã¼ù°&­ÉZÎÎõÝrSÓÿÝ‚¹Ä–&j©'‰­Õ˹Ø2í¢•¯øHÕE|¦·t(#os›…s¨òÂA²câ®­”§p-Ï4øXZk•ÆõfÛ1˜ùD’ä" ¢L¨DÊ?ß}Ü“K ê†ö`¼KölhO3êpIÙ¬[Šý›œg6ÏÈæOÜN¨uEùã;£Þ)kÜ4‹4óÈ\PŸ´CE})ýÎtÔ»MQÎ!6]›Š³¸µU ¯ãåÏLÊ7?*n»,ßüö'a¶ÊñÌ纒€º‰r÷Ð7¡+^RÝÁPýGh†Š¬ÅKê[Nw¹÷Wd/!‡ÞZ}³æmPv®yÅæ© ±©Öi˜ÅvÞ™.¶4êK±­.úÛK¶H»x§¬øFÕE|¥»“ãÎ'­ú%'„k¨òÂ=<³é¡}¼–ÖzÃC¸ÖãÞì§™†p¼(“p¾ÿ“d+×tí cM::­˜&NI…|³i“uF]/+›ö‹‚Ž+ÖËHä;+³æõ–f‘櫨¨ ï$½ ‹jTîÑßÉë…º¶FÅëÏ;^æÌæ3f4²e¯Â»úµPㆠv­AÅ^z”ÀD]Dmý5ê]T­ª(§d:Ù¡«¹•›õO3i9Ū.â»—ÐÏù¤–¦ùFá1O çÈ–ÎJfáRÊS¸UZÝÆf¤˜¬¡E‘˜„ëé™$;hâyú¸ÌV0Ì™ õcúÔVÔúñ…<æÿgÄCe3ôt†ŸÝ f4ܶsÏÛ½Zïž0« œŠ…·JÚv²ž­°ì\x?ׇŠÀoMá…ßàr}-í=4Ä^Ø[ÿ†¡ÍaTkèZ^ð‡¥ Okˆ‰ƒ~ŸÙ¾á}FQ¼xq–,YB@@J)f̘ÁÈ‘#‰ŽÎX§úæ5 ¤/œ¿ ¿ê`ðýƒ‡°i», fëAÓФ¾ hhûœ,€Ä›ð^'x¡„^†ËWáâeùþÒ¸|Ez×:¾Úhïkaúßó}u2ŽÜÕŠ†b…¡xQxª(õ•ïË–ï›Ð½, NŸƒí»¥gñŽ=pó¶¾®ñ¯ŠÎ•ôܼ/ýÏ=z”š5k2iÒ$Þ}÷]&MšDË–-éÑ£¡¡¡Ù~J‰í;ò­ØÂøðj5ÈéQq0q#Lû¢ã0,CF†Õ–!#ÕÉ„¾Ç¡¨'¬o•óÂÍè°v‡ëhi“ø^ö‘I|sÎ ·á{£ì/C>“p¨ÀâxáV©ÁÂÅ*¦Ñ+ù#“ ™­„ëéÎzn 2Ë»PNåw*k7âHÄæÍXxÆ 5̰ÒZÅÈd{bÉ]ðs…aùaMQÈ×ö“õl…ÝáPûWØ FâæÐö78ðg”]CCìè8ød#,Ù Ó;Á‹UàͺÀ%:7o9F®N:1þ|òäÉõk×èÙ³'[¶X7Qãäë‚ ú~Bn¾_/  x!Ì/¶„6Àìež’õ8G~í†çËW…<‡†Éº&Dúz686#Œ¤þ‡$góhê‚>B€‹‘û[¼ˆࢾBˆ Hg2f vÂOBŒCuþ0’¨Dç&öÌIˆŽŽfðàÁlÚ´‰Å‹À‘#Gèׯß?C²U?oAÐvhQ^³‰ÀO‡`ðj½á0n7´)“4ddøÎÔ¯Z>X× {À©ûÐ:Î>Ðßù 9­òÁËy¡Eœ ™rK¸†½á„p§Ò&ø3Q8Õã`áb•£çu5NwOãxz‡®Iò-`¦’i,ãMÐ4…ã/äniÙÑ(àÅ8àÍàSš OÄ£Âá7h“¸s#l?YÏV8ûêü ?Õ‡€Ôºï…5)Æîö®µ4‡ûæfˆˆÆ½ /̓I-a„6=¶ÅSpéSX±æÁ‹ö—#W®\Ìœ9“ž={°nÝ:úôéCx¸ul/ù„½E› rÂ`áJðŠƒ6%aULX!dÊB²ŠNúw‘Bà[PÖc‰GŒæÐ0!ÒB…<_º"?¿x"³u)¨íÿëWõ-2´IöôHºÅ´hp‰âZ$¸ˆüÜÝ-ícÄÇCص¤{qéJÒCÎÅË0º+t€_×ÃÂcOm‚_KšÀwÕŠ‡í-[¶àïïÏ×_MÛ¶mYµj­[·fàÀÜ»wÏî²W{ Þ €®5ÁÃEs˜aòˆa½à0¤üxR"ÌÉѾ(,« 9œ!輸nÇêó|.ÅÀÜPx?ä6ÆÂ1²Ÿºwº¡„K¥eBÃ4N–Oãh)¹Ùx<ÏTÂñþO’³ˆÏ€·&@# ùÃ`%íbÎ@Ô첂—b`›; qƒ‰°ÜÎáä`É-h£öíí ¯õíXh±æ×€^%á‡zðþa˜~Rþߨiƒ hS¸_‡r%à9?x­ž¬?Î×;àû5·5êÖ­ËÒ¥K)Uª‘‘‘¼÷Þ{ÌŸ??SÇêÕ œà§]Ö9h= yuùúËn8ú·¬T£N‰,Q,‰¤+"Ä­xyïOÒ8Ê–J#bv[R7B-D-,‰H_¸$Ñê„4lÃ?‘d¥[¤IÎèµMY½¶¿ì’ܼ:Ì4I¾z ÖíŠ.NZfÝçÃÃÃi×®ýúõãóÏ?§gÏž4hЀW_}•àà`›Ëëæ /WƒwC­’ò³D›ŽÁ© ð®ŸØÆQh•KEZiƒŸ†©•ÁÉ‹ÎC¿?!6Q¿çÒÐS81²–ܲÿq€Wœ„3Å"êr6ÄaMLÂÑÂ’ý~#ËÝѸ {’|¦à“¬úÉ.¸¿F’fP‹w'»±0׸Á‰h!ËöDOÙÐ'¡¼üZ ÞºßDèózÇ&Bï?äµÓø¼ ”ó‚Œf‘:< Ïú@è=¶b ´ôo¯×çQ«$|þ2|½æí²ÍkGggg>øàF…³³3 [·nœý.s)OóçÏgçÎ|÷ÝwT«V   &NœÈøñã‰ÏúÅ(žOì[Ÿúàã%?» ßhöíl8¸:A‡bb;< ?ÄÐH™v1:fUƒþÚ äQ!0é/}ŸÃëy`NAI±8åã„[|oç\äªfáJ ÜiwùÒQ$û›`c2=øDãlŸ)ávÿ'É6ÂL`Pxجý¼Rò‘Sb^)Îû'P’ 6ñËb#N’I»¨nP+/D%@½ðÃ%ýÊîL) ¼àóÛ0å&œ/ Ü¢”œ³‰ðÑ õ<¯ã…;eNV)Y^òs‡»©q:£À$ù>0EÁ|l‚-JžýÓélñ8¼­òÕ5Ã÷®Ð<ì‘¢Ü?˜UÑp=†Ü€¿bå‰ð½|PÞº^{:}ÅóÃ%„ À/''㌟fЪT+×·!ÿþÿ¨8øf¬:¥àíFб´¯,ëÔu˜½ÿw3ø4ß³gOfΜI®\¹¸t鯾ú*AAAY>½ì¥IðµT‹ô¢È6åŒá²öIýÿÓêÀP¢T(iË™ ñð÷yIyÐsçË^ð+){ÃH$9³|©!..Ž‘#Gxˆm8 IDATÈÒ¥K©]»6dàÀ,^¼8CÇÈí=ëˆí*§åñÇÄÃÊ?Åvý~îñŸý6ÆÔÙªl:gl{¿ï*üt^.,ùF´tqÚ§ãÔ´\fXQZç„XõèèUÑÐËC8Æ0;¤­» ܨ¸ ‚…3Y '³p4ÂÝиÜ}ƒí]öIN¹nýÖ]z<­eÅd*/Ô¨V¨ÐÉIõïÏDÍ놪XäñŸË›7¯ZµjÕ?“¶V­Z¥òæÍ›í¿ô¸v)½Y_¨k yËyO/7Î5>½\d.[Ô ýÌ눼»¿4Þ~¶‡>Zk?*›tf’ ,¶«€WÆÿîÐZb#ënl[_&§ø,‹ÿRíPCJè[æR. Tyá =Sôvn^P¸†­ÿþLWáF—<„+Yûù”ü¬-ÂÝ®š’FXg×ÊjŸd³Q˜|$0I{:ùÈÏš$˜sJAfÞü_UÐ1F’Ñ8CoG†:¹ƒ·öÅÁŸ)"4»"¡Ö8~nðG IÊ×#ÜÍðR^à.ì ƒ»qЮo ŸøCN£EÔ€FÅ¡~Q¸óeüs7îÃÄMPr¼8¶€®Ð¯!„Œ… ¡Ð¹:¸8%}¦qãÆ9r„N:qïÞ=zõêEçιsÇ6Ͳ-{ëö¯`ÏËS^©ÇÅÃÎÃÆ¹öÚóÆã\g‹¬…òCÞ #²',©8F‚¥€ÏÙItÓ¸sç;w¦W¯^Ü»wN:qäÈ7nœùsÛ4TlQ¿†b›¶[Ur”Ø®V„ðæY¿¨ØL£!§³ø¨ã­Åg݃•gÅ—½QœMú”»¡§p?7áµ.ü»ØÿÏ8áÞfá¶DogáD±Gºš‰·“Ñ7sF¸ÚGÚµž¤„Ë f# ûp¨ ¼–"¬Ÿü‘ýµ×ó\¡– ¯Æ[9ä뜇©ÿÿ¹8¨{6>o')è{=þ®ùeÁÕ,}÷@…ðí910£ŸÏC×§äuŠQ0Zë:s?<ÈD»Ÿ„Døù4›Ï|³vHÊEò°²/\œãÛ;1{êh¶nÝJ±bŦJ•*~Uš!å5pÁ@@%)ÎÚ÷7Ü7ˆå,¨Íkêk‘µ AHòýHÙ.ÎШ²ñöµEû¶µ/^L•*U¦X±blݺ•ÙSG3¾½'‰íiXVlѬb›šM[•‰”¾±b#“ÛL#À„ø¤Ï‹r6‰Ïª°^ݧ"¡œ'¼RP²¿žG¸€·“pƒº…+¤ ·°p [ –Y¸7ú# © nöšÆÙ.kÎh0IŽ&h¾S&ŠöRÃÂx˜®Ànàk£VÃjºÀÍDXF˜û^"´½,Éø®&)èû¬€$ëëîf襒E×!:®FÁëû ÞVØ{ ŠxÀò:°«)TÉ«ÿ=TÓš•€»1I +8q ®„¢Ãá­åpì øæ†1­x+ÏLÛº°pb/8wζ‰}F.سȰõ€qd.œ_¾)jo‘Õ"»`Ùͪo_§,à³%Î;G@@ 'ö´­ oå™Â˜V øæÛóÖr±EWŠmÊ*fî[Ù¬„ØN½£J^ñEËëˆoÚ{K|ÕëûÄwÅ+˜  4]\?Ñd'Ä÷]H¸Àç·…¤U¯´:Z8FMáY…¯I8+‰f±™Ê‘\mB&ßúÿŸ$[‰oó@~$f-’lÁXJ€¢É6IV`y²[QéÈ—€ôõ¹&ÉùïåƒuE%ißÑHE~7E·€”Ƨ¾ìo󪃷›~÷Ïõ´§ðƒaÃÁ.b`n|y­ÑÍ¡T'”R˜ÎOoïÅÏ›2æÕV0rÁ@Óª©Øo™ h‚FL·(×82[ö„e –¾ä:j ätƒ7àÐèxz{/Ætþ{”RPªÑÍùòZ?æ‰-²"bÄV&·z„·›øžý-Ä¥ æ$ÇòëúŠ&ç2‹Ï/Ÿp€>ׄ¤×´"J ÇHÎ92 K°¨I¸Ð T Ñ8Z~%œí[Œ ÑäX`¼…(8gr¼ ¡J:^ÌÎKö6CgwHæ=Ìøç¾‰€æ—àf‚T³?¥\wS‹"§æ ,¯±>;!OéýÊÀéçáí²úËùªTž/ ‘q0ÝÆ‘WÖ®]˼yóp/ù‹ÃZSa¼m€«wáÙÂ0ç¸ü)Ììå eñ©ß€ö’£°·t0°¼Z7 |µhìE’-²ú(’lIÁñ+){ÅhX´ItÓ2/+(_HlÆåOņ<[XlÊG Âx‡µÆ½äsÌ›7µk×âããcÓs™þ§ØÌçK‹ ÕœMâkN?/¾'^‰/²¤¦<ÐS4¹”‹øúÖ9Å÷7¿dÝ …y…ktÖj 2‹Ù®Â}B•p![4º9g)Ó8[,ƄوB/h7`’É6ù°á :ÄHRygèŸÉ‚´^àa‚M1Ö÷/ÔSA_ZQ䔸CC¥@¼ y\áËjp¸%4Ò‘QUWz†~uÂm˜Û²eKBBBhÛ¶í#E6'/ÝçÃõðÔHè²v–¶LÃ_ÂÖÁСJRßR«ö™ ö )BtØX#,Åo× ”“l‘Õ(…{ {"èð£{ÅHÈjŸ“YlÃÖÁb+4Û±ë´Ø’§F‡ëáä¥û·mÛ–Z¶li³s ›i2‰ Õ óe5ñ9WÅ =,>)-è!šœ‘½t‰h‚p “pÌ ¿³pžH„Ùbn„ áf(ájK1. I’ã)ÈhÃöÀ8÷`"ôÕ^U}á õÍÖ_Ìþé쥻éuPЗ‘(rj8qZAûßàÌðË ;šÈxëâ®R:t|b`Ú>]'wwfÎœÉÆ)T¨;vì R¥J¬^ýè8¸Xµ¦ÿÇ0<Œ…¦åá§þp~"Œj¼2¸Ï ^°I¹šFJµ(¨¥,²p/¯±®µeoØ:¯7»™¾^b ÎOÛд¼ØŠù»ÄvL[—"³zõj*UªÄŽ;(T¨7ndæÌ™¸»Û¦õÁ´}b;;>-¶Ô‘(î)>eGñ1gˆÏi$>(CÂÁÑdk ôÒƒ…kXæ2Xƒúfá: ÜÇVˆÇiÜìŽÆÕâ1.ÌFü ÐEIÞÎX¼h£ã.O€Ïâ$GçG-G'£hé¥àlf!/ÌÑ}ÖD‘SÃÚ0ðÛcBàA<¼TL*Ç= ªJUWÕ³A'óŠ+²ÿ~ @\\ǧY³f\º”öø¦£aÐÿ;)®yw• %)–&´‡Ðɰì5^’Á4rÁ$E·0–Ü–WçF$ÉFJ·H¾7ŒIë øê”Ý,¶ X^± ï®[Ñÿ;±iáÒ¥K4kÖŒáÇǀؿ?+VÌò¹„ÝÛiv`4ÙÃI|ȉçŧ<ˆã·Q|ŽÕ¾ÞÑäÌ襇À᥄ƒdEMÂq\γÜF“û^Ô8Y‚ÆÑÎ`l˜,ü`˜’ÐþbT´Ñq‡ÇÁ¯ PÀ?¹AFßbX’ç-yBY£ ú2EN‰ØD˜ð<ý ¬¸îNða2—(™^yâaÊY;–ÉdbРAìÛ·??¿FÈN™2…ÄÄŒ_¬»Q0s;”-fÀšÃàl†nµ x8 ¯×TòÒ^°çWBòL¯Ü„ãŒ#·É>Ú[#¦[øä‘s0 Ž_=RØ[öŒÑ^Ÿ‡‹èøÑ¢óÝj‰ XsXlBùqb#2:Ñ 11‘)S¦P§NNž<‰ŸŸûöícРA˜²xó§ü!6ô•gĦf',–Ÿ_²â¢ø– ‰¯É ²;šœÙ½tï9IõO-àó@¸M“pá6š¶YQãb&›mÁø0ý>Gò]r?™ÀÁ’ K,œUPà s3PÈWÊIf©G)Xe»óË¬F‘SâJ¼ò;4܇îüûUYv`˜æ|–ÿç#2___™>}:îîîÌŸ?ŸªU«rð`æg*+¿þ æB©Ñ0i„߇ªÅáë6¦¾¥µZ£ì4­&_³sµ-à“Gz÷Þ¼ ±z/2»8'‘|£À²G,{ÆhH­€¯´ètØÑñªÅEç'mÐa®Ø•…àƒRµjUæÏŸ»»;Ó§O'00_ßÌ÷q;!6ÔÙ,65[¨S¤ìº#¾ä•ßÅ·dÙMÎj^ºûLë¤ÕÊM¸Hz˜ë*Üæ¬®c‹ r~ƒåÔ8Ùç<0? 'Ñ_ÁŸ@`¥É6i ·µB¾‡@Og”N!Ÿ%h•ֻЖȮ‚>[E‘SÃîp¨¾úÿ 7c’Š.fUƒ³èîÆ¢ËC[ˆnÿq^t½ØÑýP¾¡ˆŒŒ¤ÿþ´k׎ððpZ´hAHHíÛ·Ïô1'‹-íí/¶Õ^Èã"¾ÁRü}3F|Gõ-âKl…ìˆ&Û¢@/=ÜL.êqä,œæ!ÂqnÛàm¤“Æ½Ê \¬¿â‰ÁA’#\šSmtÜ£‰Ð+Fº˜Ls…&aß&è­ådd¶`/=dGAŸ­£È)‘¨`þY(»¾ÔŽÿNY8Ýú•¶ít* †Ö7'øá$œÌ„Ê‘#_}õ?ÿü3ÞÞÞâïïϺuëì¶ŸcâaÙP{2TŸßµzzúÀ'6*Å2×ÃQpq†mŠšÑ"É‚ić‹ÌF#É–=PYöŽQàdÝØDt• ¢»­ž]þvèvíÉ¢ë1v|3±nÝ:üýý ÄÛÛ›Ÿþ™¯¾úŠ9¬o®{ò¶ØR7'±­6'$&ñ§Ûˆoñe7ˆï°Gz™=£É¶,ÐKîÑ[ë°•š8 —Q·9j£@ØT{]׸˜ÑFO?ñ$däáKZ/¾Á&èi£ãþâ´'%W(‘Êæë¤õ(Ü'3Õí{ôÙ3Šœq0àT„7´Fð5’ÁÛ >žðFeym™™(rõêÕ9xð }ûö%::šÒºuk®]»–mûúÀEx} s·iO„1Р|ÑŽÛÓá—0²Ô/n:&5+€—'?/ù¦F‚¥_ïuF’-2­çð•›²W¼&Xã)íÂ[Ylûf ìUÐgï(rj8~o‡Ž{ 4òÑ‘¢…=²~üÁ5ÀÓ~9 GnX¡f3#FŒ 88˜råÊqôèQjÔ¨Á¬Y³d•pë!¸=Gõ9ëÅÉ.þÎÝ„\îÐúY˜Ø~{"fÀ®¡ðI;xμÜõ££–׿F‹"CÒÄ:#u¶ø‡$Ý~ôŒË^ÑSÊ…—»èÖ'íD×"fˆîMl/º˜Ë]tsñsÖ‹îº=]v”RÌš5‹5jpôèQÊ•+Gpp0#FŒÀlθ9rClª§‹ØØ,?|zˆÍßÕT|@h¤ø„ÆÛÅGdlM¶W^F0ç1|žwñ1 —ùÐF55®…ƽöðäÁùI;¡¯*À[À&¨©àª ˆi·XØç•Ìð­tÕÒ0j¸Èìô›‰2K=»ðMœŽ…‹$ôµ½œ¹W9ÙEN ?^‚W`X^º>/ÉÁÔ™«^Îãoi­£Æ[¡¹Å‹gÉ’% ”bÆŒŒ9’èhÇN÷p–¥3öÀé;òÊ HhPV"Y Ë‚_aùwíueB"¾¿ßNÃî3pã¾cΣ™V€µu¿ñl‹¥ðÊÈéFk’—<ð%Ù;.tÐ’—èWƒ²Ð  TN‘攨¤EÛ.M¿~; aÉ ³~Ë o=+:üΈr`áç±cǨY³&“&MâÝwßeÒ¤I´lÙ’=zš¡cŒßmʈ²WÆW[ W3¼_F<9!*>ý¦ü-ßg',ÑäÅå%š¼üºüÌZ”r‚ìç&z/…Ù>ÿ8-¬Ž†i‰ÂIj¸HtÙ„p–Jf8•(\Æ—×WãXîÀ{=‰p~Oj°?h7±‘ F"ÞUÐ.öºAg'8èSâ’žØjÕ¥Ù KAŸE)ÿ(‘9¥tD9%¢à£c°ð|^EZþ|â½JÁÐCÖ÷ÁXr»ÁÖ °/ƒOI]ºtaîܹäÉ“‡«W¯Ò«W/¶lÑG›ve!—ì½"99Â"`埲@ ‚,½~¨þTÓÖ ¦ò;'®‰#·ç Ù@ü,¯ÌãâaçaãÙËÄ:#îiêžAGdÏXRuîgé(‘?‰7(ûï1òq °ï\!Þ}î¤!×é;¢»µ ‹.¯tð(öèèh̦M›X´h9r„7ß|“•+W¦ûù}WŶ6+!¶öc+CˆíŠÀ´*P&gR ä½CEv–_‚l‰&/±2«®¡§­¼¤@/³A«,ùQ%\äýÂMzGÀû.ÂY,æ® xŠ«Æ­ŠAçzRñD’äXàeûMP˜c‚>6¸‰'áÕXXë]à‚’™éÉûf7,}+ KDù×bðÖõŒ·—qt9%,¯Úq£~¹aM9:øPÆ&*åtà 0!¹È¹råböìÙtïÞ€5kÖзo_nÞÔOÒl­ øÒcéÿîHX" ÀÓj•gß°,Ô.)N¿|!èÛ@~çò¤(Ø®Óð×Õ¬µ J •¤øjÏÑì!:¶†¥èÍh¹ÔÉe.hÀt‹û‘°ïo¨WU†õÁ¶=¾ÉÏøŠnXÞÆMqÆÀÞ󢿖®‘VF^–’Ü£¢ãI²[¶lÁßߟ о}{V¬XÁóÏ?ÏÛo¿Í½{iÛ ÁI$ùó?áA®Gù\0½ ´Ô:Ñ¿ ïücG#+Ñä×óÀœ‚’¼ñt½bßüã´0ï! É!Üd“³p…p—6’iŽÆ­B5®Ë“ ç'õÄÂö v›àuà0ËÇ]¯åó|ä‹\Á#~‰—ꎂ¥ oJɃúº<ã Ã2¥‡(rj°mô+ŸT£Ú¤ Ì:ãÃÝ4žÐûWü°û2ìLçíaݺuùî»ï(Q¢>dðàÁ,X°@W{¹Ph^b`å_Ö>2vœ”ÒŽªÚSI„ ^!¯Ô”’7¹çLq>pQ d–©c[Ó¦XRŒ\¸gÄt Ëž©WšUÏ:INmÿçO‘Ãiý¿ò/˜ÞTt¹P¸öP×öæÍ›tèо}û2}útºwïNýúõéÖ­ÁÁ¿Ø;CÅÆÖ/*6wZƒšr»À~0 œø›ˆXsæŸÉ\Zƒ½`m4Ù‰$¿ R 7,›ò8K€M1ð¼³p'`\œp[`©"5ŽΓ ç'ùä¯)Xa‚ÏLpTÁNw|T6C' ~Œqü¹Z úþŠ•'Ú÷òAy×´ŸhõENíÉ~öiX*D¹oiR^yJ ì¢óÿn äá C4¢—VG ggg>øàF…³³3 [·nœ{“åÓ¾æ/Qš×`Ó¹ÔWºti–-[FíÚµILLdòäÉŒ;–¸¸8]žw?ùºä˜}ޝ¿"knü,µœÌ¦åeädñœÌÂÞàW2éÕ¹Ñàê Þ¹%76<Âxò‡GˆìÞ¹å\Œ41dÏÜ”=diþ8¤–“ï’¢O¦#rò-:üâÓ¢Óz#É'Ož¤N:|üñÇ 6Œ±cÇÒ¢E ºwïÎÙ³gÿõû›Î‰­­VHlïìd]kjç‡éUå+Èejžž‘‘h²£ ôÒB}³pâDá*¶xÞ+p(àS%Üê¿çÿÂIŽFfŠ·Ö˜ ® š]û˜dÞ ˜a«;ô‰…e:p>)èÓ{95XF’vy ¦Vã»§™D”Ç…[±0¬¶áø=õcôîÝ›/¾ø///BCCéÑ£AAAº=gÿP¹ ÜŠz<é·.Ü’µt¯ü;µêþ:¥d½ßB"Dǯ<¾ºß :,dÍh(˜/‰l*©(%²ö–s¹tÃXòÇÅËÞiSWöÒÒdõ´©uwI>˜(!QÒ%ôÐÝeÓ9ÑåÊE·Ctxâââ9r$,Y²„ÚµksèÐ!Þ}÷].üw{‘‰¿ÃÄö.8ù]%rÜ«¤Ü‡°(xÿ0¬¼h²fo¤MÖCÞc*Îðµ+¸÷Á+Q¸ÊÅ,^xO;ù5Nõ_Á‚$'¯(Øg‚JÀBtQYSØR&@Á¶8¸ìï8ÃW¨`‚1qŽ7éô%Šü/g¬¸ëäuÐûåáµRÒ cóm(îÇÂáçYùòåcþüùtìØ€•+Wòæ›o¡ï°à«Zyåß’“ì(ܸ?’Ò'¶ni!Ì ËBP±ˆ¬·i{ð¦’]§¡m]ù™QS-,]!Œ: Ü"{ao9£‘dËÞiS^ª .eß5( ¥R H‰Žƒ?/h©Ag ø,ÜÖÇ9Ä&ˆ.¿]Utû}߇   *UªÄܹséÒ¥ ß~û-­[·¦_¿~ܾÔ,üç“bsŸõ†¥ á¹|’ƒ›Sÿ–Vž ö`ü¸h²ž ô’Ã|â#]äû/ã¡h´7 WÙ¯²vì…w:¥q©þ;pþ¯œè] ‚½&脲p¼’2 ‰…ã‰0ËF¹@93ôˆ(Ÿóã úÆÞ4^9%ÄØXtNZ µ+ ×áØyÈï–”óÖ¸qc–,YBÑ¢E¹wïo¿ý6Ë–-Óý9:™$w2ÖÕ";q?6—2q¬F‰¤ˆ^ý2B^JyCÏ:Ú‡ÎBߊP+œº§oÈ×3á¡ón’lÄ|d ®¨ \O(ãå BÙòÕ¿˜Üv¾Ð®G2;-ÑaËŒ?/ØwÌsV±ô˜än~0b'$è8¼A×®]ùå—_˜={6;v¤víÚôèу;vbkg4Œ´ìzÎ<0¦®¤Œ&¯º}ôU g°Ä ::I†Å€X˜Ÿ9=ÊU2‹Qg²p¨»ü·àü_:Ù@7kMð‘ +ø%³$Y{wÎ2á/^¾_å*›µ¤;´+6€©ôuÌ+}EN g@ûß`h˜ú¬ü¬‹/th?\6£šõç•q³0›ÍóꫯrîÜ9Cœ[ó’à›NÜ‚?®è[Ö˜ø$¢2hÁ¿ˆæày-—ùY_Y)~_HóÉëp&y>}CŠ Kº…§íY`‘½ NHr7!À2\¦<­‘b¯Ç|(VÖ/'`ËßBŠCÂ$¥Â(øãŠètùü¢ã0GË–-#88˜¥K—R·n]¶nÝÊò`Ú:ŽEq3ѲÞ?ÓΟ/üMv‡?JA%ýè6Á:7¨f†caK£ܤdÆl?p¥;à¿çÿÚ ÿŒSð‰ ¾3AíLÞøÚÆ»ŒoI€:1°AÛ´hDùÎ úŠ;ÉcáÖhcF‘SCY3ßßœÐÚºO„SsP#÷°>¦=æmœ÷~¯j¤ÙqãÝ„D8tIÖùPxÞ v…ÁÈà¤è`rräã%«né+,B#Í7„4["Ðgó/bXØÀÓö,°È^8ÛÀ¹9Cédá²ä~—+(¹ÄØ?,º“êBÃ"03¬70[v>i(:hŒgvÎ;ÇóMXÒ¯%mÜ.Ñ=ô—z„ W 꼜K³ÅO⬽ï炬·½*f!ÈEMpVA›˜Gû [¸I‰L’äòGrÆd! ø’l@Lü‘WkµŽÖ¾B°øò”öí¢sœ IDATD"ÔŽ†ŸÜ ~s‡Wc¤ ‹£±+&]ƒÏ|äß­MðS|.Æ÷~ºš £vN2ÑðÕþ41à¥$lSè^àž‡¥`Îiøûž¾ÏÉËÚ—dD’œ•µW°ûÃ$?4øßEòÉ£‘¨‚¾f/S@þ¯Hhüô£ŸITpñ–F¢®?‰>3ë}m“ÃÒ:í†Ó-nØ© œ³Jz? ¶Üǧò?ZD—1ñI>ÿaí>†=&R·ÿ)!É• Ÿ$Ü@tÜËîë|C…\ðVYxµD<¹¯oáùpjÖ˜º¯²qò,v-ÇËÕ}`Ài‰ºO¹ÀôÐ!'ÄÂëWaW”>äëàKÝ ð["¼7S\ïs)¸Š5È­q£ÜÀj3ýWñŸ$É è­ài-}¹ ÚZ‘Œî×z^HÅÜTÐ,æ»B/gøÁ FÅÁ§: ¢í](¸9Ý¡ƒ´Ì SnÁ§·²´¶-Ð*?äscÑÎL^ñ3mÚ´`á¶² û!ŽçòÀ›e¡ž7¼SÞ.+ÃJæþ½óªJÿøçÎLzHB ®"¸ EЏ²XÀ²¬€ ¸ÛOìˆìÜ‚`aÑE¢4 DcAJè„$Þ¦Üßï½L’23™¹ÜïóÜg ™ÌÌ™{Î÷ýž÷¼åøä(ØýЛ~s'’‚ý<¬[¬<îª"Iéh–\ßì)ûs‹­•õ@êºmcgíšÀÕ—”ý;»Sªs謴'úЩ³ëkŸ zŽcìIÖ?{mŠœë>”/±Vú>ìóà}Ðç>§³aÓa¸ªµ¬õ÷“ýï3YàÆ–ÂWÅJ@b†pçÿ²ì¼˜p!w´¾„ùóç³fØ0~~v—†:¸¶1|€)ØÞþÑXþç‚ä<©ˆÕßùÁgœ$]ô,ÀL*©¸ã]ªVœ µæ ®‰¾Y¡ÀEH¶;ÔÀ¨JbŠdCï³]‘ÒpÏTóo[*Ó{L­<9¯¸£~SeB?”Ê'´¯Ð#H_?KŠ$©ot<ÑÆG‹Wyun`ÝË1š§²í„\:|8§NbÒ¤I¬\¹€åÙ°ü t‹ÉaL[+×ñBxw?¼½ŽøQòØíZ¨Å?þZ‹×MRZÍÿÖ¥ºËÑ}U®¾ò¹<˜úñþ°KËþ]m<˜g÷8&YÿìU%îUåѱU~døÆ£¯Ï¡øØÀ_ü,"ùöKýK$· ‡‰à®öÒ$QúÃTX¸vŸY#¹Üyç¬]»–E‹1|øpòNÌ€åO3¦Yà‰ä Ä{ÜFkãüaŽ$çýÉ ÿkׇÀãõhƒq;Þ\À#çp¼ÇU‰[n©À¡j*ÝgM¤w-.àü†í||*p« ëø‡IÕ,­g‹¨Æs_°Ã—Œ·AKÅG#¾@ß`Ù«*¼U Õ/ƃ§áÍfÐ=TÂ/ÖåÃiðk4deDs'¸œDÞ8‰72nÜ8>|ÖswgÁ”0}·å{:Bçhi—:£³dd/ø6¤ÕïιM4ô¿ ì°2À3%Cû(vJ²’'áp¹c”¿(·™8W,l—8¹Ê£²XØZü¬÷ZÄHìwE±á‘!•ÿ½?Ćÿ–)s©}L`„)T…•¿Á›WËZo]¿'F 0¸™xoh)•u~Ɇ·öŠ@ΩD­\¹’mÛ¶±téRÞ8 VÌfDs+±©VNæùý}¸$^mCµÖäIEp_$j°SNÈvI\r[+¤ÖCèdÅ™OõC8qšf9T÷ù+¢…ìš6JÅ„í|ÿ¾¦ªðºï)°§­õlÑÕTR«Ð¯H‚ìûY`kèÙAö¾Àƒ UËÖvü®z¤Â¤xº©Å®vðÆix2CŽœü]»vå‹ûoÁúác¸º]Å£/½ÆË/¿ŒËUõαK\òü?äqrGÙÊ}íÉÉ’pºŒð˜.r¼ýÉ-@bGEê¨:|8ŠÒZø—ãgÿî\Uâ/«¬z~ƒ=8áý&3ñÿÚß«Œ8\2—.o.skóáÀ½¹%²Æoë,kþÙï|ÿKÓÉá"­¢ˆÝ+ ~SÍ:·fÈ!L›6çºöǺû’^{œk_ÿÉÉÉ~ùýGZàÉ&p_CÉkÉpÂãé°(K<µg¸D…u%pK(\ ¯çûösv²H1€ QkV à€ Šh–oÏ¡Wº#HÑ4Ñ7¦>6E²Ž7Øä HW™ª5T†ze‹¼G’ ®(r—kù>¤l¹_``°<~ZÁæÞ,È‚ÿäÂÓM`RC˜Ún‹‚ééða¶ÿÄ%)ŠÂƒ>Èœ9syt³·àÅ­5_Ößœ”«y(Lh“4c1¯;<ÛU—,Ü ;|èAã§µ‘k%’õxä4ÿùLùŰë°\åQQ}Þ‹›Áå- Ä–øá¨á@«W­Ï¥Ë›ËÜ d‘¬¯ñúÉ=‰0þ[ÓâÉÀ¢½°x?œ¨…Øårñâ‹/Ñ» ‡B\ÊF¶oßÎŒ3xå•WPý¤U¥Œ‰†šB -taÁiéQ‰=þ¤HDò !¾ÉC­RV6F\5/+›ZN³T†¦šö kšÈ„)’Ëàn:+ÐøCÕÊc‡Ûjûj¸æ©âQÖ ÿ7Ä]øÛÛhcƒ†Z—À—ªXäN©ùN¶„`\´€É1pošEÕ'âââXºt)C† AM?Šš´‘bÌÝq°N¯{¢žýžÿ®k S:ÂÕÍ¥›ßía{&,Ø ÿ:…^ÜØ\'õSçÁW]é V»¤Ã[Vì<(—Ž‘pì^8‘-Üz¿šGÀuoÊ Dì6HòÈ?ž'kþŠ8ïÖC³Â_[ ·õÒ’7U`Ý á¶Ïz¦±ÉÜùG„$m$8'ƒ¹sçríµ×2nÜ8ޫ߂ïÝCÝv äµ:vmm1ØUè 1ÈòÁ©Ød›4(³+µkP¦k”¶U<'XÓ<­ï5-d ‹ùJ€›T8 ^©bçUÓp‹Ò(n-†9vÉ"], Áêåñ=![èÓ*¬†(O*‚¾áöãpÜ!¤²³­4$ib­Ÿ{tã7’œœÌ!CHOOgɘ«QPY“ 9®N>9×|ÿæþ§JĨ¼¹^އ xgŒzmäå)þ݉«ºÐË¿í:¸cˆÑâtOþýÐǸcÐç’>·NUÖzéµïi\Ø@8ëÈ Âa½ §ÍýM8îšo„ó<Å79NX“ *KÆ\Mzz:C† !99™o¼±^¾ç&V±];ÛŠ-;îÛÖ÷`õ?Y.Ø\A óòÚ±"š`¦ æØE3Ô¦úÜj4yEÍsDÓ@%˜0Ere^m’wwU&’õ XË÷Q™v¸½DJ0ÞkƒÏC ZñÞØn•Ç%5ûœË²á¢ý0÷”WŸÒ~mSb|7y"""xûí·Y½z57æË/¿¤k×®t?%å>ôÒQþ¹0m´úîØ&ÞäFÁ0µüþøßUpc+w’K]l…QZ)³e)¿žl¸´©$ŠúS¸EE²¶v² ’õ1èc H‘œ&sêÒ¦2ÇúZu‰p€G„–"Üô¿«„«¦vîÚž)\ÖêSá¶?¼T­Açäî§~¥k×®|ùå—4nܘիWóöÛoá33%F³Y ņÍ=%6mY C?ÕbòoôâÚ‰VD Ükmp{‰h…Úî_”Ó,åq—¦uŠ4ísÜ”¦H>¶“µù– å~´Pd·u´Ž;ïROù¤ ×Z!1¤n-$+C”EJÀ¼R‹xª<L; ñ¤òE+Ìo.»ò„0ïÞž={òã?ò÷¿ÿ¢¢"î¿ÿ~† F£ÜÄGÂ);|áåÚµ…NIâ»â+èµÞÛENÚV÷…×ÁÌÎ×\\Û‡‰H>øk©Sc±Âþ¬ÀN@Ô½®YÅOô1²'9·DæTˆUæX #ù¤¬ùÆaÂuAóPá¢× 7 m.\õÞ~á®+¾.+ôr.Ì™ÂÍñ‘Ð(÷Æ ãþû裡¨ˆ¿ÿýïüøãôìÙÓ«ŸáÌégs±YëòņM;Y»dôÏ´ æÐ`ñ‚n§ˆ¸Ö*š`H‘h„ºà¨æn¡ˆv)Mã iží¦ü3Eru±xE•XhUêwmµìÏC5h>R¶húR\ÐE«|Ñ×Ãwåžp©0P¨Â–:ˆ•_KàšÃ0ò¨tèë ›ÛÀ²8I€ð$¬V+3fÌ 11‘‹.ºˆäädzôèÁo¼ªªŒÕŽZW¦û¶³ÓŽS0a;´üJ’J„Ãì®pèzøç•R1£6¸=€ÛPW„îµh¤Y—S…Oô14 ìqèsª{3c¬}Íß^Ë‹«b…{]/\tA¸pÓCIÂU¶û6ù¸DnÛ TUå7Þ G$''sÑE‘˜˜ÈŒ3°Z=¿×Â&6iK±Qíb³®9\·²¦©NØm‡h öì÷ÕW³ý],¢z‰6¨+œšVQ(Ûžº•¦m‚5­³Ô”}¦H®)ÖÍ€UZÖ'€¾ÑßçÁ÷: BB1|á„XևŠÎÑšAÜ顎«sá’ýðT©0& ö´—jÁØa·iÓ†7òì³Ïb³Ù˜7o½zõ"%E,‰üM¢ÖÓ1þéxåwèô_¸z#¬:"eÛþÚ6‚”k¥kTP5…X( ï(%®–D$ÇXÒ^e0=Éþ}N¡©Èšw¸„UóD**H8&åZ᜿¶ZuD8©Ó…£N×Ó)ŽÎÍ+Õ­/%%…^½z1oÞû,7n¤M›6u~¿`ElОöb“ŠT±Q—ì÷\ƒ¬Ï¼r1Æ&6?V P\»|§Ê°¯œv ×4M3Mã‘/k?Ø*\P床N9zƒpLçháœgR„ƒnÚ"œTßy¿[²…£Û„ gë(..fêÔ© :”ãÇÓ¯_?víÚŨQ£jý^zmÿ—cÅ鎜'3ÄVy zùÔëBên›ÄÆ,6ÿM‡h€lß8]«èÚe¡"šf¯¦qœ˜0Er-‘ ŒT¥ÀXà! }*[TG˜ßWSJäß3‚àß!gÇÕ·…I‡S…^8..”uI0üïéÜ×&¨ú¯ŲeËøè£ˆ‰‰á“O>¡k×®¬_¿þì·vÄúÑIÿê)¤ÿ Ú|·&ÂÆ“a“z¤»þ [†Àè6RÁªÓ3Û?øÉ8ëG¯>à"ÙLÜó?œiOÝÌ8ëE_ûU¹±wl"\2¹£pËÆ“Â5m>î9âGu®U£Ksvi¬_¿ž®]»òÉ'ŸÃG}IJeËˆŠŠªö{´ [ó¿ Äö” ô4~´Ã'´²ÂeAµ0ĶÏ[?¥Dl¿7«®UÚ+¢aÆ"šf¤*Ç„)’넟€qª,ø¸B›pÞ,a»Ð)†,Uê)o•þëµÁD-Nä7gÙ.BžFù¤ˆ $£øÉ&Ò »*$$$°{÷nÆŒC~~>'NdĈdddœõÜ`nn*ÿ^æ§âËî‚ÿ†A_C—µðæm‡„&ða8|Ìé m5û… ¡wäçcÝ´j ‰H™…p$7°Çb†[øŽäÊÜj&sÍøôá€Þq 1§«pƇ}„C²íÂ)]Ö Çüç°pŽ?Bçè››VŠ—‘‘Áˆ#˜8q"ùùùŒ3†Ý»w“PµÈTĶüÚ^lMùäro ÿϵ5tC-7šqŠØô›­bãÿRìÝ^ ºV¹B £jšÆ@þS$×7VO«R³°·*+e¿—]˜ëœÐ§XŠ_nm¡Ð½w«‡¶Û]£’Råu>ÌPž(Edåa³Ùxæ™gøöÛoiÛ¶-;vìà²Ë.ãwÞ©ô=®m ‚`Wüa ¿æÀ}?HÉ¥I;`×ihv†}Ãáóþð´–ä½òw(tcÍœIÚK ü±˜áþ }n%y¯Ð! Ÿ÷Žx´³pÆ®ÓÂ!­>Nù5ÇÿÇôK¾pu£ áîÊðÎ;ïpÙe—±cÇÚ¶mË·ß~Ë3Ï<ƒÍvvrŽî€y¢‰Ø˜sÜeJ}‘Äý‰¶†®¯ÅF³»fË/·ˆmïSìý®»û5ÍÒ[Ó0O«¢iL˜"Ù£x ø­é‡ \>XŒ¿iY®›]ÐJÛ}ލA"pß`Ùq«*¼åÃc¸ã{Ì]¨½ü‘@ÇŽILLdÖ¬YÌ™3‡„„öìÙSåkëÇv+L|å9àí}ÐýpåzX–*œ†ÇÁ¨FÀQhS wµ‡Ž‘¿^ôcðÝ(eg†[ø'v¨©HÇHYûmŠc Ãã„#–¥ gtÿŸpH^€m¤u®sŽû´gϘ3g³fÍ"11‘Ž;g‡ò%A¿ƒbkŽûð;ù¶²]Ð-ÚÖÀÐN…[)bÓ{‰÷6\ªh«¦až2åœ)’½ýˆâ-mWö…}}ð¾Z½Ä%ˆV†ÀôjÆB=¨çU!§Žã¾+„©p÷ iw­'W|9èR’7Ó«W/:Ä Aƒ˜9s&v{ÕAdQVÞXýòöP~Ÿ·oÐË¿ Uãí0¸)¼Ó þ¯‡¥½a\;hxc<“´g‘b@‘øcÙÀí©[‡ËÚ^Ú[ÖúÃeínж-nhõ©pÅ÷{Ÿ–§ go,^ìv;3gÎdРA:tˆ^½z‘”¸™/]z&)<Ã)6¥G*$ÖCYÆbÖiC®¯æfszØîÄ–)ÛîmôE´ švÑCGMT6ó+¨>r€™H)•kõ ܥ‡^~ßàŽøM…9Að|tR`RIÕ-$j^ÛOëѸ»€YðŸ\x¡ewD”pͱŸáæËØÚwìàtVVµ^ëæXµÀ×§á˜zgfÃïé@#ø_|–+õNÆŠ½½­\ûóàë4øæ¤$ëóóš½zi®$#…[ &YƒÂ-Î$ï€HŽ “u}U, jí#Ïæ‚'e}_ß®‰nÈ0Àœ;VßdÁ †ÂáïU£­Û¦M›ˆïÖµSn£÷–Õ\“~Õ¢ð^~0Ó“QÏ%>)‚[Bá†x½Š°¿``Q0Œ·‰-|Ä/Ø}óÇï*R9ã M»ä`ÂÉ^F6p ¯*p/ð—¨0 ïïÐ^°Ã, ‘E×Á#‹+Þ‘¶±ACmù’Äîv»j0C—,AÉMÇùä¬ÉÛè½z>k¢áÞ"9:;FkÆpùIã̧~Zi¤ÿ¦Áü£0ÿ) ti Š…Í S1ªí#á®òüßrÄ ~ߦÃI?òr6†ö1Pì„ß >m†[ø'~Ë”9Ö>Fæœ?uuŒ …ME_ Êl8]›Òac|}~ÎrÛkKÉý¢á]ƒô ^~RDòèjŠäî¡ðft½WÏÀÙõ ¬O.`hƒ¦¬?ž 6ÔëxÖK(L¿`ˆ±@V'µMXý,Œ-†Õ>÷ 0xTk|ö&ð€YêÍɾ„¸O…à f(pp» Þvð­vB¿"øL[|[CaxñÙ±MGÈj9킃õÃÂìÙ³y衇°X,$&dìö4úž†šº[‡.: gP©‡ .®Š"¬4Hî¯ÕOÞTªÞ³ ü”%×k{¤A@÷†n/sÿ¦bt;EI)(HÉv{š¿9Y @bD~N—  MPUãˆdU•1)öÑ«Ã%sìòæ2ç6®¿ÏÒ0XÖ§î)î]¶Žn®]ÅÚúL:]y^‹ÎýcŒÃs+OÂ[ ‡ÇW~ØÄ O7I %ô¸¦§Ã–¢4–* á’V¬[·Žyóæ1kÖ¬2õó}ºŽ\°¹…À°³Ë«v²Àšè À®/†$pa⸻ph:e¡)Ùê3&¹XüE…,dRnV Îï›ä‚+Šà—,ÂïC`h¹X/½<ÍÆzK;wfëÖ­L›6 —ËÅc=Æ€8šÊ²lwF²C…) %cyJLÅ“rt3‹k2!Ç [âÖ!Ð6N;ৼʟçRá‡S0÷7¾ ­‚Þ_ÁŒdXw pi4ܬê #àÇkàåxIþ‰ òí¸â ÒDÄãª(R:ͱ|*2E1†7yW=…\DÉÚz9^ÖZÆY{÷_$k±Ð)ksF²¬ÕF«díÎýMÖrU‰ß?å '´ Ž0rœÂÝE¸¼"!2%F³ Å&è•’–eÃÔT Àc=†ËåbÚ´ilݺ•Î;×Û˜>­¤ûÞP«ØäŠØè+Š|#ã4 r3¢Iþb dS$ûÖ}Tiýx9°Mî>xßcªx”W:!Fÿ†Àdí\ Ê-57Æ+õj¡( S¦LaÇŽÄÇdzoß>˜={6N§[á–¯mÙÄ ó›‹g9¡\•Û4bý0Í8s§Ÿæ)JÌ®Y k‡ Û2á¹_àšo áÇÐo<ñ“x©J\âyžÚIÊHeŽ„­WÃóÝ`hsiBàMt3H;j]$ƒ1¼È:ŒXáÂÛÉ{6Y;Ïw“µ”9RÖÖÔN²ÖJ\²öžøIÖbÃem>÷‹¬UG vX.Js„ s÷måD²~š8¿¹Ø€ò5÷u8NfÏžMBBûöí#>>ž;v0eÊEñùx>ÓÖÑÐ`ÑÞ~²MlqŒ"¶¹_‘Øjo£»¦=.G´HU´‰‰ºÃ ·ð~Cj®R Ÿ¶›«Âj/¿o!pk1Ì‚Gƒ`A0t±À‰`ñª°ÅÇžäØØX/^ÌðáÃxÿý÷ù¿ÿû?rs+ï(¡wIÑ^‰•x´Ím`yüã$4 øH8e‡/ Ô"¨¿¼)«n¯Sâ‚-ér=¡V¸²‰ûè·W#¸¢±\Ó/‘ÆÛO¹Ã3¾Ë€"zçõ’\F¨lÑPóä6H>]í´±ð±ìòR¸ŠÖPP)—’݉™Þ[C›²¤DÿèÀ®äS_d ‡ÇGBçI"}1FGIhÊA;VåÂÂ,ØT¸s¤_Œ1~Ÿ#¥„|‰;¬9&Tœ™?´¹\P³Ìüî µcµ¤Öa¤ÖÔú\ëÐPæ^e"¹¢ 1 J%´ªÀÏ~T!Æ® 7 n(\±*=pïOÿp˜#h±»%bŸþžïz pï‘#G:t(=ô³gÏæž{îaàÀÜvÛmìÞ½Û+cj­ÀÜ`¸Ù*cA…k‹àGpyÜ¡ùø&´ÓÉ&<ŽÕ@?>Ó&óV†k^fo¢•8Àn…b‹,â?‡Á³v˜g÷œG[Q|ðAæÌ™CH@¾T˜ IDATH¿þú+£G&))É£ã qÈN}£rƒá/ð·(¹~)±üA¶´ (‘¬Ç#g×ÿg9]«È×xýKœ\úó+«ño ¤=(Õmψᩜ°û$Üt±Ì½e:?qv­ñ†ÁeÿΟkëÜ0¸¡pE ‰äh Ü-⸳6Ïœ*|– J` UãvÁårñòË/³aÖ/_NçÎÙ¶m3fÌà•W^AU=£^ƒ‡‚`fDy@®Z¸|S¡°FÀàz’0aŠäEp…&”/¾Wà¯^Î:½L‹GNw@§{·û\Œ·Â}vøªŽá qqq,]º”!C† ª* ,`Ú´ixÞµ;X#Øóླྀ þ 4ò}½<×þ™#‚yg€xüèõ‘³üï³,‚ÿ– *îvCK¹ l·°+ Tþ Ìp‹@€>×®Œ…»/t{‹›”ÛZ×JP\rPÆ£¢ BSǰ8 ÞɆÃv¸3F ·¿åa“‘””D=xùå—™Ê?õ.GÛ k„$Çm €>¡Ç aùA¹@Zflæö4·‡[.Kn¼|1Li G àPʇÃî«8@<ÿf¸… Ä„»¯Ö2ïZ…C‡H™s½Þ—»ÿæPÛS¼1MþHØ–#Ñ5B8#Û៟3Ü"'{“b §6§T`}¾8.>Ë+R¦sùUÁÂñž¦‚‚‚î¾ûnÖ®]ËâÅ‹2dÉÉÉLœ8‘U«VÕøõÊ„V¿»Ê:›ô 1í¼øOF—Ù€•ø¦q™ S$û …À­ª»UäºàV‘m4Oò¾R¤ô•º:ÝÇDµ ÁˆŒŒäÕW_e„ ¬]»–;3´4ï¹ »AC pJ¹Ò°«ðq®\ A’îÙæÆÂÒlÌ¿øÙQyB4XØš…Ø‘îP,= @ÇHËi76‚á¢rU†EeEó¡|y]]TŸ(ªºá‚¯`†[xš‡ºEokM—ÅÍÏ%è€>9ÿ=.âxo^€Û ìȾHˆ†µ~Vþ²sˆðî¸h ¯ÈtÂwÿ¨Ä°¤:…ÓÛY…ãðRRâš5kèÚµ+ï½÷Æ ãã?fñâÅ<ðÀäå{rTZQ‘ÍܯñT;/”j¶¯*p¯¶ñ˜£Â,ŒÑØÈÉ&Ê@f¢•jÓ&}þ¦‚'ÃRcµ…úk¹UTG@ç¹æÃ;¡wxëXÚ8÷js¶ä~~"’C©849„»þ]¡pìr ¨»¡î ŽÿÁ‹ë8--áÇs÷ÝwóÒK/1a Àm·ÝÆŽ;*ý»ÊB+*:}MÕ~ÖÖÃ"9øHkÑJË©ð¡)¥L‘lt|¨-ªµÉŸ¨ÀuªçŠúkú‹Ê–MB0¬V+Ó§OçÉ'Ÿ$((ˆäädn»í6RRR|ò] ÔC-ª™mX¤J ÓeÙÐMórŒ‰2.¥ãÞË‚·³à@=–T2šH>ãYŠÇä\©ðs%ã«®ç°]„\ýšVü:y8XÎíé°Ó“|ÑTEDëph‘Õ°2u=YHΑÜ9Âx"ù‘RœQ_hcàÎ)åë‚5¯ñKD$ †½í RUÞzë-¾ùæV¬XA×®]ILLäÉ'Ÿä…^(Óö\¡a¿öØÁ“ß7ð¹vâ|¸I…-¦|2Eòù‚-H‡>}lU<³‚½ªÑ÷çç ÁhѦ Ë–-£_¿~¨ªÊ¼yó˜1cÅžQ Á ô üÆZ¼åîb¸; ¦§KG§É E8?¢5*ù_>,8 kó<òRÂ,гdz'L$wÑü%ù7vŸòýùåÀrU-<ï åzð$Ü¡‹‚ᙦðxÉÂ^p¾.ð^bD­œÓ·YÆ›Ï]4’’ï›÷˲C–·Ã:2å:6Ü`7+UÑÒ9~º?^mõœVÖm¥SlØóçȯټy3ݺucÅŠDFFòî»ïòñÇÓ¸qãÊm…öXÖÔÓ5›Øø!ªØ|¦H6Q#Ü¡Â#š1{^÷•ʽ·VÇ?V¢0xð`’““9r$ÙÙÙŒ=šÑ£G“]=Õæ‹Œ \$ñ¶øI\a± ÿÌ«A—ðúiÈvIW¿ZÀ‘ŽÃ|apÕ -ÁÈžäI®Rhh숭ÃÏ}L¡Fò$¸Â…Î ÑUí µ|Š#…›® ®zý´p×U‡„ËŠýdã·¥D>ËeAÂýžÀ¹B+ªƒòöqäÈ‘$''3xðà ŸT›ÝB‘D¼ŠŒØðç5[ùˆ*6¾¦H6Qk¼Ü¬B>0©§Ü¤‚çõÑ]HH/½ôëÖ­#..ŽÄÄDâããY±bE­>“7C0KAömvß$rÔ¿Ãÿ¥AÜ^¸ëì(‚ÆV˜Ú~o_] 2‚Êmþ)™÷©Ep¨ØXsÔ+[xáÚ)I¡Ã-ô1…[3¦ò.Œ„CÅ mÂ%¥¤ç|upÐÔFÂI;Š„£âö gý⇼S  ×[5î¯ jZQ]¬X±‚øøx‰‹‹cݺu¼ôÒK„„”u};5'’BÅí©›h¶{›'B0š[ ³ òµ#¸@C¶ ÞÐbÿ‚r¤8üõ‘ÐÏdÂuA0.Úía6ŒXÙÜ1þ—€³Í“lÀ hœq]pJ¸äúHá–r„kºîÉÀøùmváüÎ6±Õ7B+ªƒíÛ·Ó½{w/^LXXo¾ù&kÖ¬¡Y³fg*\´×ÖÔdÍFÇ 6»_ û˜0E²‰Z ¸U…9ªÄq-P¤S_ í÷ÅíÚ’œœÌ°aÃÈÌÌ䦛nâ®»î"/Ïû-ê‚10Dbº6—þ÷¦¸MË"> wÀõá°¤꿵‡·šÁˆÐ0€=zFõ$Gk­–r èIÖÇm°vRFð$7´ '¼ÕL8âPáŒëÃÝ<ò|¦pËmÇ„k%ªp¾¢Ù€sÁ›¡ÕA^^wÝu7Ýt™™™ 6ŒäädbºKWƒöˆM^ ˆž£ŠÍ.Ä„)’Mø*0i]] Ü 4×<7<ñ±±±lذøøxV­ZåóÏWÛ ½VæF%tBbPÛNIÍçyã‚‹ƒáª%¤w„mmaNS^ý²rþ£Æ$ëû#6ÑÇd°h‹€ŒIUdÍÏi*ÞQ8áî†Â9.áŒÿK!_8å¤6ogB.ª8vôUhEu±jÕ*âããÙ°a±±±L_¸€Á(Ü‹ØæÛU±Õ¤óf[êÆ‡HÔÇ Äª€œE<úðÃÌ›7—«~ÏÞ¾rBW'<3ƒäXìÏað¬æU°ë¬y6¬úC7-´"±^Ï‘rL6z… pI¸é&ÿï 6†"¶h-³×çCRQýû?ŒZÙÜñº¹ô$ç4&¹|… œ“V {¨¬ûÁáзܦ¸D[ûëóáëØ^äiWD§¬1On(¸m@iã¶!‘HhEe6Ä×8räC‡塇â¹îݱ9¡ªr¸I…-˜0E²‰zŤ[ÏcÀ€mò$úŸ¨°×>Ÿ‚±ÂsƒE(?ã­pŸÝ?ÖÖ í¬pÚIkÙ¬‹ääRãr¨ð]¡\³3!ÜýÃ`p ‡®šÏ5…SNøF3œ `Ÿ£z‘‚,î{e4èc 2àYbJ>ô–¹é/"ù¢`ÄC"àªphTjsâvÁúØ› +¯H¡sH· cݳ$»p;«Ø‚TÍ.\m…7‚Äs Z1µ¤~<Ç•¡½ËEß¹/ŸSï«ð î#&L‘l¢žqIHQá n®Q`® Ïk;ïú†‚QšôÖ…¸IOÏlþ¦DŒ†¡D²¶Êv;*N ¾Ì—  ©†k¢9ÚÁÈr¶»ê†8᨟±5dãÆ®nn@‘ü‹&’;GÀúÓõóšÛDë›Þò‰ºûíÚ†76@z5ç˜Î!Ý f¹]÷[°¾ÐíT ­(íTñDSr§Tx³Aˆ)’MøJ€¹À žSàv`¦ö8]…âqQ•…`ìµÊ4Z¨E„m`W!¥òt'ü;W.€vAîãÙAbt àçbwhÆ·룆Q+[€»]±;î°ãžŽú¨pÑÀÂÝkôÒ³×ó×ùî5ZÛvÐ)vá’Ž6á–|rl(†!pŸ^ ó¿Ð  0 xA 4»ºxT…ã¦1E² ÿÆq`¼ ‘ ÛÀ &ùIÆŠB0â@\ì„8Ž„ü»Ivl²CÓk‹vx'K.è"^ªÁ¦qiˆ\ÿ×PŽÒ·¹C3¶z¯Zˆ‘=É!š€,2 HÖÇbPOré¹é +Ð;ÌBÑ+Tò tä»$lbƒæ-Þ]ì'…Hq@|pË÷qYÆ)Âýh¶ÿ ­èÌSà*íÿ;ûTØjJS$›,lE —×v¼WÛxx\…L?øŒzÆuVø,pˆáî0Xë„ÅXãôÏ„µê¢:¡5… ì*–k ö•ar=îEƒ ÆŽIŽÐŽz (’õ1EX76oT¸¨hcQjƒ¡çøbcº[ÉÝl-’­Àp+L°Á0«ViÅ!w} |îGÄßxZs6Ù€ ä„v Æ 4aŠäó.à=`•«|/p7p«O¨°ÿ ¿¸äƒœpÁ&n°Šp¾Î*å¥Ìûл\QÒž§Q¢J­ÔMðDFÅG¿×FÈž;ú5re p{í´‚ú˜lŠñÆæ© åCœš–ÛPÔWˆS² Ü佊ãq6ñ ƒ”KûØ ýUh®j6ÁO„ü$à)šhþU$ö8Ë”çÌ:ÉÂû↑ªüðÃX­nFϵZé¿ól?§pü’Kh¼¥ÀúûÁçn¢=rÁ_‹¡U!3&«bÌ{W¸äp‹Ìñ—beΟ¸PÖÀÄY§œ²Fî>!k¦õ>YCËsꯚLi.Ñóü—Z„«… w¶ —/q·w.®ÏPËÚ€õ8/[!6ñElä!`¤ ƒUø¥ÿúë¯0qâij~7~üx-Zd S$›ð5 ¸å–[ÈÏÏçé§Ÿ¦mÛ¶´k׎§žzм¼·î5Ȩàwß¹àŽhY“Kà4Ràü ß…Â6É„ö7èèGœéGGö{J`AÜtbÿ€ž©ðhº—¨ ÓÁÀé á›Ö0«±Ä8—>ž7re €(ÍËší0ÞØô1EÕ“\A… ›"sxVc™Ó§/”9>­‘ÌùUÖÀ£é²&bÿ5² Ëê’ƒpɧ»rŽ¿!áäïB…£° gÿàoY(œþ]œ˜QÎ&øÁˆ üU›X„ØÈN*¬®ÁëüûßÿæÄ‰ôêÕ‹nݺùyË–-¹úê«ÉÍÍå£>2‹)’MÔ~ýõW&OžLxx8 .dÁ‚„‡‡3qâD~ÿý÷3Ï+žÒÄòDZÍV Eë}ü™›kiUu9 G\Vo:äg},°XóT, †ž~4£ë#Ô¢¦p;‹àùL¸ú04ÜCÁs™R!ÊÄ7?ÓÛ@æ…ðY+¸¿!ôЈQ=Éú†ÀÈm©m÷$÷—¹úY+™»‰md.—¹½½HæúC2÷¯>,kag‘Ÿ øcÈEO‹pð±0áä>áè7ÂÙ=Š„Ã³«XOiål‚¯p=bûf+b ?ÖlãSš­¬ ìv; .`Ò¤Ig~>vìX, +V¬ //b̯ÀxX±bO?ý4×\s û÷ïçßÿþw…Ï=ܬÂ@àM:Ÿ*ð%ð*ìñÁçm¢ê“Õ#I.¸¯þÜlƒ»lÐÏmr%»à,wÂéz8Ýü Ô¢¦(R%iC ­Ò!lˆÖáâ`¸.R.Šä9¯7„½’˜Zê:h—#ë@EÄy“èÕ-Y¡M´-uµ ‚ŽÁÀI¸Ì—5s?ÿ÷©ð²¾@:XžÐ{»ÛÃ5ŽùOQý}ކ Œ¶ÂßmÐUsP¨À&¼ë€•Žš‰LÝ4ñÑæí"à5þ¬o®€{UØXÇ×]¸p!3fÌ`ôèÑ<üðÃäçç3nÜ8À µ0E²‰zÇÌ™3i×®ëÖ­`èС̘1ƒgžy¦Ò¿Ùˆ$%ÜdòþøI7Txïví«Ž'¹"Ëru²ÀVɘîj7‚áE`•ÞvÀf—œ)ÿÀm¶O;au®\ ML…ðH¸Uó$_,WEÈu¹Es ‰è`½º…=Éú˜‚ýÜ“\™ÖÿÝ ª“#­jο `m|] ÉwFÀîzô$+¸#mVJà.uÀ{Nø­–áe¾ò$G"ví>EÂ,²ŠOó‘ uEZZÿú׿;v,£F"%%…N:±sçN’’’0aŠdõ„Þ½{óøã“——w&q %%…Çœ¯¾úŠ­[+/{î^Gºö=¯ÀHËÍÛ€GTX†w„fÓz’+Âo.ø‡ fÚ¥„Ü µÂh›\¨RFn‰Ò|$zâГ|.¶ÃÒlØ‘·6…}.¸%»jó§¹MD‡éu’ èIÖÇVÏžä:‰àsÌŸÿDC <•¿,®\ç”x–k¦Àx›pë…Š{ò¥VÓþSgÝ&•¶M½´yS€±ˆ}k¡}þÅš}Ëðð{½þúëŒ;–I“&ñã?¦ÙÉ&êQQQ¬X±›ÍÆŒ38xð 3fÌàµ×^cÅŠÄÇÇ“““Såëdwi»ê·è ,U` p ?zš|µÇt¼–éÔ´Ò ­µzœã5R>ž ’%ï:à^lTÒØ­¬Ò6v¯¿Ziâ*ÕIErÕVù«ˆ;:î…y9†ß›"ø\÷ƒêoœ?IDAT?5:„È\5šHÞënie®ñVb°¸Æ*!mí kòCª8;<Û/½œMð$.+eÏ@nyÃžéØ¹s'ßÿ=}úôáOú999fž)’MÔ'æÏŸO»víøî»ïxë­·ÎüüÍ7ßä¯ý+W^y%óçÏg̘1Õz½+U÷λ7R7ò}ï¼u¯§=¼‡TxÂOÛËýíòуû4ÙnÌŽLºH>zŽÁrʈ"ZE(6à ÔÇT×p‹úÁç‚>7[°‚‡Kã–>ÁÂ5_{¸úFiCkÅí€XíeCš<ÉMpŸŒZ€ãx÷d´4^ýuúôéChh(K–,!?ß YΦH63fL…Øår‘P«×T®}O"1\€›ÏÄpY5sáùã.N¤ÍõZçÙG†Á¬ XçÁ#C0f¨Ei´ÔÄÏÑ:ZJÑzR[¾E²>¦HkàŠàsŠdgÙ¹j4ìvˆHŽòŒH¢l¨šþµù2T-C³M4ÛP—éaÃc”à››Òعs'ªª¢(JÇ• S$›0ò€iÀÛª;ø5EZvÖ%¸‰¶»?‰oJ.¥©ð‚^´—M>ù³U.O$Ÿ@©&"vc·3žd/ß´úÑúѲÀ‰{ú˜l@÷ÐÀÁÕÉ­ Z Zç–®uŒK.ô«yp ©Ÿ¤g§&”c5ÛVË×)]­ |[­ ¤ºEéòoü1?ÿü³)$L‘lÂèØ\«J]ɹ }­H]ɇ´N~5A3”Ó},Dô2E›J ¡½l£‡ƒ`Z‡Ú”1‚R•- êIŽÓ=ÉõìeõªˆÎ”‡¬Ž]Ì' ø±m`ŠàsŠdWÙ¹j8‘ì(Ë55AeËgêÑ þP>3]±ÞL©¹çº50O›´ÿ寧ðY=Ý£ììl¾øâ &OžlŠS$›8Ÿðð¥ h¤4LT)½V]QÙT{L«Ç±œÖ Þ¿é‚øwÙàoVèoþÁðF,sÂ{©Ñ|.]lî¸A#B÷ÎñóʵÑí‚àÒ`ÜêÁ¨PáçÀF«s}Äàžd=ß¡‹M8§:TÓÝ"ÝðÆZ!Z›Û¹*|¤ÅïðƒÐ¢4 K)ÛP]Ñÿ`º"ÿΞWá%$ÌÂטQÎ6T†ÎˆY¥ ä$ÄÝf d¦H6áØôT¥öd0Ø­À+ZvqEÐ=É~ìÉúÙ–@\!ÜV œŽTÉH …_BáA›»•ªÑ“öôjÇ]Æ,o§o@ÚtúØŒ* ]Ú-=g '’Ë%ï5Q„‹~ no®ÚàîŠ+.ûÙ®n b+™—1ˆMÙ­ˆÉ@lNOUl ¦H6á·p"eá:iåáþÐÂ0ÊO8õ$W„b$voH1\XÏÙᘠ—X`^0 ƒ…À ‹ÁE²*[Ô'¢JÅkúØ¢ w}¦ œÁ+\ ²÷ .ºÄ"Üôœ]¸jH±pW œŒTæI¶ 6äEl åléÈ„)’M ™Úî¾— ß å|+°­TÇ#´Ÿƒ÷j${ ûT˜a‡Ö…pc1|î”ÿ[­_äÁíHKìXƒ‰ê6 dé  ,’õ±Y$´¡H¬"Ür;Â5ñ%Â=6„‹n,nša® $d”³ 6c›"6¤ bSzi§–™¦¹5áE˜‰{&¼Š$`*I}/(ÐøN‘%ªÐ\3ÐÇTŒ8‘$Ÿ:!NI6xÜ&¿¸Å*— ìrÁWNXç‚D'ð=ÕKj1°ë&B›—yÉúØ" ,’Ï$ï¸;(H°ÂP \m…øReÛp*<í€Eñ 2t[Ð\ÀsŠlà00]…â»ÚÍ&L‘l„W¡g®Â#ÀTÆ#°»kày’+Â1­ÉãÀ1àeU:Wõ·Jé¥î)STlrJ—¿õ.ø)À<²­ RÙ¢*„G1ÉaçHDOòŸ,0ÄâæðR¿+Í!ÓˆC¸ç˜æ«n :ºàw N…¹*<ÿ%š0E² A0 X¢ÂË Ü +h§d$/Ò|ŒK æWrUäÒ;üéÏÕóWNéú"ù˜Ã-‚µÇó¡ºE°Çx,€Â-bá]Ç)e I•œFÝf“ç6öøýjŠØœÐHãÁOiª41aÂÉ& ½Àª´¶§À(žV`&°X Bb€Ž-V{,-ö‹ìò N˜n¯ØŽ·Áx#4£åyn­1ÇÀ}lÑÎLÑç¨?V·¨2„¢›çôr܈H¦(p3¢í þ‰ÔàÿÒ4™&L‘lâ|Ä—À:–w+0  ŒV`7°P… ¬ã5=I¯ªvª'UXî€åÚÿË«ú{hÆùPÝB«¨…ÝÀëÏ^n¬F„¿U·¨nEMÖzZ ›oø "1Àdºi?sŸóUX‡qKLš0E² Õ‚KË_ªÐ˜LÐHs/ By¾ )0=#»&×?i1B3,@ Í+gäêáÚf'ßÀ1ÉúØÂσê-,2w}=ekBQd–ãGÍ)2ˆÒ…>°X…·ƒ¦Y4aŠd&ÎÆA$äâ)F"Çoý»5RÝ„„b¬BZbû#šUÓ\ü=4#Ö"%ÃNº ØÀRŽ…cáy ’‹µ®±¹NxY%{*„¢&香ßÇ`ÊrºŽ@àt¦H6a¯P‚Ä£ýS-ëuèôWüÛë 'îyªZ‡¿…fœIÚ3xåþ`Mp”X$ëc VŒ}/9E ·²zG${#„¢&È(Ç=þ„Ò§ƒzsëtЄ)’M˜ð[¤ ã§S6~m†"?[‹ůéÞo…AÔwhÆùPþ Ü]èr ,’s΃Ž{ú\’¹»ÓA澡¨éFº4÷Ô7,ÀPÜy&z8x æ™˜0E² ~<¤DÜBµl&ôuÀu ©ðõ[F®©n¸|ð^õš¡W 8fðŒÓ“lèsµ¶.ê#„¢F"¹÷Ô'÷Ý LR ö³bäT0+™0E² …D Q…Ë‘òó CÏ£f"¡“ \ ‰Þ6·ÖqkEžS)T¹>ÐD±¿‡PÔéå8¨¶0Ë·™0aŠdç)¼]F.6€Â-j=4c p{ä(Ðß!¥mž»fŠmw¬$QÊ…$¥–ÎUyÔV߆8òÙHÕþ¿ÉQ*Üo‡lÞË4P4ªÅœ5Ë·™0aŠd&ÎÀeäê³ü›/­‰©lìv‰w©"„m5ï^ëR?ýg-IŒSàÊJ”Ï©RÂù  ©š˜Öÿïm/`6V»E²>¶ ˆäØR·µ6Ú”šþ¿½{é‘ãªÃ8ü¶• ;öØÆ _""ò"Ê",@á²ä DÊ’+¾bË$|6YrQP$"…°0²klCb!âñÄ S,êÔL¹Ó·¹x¦ûÔóH¥–&㉫»<ýëêSÿžówØLûÄ­r,ÜìÝ×f-—¸·Õ~hÊ™Qr¯ÂÇt¯càŒo‘ Sä¹ó•žIît:Í»z~#ɵ­äÚŒ_:Ï—@za,¦»€:WÂéå)?ãQv¹Këåk·›6¬öjm@Ÿ¸·¶ÏH^äñ<1çg<íÇó£±c¸6ìb œñm ’aWbŒÜ*_¸·›H~´ÏŸ³™zsʳñ"gg­‹ÞLòÞ>ήïŸýï`Õ§•<;†«‹ärÛý2¾ D2šEÆÈ](W˜×záÞs+ôQÍ“\oÚmÒËYsu_%WŽ ìøÞJÖ›zç^Tþm>·ÇéË®ûs¡I~e|ˆd8 ³ÆÈe«}þq’_'ùM¦_¼¶’‘\nU°/MÚ%·›ä­¤½r©8“äî³í¨°³ÿ­ûx¾ûl»¿ß¬t4ZÆŽÙÚ–[|5Éw’|·Ãç›öw‘ñm ’áH‘ûö(ù^“¼–äµrÖõýË¿kV?šO–Û•?®g0Ù¢s¿i÷·ÖÑh;fOVÅßµ·_{å÷F’ßß"–E7Fî'Íä'±×“¼^A4¯•ÛÚß²]tÔ] j–±cv­¦(®ìE8ˆd¨Üµ²ý¼™þ$·ªÑ¼•Ÿa­iYÉ<µFËØ1»ìû)ŠA$ƒh^ÁhÞ¾p¯òÇì0GݵÚG£mGòØ1,Š‘ ¢ùÀœ*·µ¯I>=ýìïãéìç)Q ˆdÍ­[ÏùŸÊ“Uu·_µFËØ1{Øk’E1ˆd`ÑÜ}®ÆP–[X“\Ñ‹±cX"DóÁÅã@ΰeÔ]OV¾ŸÛîðšdQ "ÍÛoU߯ü>ʨ»þ>®U¾Ÿ÷h?E1ˆd@4BwÑÓP–[ fMr†³Üb·î‰bÉ€hžû$?˜5Éu×ßÇeö´ösÞšdQ ˆdÍ»Žæ¡|ÝPFÝõ÷ñTåû9í“E1 ’}GóÙò3îU¾ a(£îúûXûšäî˜=›ä‡¢ÉÀFóÿÚïùý(YOr+Éͦܖíý¬þ¸Ý¡,+éï㉠öeTŽ×Ke»˜äÒ¨½}!íñ»Ö$?‰b@$Í_Nòõ$Wʶ]&=Kɱ9?ãƒÞ ´îغÑ{‘ö¡Ò€Hž†Ëö§þ{g\÷"gûŒßhçk_Lò|Ù¾1!¢“äß½¨¹™äFóäÙé;‡kɰ–[Æ…{ŸË“g}/÷^\]JrnΟßLûNÄö ªÞ ¬îkþ‰"XFÙ9û<)¢Ÿ)Ü­½˜'ÏD_.±t.ÉËÝ éG%ˆúg oegôíT{eMòÞžHæ=®óþOûqÉÀÒÚÌΙ¿7'Dt²Øǯ•mRDo&y/{?ã8”Qwý}œ÷a"‹¼C0ïÉä¨ß!ÉÀJ»S¶·§Dô"kW» »^ÑÉ쵫gÊ÷ßÀ…{Ý>ž%/eöZóY¶Òžé½‘å]k ’ª=Lrµl™Ò‹LA8_¶W&EtyOÿîh wèfr:É»3ö·†©%"´ÇiÇ|]Ÿѳæé^Nû_Ø}ö$wÓ[\áük‘ 0C“viÀí$oMˆhHæ‘ "É ’@$€H‘ "D2ˆdÉ ’@$€H‘ "D2ˆdÉ€H‘ "D2ˆdÉ ’@$€H‘ "D2ˆdÉ ’@$€HD2ˆdÉ ’@$€H‘ "D2ˆdÉ ’@$€H‘ "D2 ’@$€H‘ "D2ˆdÉ ’@$€H‘ "D2ˆdÉ ’‘ "D2ˆdÉ ’@$€H‘ "D2ˆdÉ ’@$€H‘ "É ’@$€H‘ "D2ˆdÉ ’`<³ßð·¿\u/Pg’`ÌžÎ$ÿò?uÏ ’;ßÿÁÜkˆä¾ëý³{ €ªY“ "D2ˆdÉ ’@$À¡ùÄœä¿rŽ€HN’³Ÿ9›¦iÜ#ˆä$yçïdccýÀ ­¯¯'IFIœ>€žÿÓ‹¾LtÝšIEND®B`‚xnec2c-3.4/doc/images/wire.png000066400000000000000000000716251257141547200162530ustar00rootroot00000000000000‰PNG  IHDR.{}òsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEØ8Xi‹–tEXtCommentCreated with GIMPW IDATxÚìwtTE‡Ÿ»»)›¤!½…P„ÒEA@z¯ÒDšŠ¥HÿèR”&MNé½&!…ô²¹ß›, i»é÷9gÏIæN}çwgÞ™{W©Õ~<Ïrâ·é*‚ ‚ ¹HƒnS•gÃt)9,ª*~‹ ‚ ¹‹¢(곌.±Ó’Øa  ‹ ‚ ‚+p,`ZHQEMp^t‰–˜˜ú>k ‚ ‚«ÎÍôE_*Š!Î@@@înîIç&^mY²p }ò‘مܹw‡¥‹–2pÈÀ,I/d/Û–-å~”æ}ûSÎVk ;ÏòU‡Mÿ¿5`nVOuq…e+ö¡µ)Jÿ~o°xÁb ”cõO(35ê’uËËúlaã¡GغԤWçZÉ®Âãsʇ›wNLœ‚ÞB®n”(]ïJ¥²\?颸zê>—oø$•nÅJP¡J5<Š°Øæ¶11q†P®œõáúÍûø…mÀÊFO!WwJ–õ zåÒùF½'NlXÅÉÇ‘n؉vU ÉÍ”ƒäö|œé'5yÅüU¿4ý“㊢IöÔ·ïÝNâØh4ñŸø¿’Äáy6̦²‡ª®¶Ü¿ÆeßOд²7]8c|Ú̹†«©¯†Žškí0·ìçUW–´+:ä$w£ hmKSÇUŸtE!ê¿n;J¸AŹœ7 jU¢°‹Z „ñàÞ®]¼`*/+õ“/Ðøí®T|ɉØÈPݽÃ%Ÿ³µßÒ6ÄÅúóÛÆ}ÆÆáP¼ ëzQÔÝkMá!ÁøÞ»Ëå çò¥¾,­³Þ¥¥mOs3ò.gÃb©áh-inõ]ü|š0'̧ÏÎãæÌÇÏ:-é¥_ñ¿iÖmä{#ÓL_âíNÆU™MÑhŸ:- áÁÛÿH·þºÄžMjs5ІåK–§ZÉ$ M!g´â+è3 É£ÇŒN3½õØ© Ü&ò±¥¬)üÂãH*·¨Â™_N~ç*åéÁ¨sÆëU_r0õÕ¼9óxwä»Éþ¿}î_Nø\Æ/0„XƒjŠcˆ~ÌÉÃǹvó>ÁaQh­íp+VŠ _¦dk‹n`Kã™[vB;:·~™#§þãáã'¨ZÜ‹—¡^³FX?8Çáãçyø8¬ì)áYæ½±Nô%ÁÒ²º¾Ù”“g/q÷¡?‘1qX;¤l¥4®ë‰æ™¸ æ.0ý`ÛÔxrö+ÕNf·önPq(Ñ€®mª'" ¸¦€Ka*V«-úIw•$Îx/ÖJN£CgWRž)åYÕ"Í[ÚFßC{ŒC_¸&=:ÔG›èšcA7 ºQΫ†yë]†pþ;q‚K×nó80”X4t/†W­zT-ã’hUh+~½h—µ:œœ)U¡ ëxšÊ7ç‹yr‡ƒÿË{~D«: ¹¡bºÉî‰8ÃNú—«7[g±€½£3EJ–ijbeJ~º¢V»RAnžzÌÕ³O¨ÕÈ]Ò\vZœˆ>ú˜,ŸuZÒKo‰CœVúowâΦ€Áä´<›&µôºô–3pèÀT™ÖÒ’FѤ¸R“Øk“­¢œG§/ÍKÖZFÝãalE¬µÄÅús'Ê€¢ÑS·h.kOq‘pµ öZCôCîEÐZ¹QÆN—îÒóå}Øåã—,Ž!Æ—Í+~áQ¢¥wCd(÷®çþÍ›´êÓƒòŽVfµÃ\½$ÄËHÙvþ“ȉàþõ l¹s¸˜`Lo>2„pýì!žh óNã".kÝïû’üùä1Žî"Pq¦c=·LÙâεŠW+˜,î™›¡x¿ZÅ,›f‡~R\%‰}ú>©#~Áºc¼ŠÚgHó–¶àôUã ’w›Zè216Å‚ØþÓnG' 5ðà&¶Þ¤ÚèáOËÜ}=‘³KH /çŽìÂÏPˆN ÜͻǢî±á§mÅ&l‰Eóøá-m¿•L/§Öoâ裈$y„ùq%È+gO0í3  Lw>NÏiI/½%_“§W¸ÿë/íÐ1ÉêK!;v Q”tÇ4Óè¡ÕhÑ*Ú½'FÃ’KRÌàý±ï'ÉüÙ<4Mº§‰ÓJ/dµ\mÙv?Œ³c(^Ôš˜'>X¨^gK-GkEq&ÔÀ+mˆ 8 €­k­ûéÙ°}×mhÕ±+e‹¹b£}*æÛîäQ¤²õ[Ñ J ÚۢƄqïÚ6ï<Îß/Q±‡·YmøqÖ)†zoTŠuËHÙz·Ê´}£… Øà{qëwþ‡!&[·Ê¼ùF °æáŽlÜùç mÒ)ÃeiõEhþZÊsEÁ•;ùóè]üNF[¿£©m³˜b;ÓâF„Ѫà`“¬¯îE'8/{´Š’+úI>Ù²}åÏÆ{Âó÷ÆÕ6ï@“ªFçpö³Ñèœ1¢oºùe¤wâÎªŽ¶f§I‰»»¶q38}qšµjH™â®X+Ýáüñ#IìѤÿPš$8.q±<ñ¿ÍŠ5[y|öÚ†̺Çnþ¹‡ Ø8ô…«Ðöµz.¨'"èGwlå\¼“’PæI_ã*Ø«½PÁÅž¸ØB‚óàÎ-.ÿw!IÝl*g0D\G«Ô•A4§—øù8¥9uÅÿV˜5§ç´¤—`ð°Á)¦Ÿ5sVÚéãÏ´ønù ÷víStZÌñ’~íѤb¨4¼,E£$݇Ҥ¾ldÎÒ²S”c¸ÕqßÂð;Åí >ÿ€BÞ¥@%«€ƒ¾Ü½ Ü >cüfW¨fá”ûé™°FÝÞ¤’Sò•“o…pýÈ_\?’<›¨€ ñÎäžòÿ)»ÑÛM)¿BP¸bØùŸ1¼cSŠØËVn޲ó? 13UVý®í¨TÈ&þ?{*ÔoÅŸG—ýÀ,›§ÅãXã$ìf­%µóuqšäyΞ9;©S8fTöèçnnßÂÍœÊ7¡÷›Õ¸rh½Î™ÝðÜŒ·šUwö<,²ƒ%mLbçLŒMÿįv½ÒýM*™VÙ´¸/G“âå­°„qjÿA.\»Cph†¸§o3¾oö=vìŽQ{M;6¡ˆ^ïü¡IǦœ›¿=‰vJÙj¹Ë®µk9íV{;\‹£lÅš´¯U/©cmm\õ3Ä>–±:·—LÎÇé9-æÌçi­Ô¤>éAÜÄ……ââä”dÅ%5éÒúÆœxiiØÈaÌŸ3?ɵ1ãÆ$3dJÖÐáC“4rÎsR]Z’—œÃ±¸7p›°»Ñ*¥¸{Õ8¸V¨P­¢¥P¥rpЗ'ÿÝCÛ°—âÃ*%ÍZqñ.`›¢îbãÒù¦j¶Þû¾YñòËHÙ•ìmžžmÐ==H^Ù!QxB5.SeÕ,d‡6±S¡+0£™eó4W6M÷›6i@I-×"c9l ‘³Y¶Ìjý<ËáëÆüÚµ©Ž•¢¡r£ö¸»fÃö¹wz/+Ÿ4*T¥’Yùe¤ “ú…°8ê:eü0ª¼ÓXÕÉ–´jzá÷ ¼þ$å‹)h õ{ÌXž‡Þ:I_kõÉÚØªSs¢·æ¶(¾«s×.sìЪ¾Úƒ–UœW¤&«sÁq‰ŸCGMð“`“Ó ÓêÐÛêÍš£¢£Ò,£°[á4Ó›¤TVjÒ-?ÑAÜÄ$œy)\°ù+.Ê3K4‰=¬„JŽ|o¤ÉéHì´$ö°’íi¥rð'!ý·Ó¿M3½}XÙ•§°µ–Gá 6´àTX ]ª;Y£6jc«9BTè bã*r!<•3•¬SüÂþlßiSéKW+ ¢ t5š’6™ü,=ã’‘²S;Ûðl¸šeY=ëQö~¯%÷‹³•ßhþqq±JZŸÚžN\;À™Íû©Õ¿v‰ò3n 3¿™™¤Ì¬Öϳ„ÄÆÊMT¦[å†ôwuaíO;¼sEë@ËznfÙ!#m¬]±WO=æÔÖcÔîÙˆŒªÕM§åQŒó¡±x;¥~~ëà-£³Ö°}7ª—qÇÆJ‹Î÷ß-°ès‰/ïF´OýÓï§±7’iGÿR:õ«BthC åñƒ«:v… {ÿ¢Uµ®¦4†ããôZ+«siÅEÑ(Ìš9+ÅëNø0Ýù8½§‚&Lšfz€ððð4ë˜jzEIâ´$lÙ·nmr^böìIw|K⸤´õ¬Ó‘°‡–ØiIëqJžYb§g¤ ™>Å,dœ:®¶l½Æ‘û§ 7¨èÝêa•Њ uœ¬9ΉG1¨ /TmOŸ¥õ Ê:²éblÜKÛÖõ(æê±1úsïöM.?G§>æ½ÃÒ§Š2R¶ÆÌöfgYÏ^³Ö(DÇ©\ŠÆ£­Y6ð°ÕámàrXÅ %<‹6‚ÖxŽeÿ áåµ([ªìõh‘a!)Ö#+õó,µ Ys$ Š­¿¡[û†°Ñ⟓çL‡N­=q·ÒaΚ‘6mÒ—s?ñøÁ¿,[Ió†5(YØ+­JDHnßâüÙS´ë‘ö‹3_)ïÄÆ ìÿé7¬Û4Á£¸ÖJ,¾÷ðù÷ MÛ÷2®ÂÅ{¿¶z[l¬¬ˆ õçÔß[-¾Çê—´ç·kOؽqNmòR!=9´uw²´KVÿFµª)]¢îEK`¥ã±½CÇ®û8I1a—ŒŽ‹m9«sÄ‹Ïnï˜;›ã¥—>-çÇÜòŸi‰Üõ¶-[ÅDZà©"EQR<’ÚX’ð4žûÎlz!{)NáÚžcÆojõJ%郲U qààCNî6¾8̹vñÔß ðlß§¯Ìí)qg wîŸeý²³få•ßÎø6Õo)å—‘²Ímov–õìµ z>a1l^<7Õ6?K9GŸŒâö™ 4Í‹$ÍÛ¶½º·bíº]øÝbß·ØgF=²R?ÏR¯Ë«\\² ›GY<ûÖ:ˆŽIºýt’U8ÓÿÍšé®âd¤Û"ôèù:ë×íäá­³l¾•1½–nó6åî­âZðm¶¯_•ìzóøôÍÊ8òǵ'ì^·ŒÝ™ÐK¹¶m(ôãzžeÍ’´ëtÿ ûï_a q슼œ¤Œ 3wpò,'cun¬¸dÁ|œžÓ“­éѼýcüx§E¿h³gŠF“äŒKºïqAIîݹw'SK÷™M/d?ŽeŒç¢üOx—sLÒ…¼ËÂÁ‡Dú¯{y8¥ÚGæ¾­Vkó]ßíωƒÿpáò …a@‹}gŠ—*Måj52­ƒÔê’‘²Ímov–õìµÆípˇF™}ï¸Ô¯'èóJË·“ORÅ«ÓwDIÎ=ÆÅ«·ð !*&k[=])Z²ž•“>Jœ•úy[çÊ áÌ‘G¹|õ!áhtÖ89»Q¦BeªyXñËÊ<>¿‹µŽôhá™nži£¾Hz(Ï¿ÇøïÊ-|mÀZoKᢔ«X9Ý6i­]x{è Î>Ĺ‹7ð xB Z\^*Iõ—›ÒWéÔ“ mÛ8}ù.± N.E¨örSlYeÑ=fe_оƒ;±kç®Ü~DŒª£ [QªÕoÂÞ_W$I;´OGN9Ï[÷#NÑáPÀ™’å+Ó¸i$eüãc|`ź²U”Óäö|œÙô÷üý²Ì0ýÈ¢ªªÄb“\œ>uºE…ŒŸ4>KÓ ‚•ıö»™ÜŠŒ¥ÑÑ4zæí¹‚þ˜µð:ÛRŒÛM*Êar{>ÎÍôV:«$?²˜äס qQ‡ <Çøÿ»’E;ïbWøÞüŠD0›‹~àÀ£pŠ·Lﺮb!ÇÐj´©;.‚ ‚ yÄŽ‹îÙ jœ81‚ ‚ ä>:]òŸIü$X¬$‚ Bž¢€SäŽKhh(.…\Ä:‚ ‚ ä)?<”l æêåób!AAòž^h5Oß[-O´ ‚ ‚oÇEAq\AAÄqAAAAq\AAÄqAAAAq\AAÄqAAAAq\AAÄqAAAAq\AA,A—™zxzYœæêåóÒ‚ ‚ ä¼ã ªªÙqEÉ´ô<:> mO«m}ëÔä`pÓŸàmW[Søþ-é¿ÿîµgsxM Sx„ÿfª6˜ŒÖÊ•g÷á UÌ*GAžkÇ%«xv2•I6)k»rp÷=6ñãí¶%LáëÏ|e-ðÔqñ;²€#qÐ*b@A!_!g\ò9{pc…)Ìy“¿£ˆ þ‡sᱦk>+nPqhý$Ρ8‚‚ ‚8.9Ì£#“ððôÂÃÓ‹ •kѰUGÆ·–'†§ÛV ×Onú‘N­›S±’7u›wâ‡_“OÜŽmfDïNÔö®Žg¥Z4kß—y[|’ÄIÈ/ÎÈÂ)#hP»å+T³(Ÿ_æÐ¾ù+T¬äMƒÖݘ½é´Ymv®8­¢tu¹),äÎr ªŠÎθ ¶ìÆÓµ%WƒÖÐ=Y²ºM‚ ‚ ŽKìýÑ™Kæä™Óœ?¹—ƒ¼Ø´ðK:MÚŸ,î°u!L_³S‡·ÐÁÝ—'tåë#¾¦ëçþG‹^q"¦?ýy€ 'ÿbpõ`f~Еq›o'ËoëÜŸ©Ýï3?Á•Kg-ÊÃ÷Ÿtœ¸GnmùãÐv¯JÈúQfµY«÷àmW=1açÙl\e¹½é õ?nÀ¹u·ãW_þÆ',½ók¼ìdnÞ™i“ ‚ ˆã’]?ŸH»FUpÒ[¡³u¢açOùŽï’Å1gå\ôè •bôìa¨jë&¬0]_:z1‘q*ŸÌM…ÂŽèôÎt™4 €íS¿N–ŸÚ³/µJ» MfnK&lBUUFÌIYg=zç2¼?{˜ÙíîÜò%~:ÀÚø]EáÑþ=F§ãÌZжìiV¾™i“ ‚ dÎÝ¿oW’ÿû ŵ+r½!ÑÁç™ùÕüõÏYîûcˆ3]3D^O¿ƒ›Þô·Þ¥-ð%á6ãX{? €‘õj%K|0YØζÉÂÌÍc£o8o¹&ª“«±NæP¶OX{ËK/£6*ÄŠGáX;T§¾›¯8YsÐ÷gB ïsqÙš,gV¾™iSbÊ•¯Ì²Å³ånA2íCè2ZPyÁiø¦ó–Ý ¡åØïYÛ½1 ÆâQÁÛ¢G³HxBûïsg)f­MßJæóÈ(Ž%‡`¯]CÀùÕDøß! Ö€Kéît+_€ýÇ}Yíαsh­\^ÂÑw㺿ÎãÐ]Šâ]·Ç.4«NææQ¸Ñ6~©ç£yëyíåÕ8¯H—!³áT³Û_ò­Ö0ó<ÁÁÑh´zz6ž—Ñ»v¤ îk‚BDMôtFÈ »‚ BFQUUUBCCqttL÷Edû÷íJ÷0M^þ­"yó® ‚ ä>æø 󶪪øùûáîæž=+.â‚ ‚È+ÿAAÈ7è^´Ëj ‚ ä_dÅEAq\AAÄqAAAAq\AAÄqAAAA„é…ç¡÷¶0hÅEqKsÜ´ý ãè<î µîCG¸èó/û¶¬fÊðw(¦õ“Îû'ã—!ýY¶ãmfoæY¯rlÇJz Ùlº~né0~ºö›uXù•üú¹¥ ¬í À¦#Iûý¹@‚¯¬MîwÄhû#qÐ*¹Rç+—|¸púvýú?ÞïÖK›æðV“ÖÌþó¶tèóâ¸äE*ÙYqô›AŽ’~l?í›=LéÑk´V¶¸—®@›®X¸a§tŽØ?ß÷ཆ%(Ùp¤qò<>Çøíß÷/z{EÑ2jÙ÷±ÖJ'[H…ÁÞF§v…)Ìy“¿ãCTð?œ 5]óYq€ŠCë'ûœ“(Zk º—¦Ù[ýùi×/4t eîèNl~ž«õrÁqytdž^xxzQ¡r-¶êÈøïÖòÄ &‰w~ó\Þjñ +yÓ u7fo:mJg‹fuÂÀ˜AKÓŒ—Zž)…'„[;“7›5¢båš4nÛ‡åû¯³öÛ‰´jXŸ •kÒ¢ãPvÜ I±¼“›~¤SëæT¬äMÝæøá×ä¢tl3#zw¢¶wu<+Õ¢Yû¾ÌÛâ“b]â ,œ2‚µkQ¾Bµ¿Ì¡}ó¤öÌL½Ó¹â´ŠBÐÕ妰;Ë1¨*:;ãI…e7ž˜®-¹ À°†î©ê7½ñÏ\]™‹Ö¶$Ó¾oNœ!ŒìNsžÈ©¾6w¬H³®ùx®ÉQÇeïŽÌ\ú3'ÏœæüɽÌäŦ…_ÒiÒ~Sß#ßÑaüî|m°{ÍTiQ9Eš|ÄøzîøŸžËÄ]÷Óö¬Ë–#ÇuaÙûøkiOî_>ΗßdÑÝJ¬Ýu?wçÖ¹|ØëÛÓ[Âô5Û8ux Ü}ùqBW¾>âkºpî´èõ'bêðÓŸ¸pò/Wfæ]·9ù2åÖ¹?S»ßg8~‚+—Îæ ÇÅ\Ûû˜KëÁ_q6®¿ì;ÂéhÌ>ò&?œðÏPÙs†4àÒËx·O7Ö©IíÆmè;z ›\O×\[gDш¥}ß{îE†ÎXƉ“GX2¾ŽüÁˆnß&ù6˜Ú7ﺼËO;2pæ*Ξ?ÅþߗЯYvΜ©¾ÏMûg´MïÇoeÌ:|—;‡çàV{$§aíô®Møé£&Ù>îåÔãûÏ :N\È#·¶üqè»×N%dý¨,©wŠ“¾Þƒ·]õÄ„gOü*ìíMg¨ÿq#έ»¿úò7>a1è_ãe'ëtóNiü³ô>2—êãó_šë}mnÓòû\“£ŽK×Ï'Ò®QœôVèlhØùS£w|gгtÂzâT•á?¾G9=z—2|ðã ‹Ëê;ÿ{ŠÚhùuìpnDÒºµ,Ê÷³Ïºâª×Q¬NSØÇŸ½ƒ«^GÉ—G U"ü¶¤˜vÄœQÆ6*ÅèÙÃPÕ8ÖMXñ´í£)S¿ IDAT§òɼÑT(ìˆNïL—I³Ø>õëäß{ö¥ViòÚ¶9¶_úÁ*bU5‘MJóþœa¨ªå¬ÈP¹/^ÈÖójírXkTU%èá-nßÈøo2bå‹m=fD#–öý‡K?¡vit:= Þ™ @؃fÙé×a(Š‚«“=ÖZ-Ž®%hüfwf­Ùž©~ÏMûg´M.¥oëšlÙŽ×Fî vë^ÌÿXKïÙ'Q4Ö|°h(óÇö£NõT®Þˆnï}í(C–{95Æ,™° UU1{$eõèËðþìaYRïÔèÜò%~:ÀÚø]EáÑ~ãcÀãy—¢-{š·J–Âøgé}d¶fSʸÍu#×û:+Ú˜ßçšûuèèàóÌüêGþúç,÷ýƒ‰1Ä™®"Ÿ~[ÿȸ‡ØÑMo ³sïL·¨<+‡ê,ŸÒŒW'íbÀ¤ì™Ù&•%Ë|·FN6FO[ÐÖ8>LÑØ¨q)/‘wHÔ&½K[àKÂmưö~#ëÕJ–6*ø`²°7œmÉ‹˜cûŸ†'·‰k¼MnÆf¨ìŠÍ»2¯yW ÑO¸úßœøgKæýÄíH{f}½WZdëŒè1#±´ïÛM£s6.q±fÙèí"öüt/”Ñ[1FïD©Òe©V»!}F  j!›Lõ}nÙ?£mÒÚ–æ£9«ø(a€Ž‹`l‹¦„â¨:h>vß¼ÇÒÑuá6jVÒrÐrz—ãಎY:îåÔ³Ñ×hÏ·\“ßw™­wj”íÓÖ^çòÒ˨ ±âQ8ÖÕ©ïæÅ+NÖôý™Ãû\\ftl›,gV¾)–ÞGæbˆ¼ïÀ”Éõ¾ÎŠ6æ÷¹&Ç—o:`ÙÍZŽýžµÝãîh j,¼QÕä{¦Yqž¼l§ïé¿ü–mÏ¢A ÌK¤Æ¤íy§P1]¢°”Úb. »VŸ;K13êò,²}¢µv¢‚w=*x×ãµF¶Ôí¸ˆØð ¶µ%¦ÎˆF,­•’ñ»eâúÑM[ÄîÎp÷ñ®ÿwšëÿf×?Nï’/íŸUm:>k[î…b_äuV©G«jÆmË1¯”¤ #€Ÿñûw6Ð1[ƽìc²k¼N Ç’C°×®!àüj"üïkÀ¥twº•/Àþ㾬ö çØ¹@´V® /áhÞä¥d~ 5ÿSÿÀ¹rß\ïë¬hc~Ÿkrl«hííP¾ØÊØ¡@ØýŸ“ÅëRØ€­‘¦°pßÍnÞûË¿ÄQsúON¡3Ô¸h‚yÆþ[³Í›ýŸžŒx¼5þÛãÓ°GQ{]&ÿ“¶í»¼d—Ü&ñ¶·{©“)Ì’CÙ©Q¨’qÚÚ±žÅ¶ÎZ=¦Nvô}jç·lÝjóñÌEìûç(ÿ:À†ùÆoãa·d‹rÂþYѦ[›è·ð,­Ÿ­ù {­bò˜” ®Òš;îåÔó¶»q¥å·ÇiŽyYYoΙEì‰ >ÌöƲJv®@…îÆ-˜¿ÿÅþà( ”‘©Ç ³ã>2DÞbâØ½h´v|ð]Ë\ïkKÚ˜Úßçšs\º–pà‹_Ži0à{åÆôœ•,^ÿ¯» Qf¿?Ÿ[A‘DÞà»á‹2\®Þµ+Þ«EÄã}É®uŽŸ<§l0Ö)àÖi>ëÿm¶Ù`\ˆ$2è6³G-@Q:OëcºÞoî»Øk5ü2d"/ûb0Äøà{6¯bD×ü÷‰´l?àÛžè%©MF/@Q´ôù¦o†Êkض/Óæ®äïcçyBlD…ø±kÕç´÷ŶÎj=¦Fvô½güKÔúF$ oÝwvãAP»¸2NfÅÞÎTrÓþ™m“jabϯ‰ŒS©5r1o3ìcâïþèð®{ÝQY>îåÔ3ð«Ž(ŠÂœ‘s¹IDàM~5?ÛëݲKI¦Î¾@Ó&…p­û*·þ*{9OÜGj\ Á~·Ø»y)=Z¾Íá{†ÿ°‘Žñ~nöµ%mLm ÈïsMŽmÛ°€Èñ3Øñå@~ýDGÑr^t½„ÝvKϽþX~nͤÙëyµþrœ‹W¤ó™0¹/Š’±êV´€vk³%~_Ï´¼¼î{BÆÏäï¯âý¥5%=kÐeØ"x¯K¶Ø`^g=cßiÍ…;8)ÏЯæ2¶AaÓõ‚{³g}a¦Ï]Ÿî¯ó84G—¢x×mDDZ ó¥gœšíÝjdÇ"¾œ»–·^YMÖ”®T‹L¢wüda)uJÚptÇÏü¶rOBɉ½C!ÊVòfâëЦŒÅ¶Î=¦DvôýŒ1í<{}Õž>e°`XC–®^ÀœÉçx]Aw´éÁ˜)c3ՆܴfÛtøÛìxŽSé·Y>´º)¼Ã‚¥\úð~ÙŽõØQçõ>L›þf–{95Æn4_êùhÞz^{y5ÎÅ+ÒeÈl8Õ#[ë]ò­Ö0ó<ÁÁÑh´zzÖǹéHAÝ×…‰šè1èܺÊW¨‚FgƒcÁ‚)^†šG2¥wò7çæV_[ÒÆÔÆ€ü>×(€ªª*¡¡¡8::¦ûBýûvÑoÐ(®]¹c•Œ Ú‹WÝØlƹç"¹‰èQì/Bæ1ןððôBUUüüýpwsÏ›oÎm7r‡.Ü%Ú üà2sÆ|Àk“>”žDb±¿ ¼Àèòb¥¦½áÎŒÉtñ>ªµ#å*Ug⬹ x½¤ô˜ zû‹ýA—¼…×k}YñZ_éAô(ˆýAH‚FL ‚ ‚8.‚ ‚ ⸂ ‚ Ž‹ ‚ ‚8.‚ ‚ ⸂ ‚ð‚‘éÇ¡÷ïÛ%V|hÜ´¥è@¢!Ë5“cŽ @ÿÁ£¥'^TUMóÕÌ¢Ñè@´ Z2£™s\*#ä}EÉP_¥öóè¢Ñè@´ ZÍd¥frÌqò9ù™‚è@-¢™¬Dç ‚ ‚oÇE €þ‡ ƈтg5#Ž‹@DD$ƒ† gÿþƒ 2œˆˆH1Šè@t Z-yR3Ùâ¸<¼pˆ9Ÿ½Ç+UŠ¢(J–ȲƒÁÀ{c>àÌ™³œ9s–÷Æ|€Á`È1¨±Ì›4€šå‹£·Ö¡³ÖS¼|MLšG`¬ìËï:¸yt ‡¾C ÏbØÙè°±/D•—Û0cí¿fçz{7ýÛÔ£5Öv…¨×¦?»ï„e(ž¹z3·Þ ÚNí#ZÈX_æ„âbñÃØT(æŒNgC©jM™¾îx¶—+ãGs\jtÏUµ,ÓÖŸ!óùSÙ½{o’°Ý»÷òùSsLkß©ÍðiKQ[MæŠ_(aþ×™òºÂÒiéÕetR>×AÓ‘‹qôîÀòíÇ Æ÷Ò~Þr»ÀøîõèŸf‚ýûvÑoÐ(Ó‰âýûvÑðèTJøÆ!Äå EI·SÂÃÓ+Íçï3£wk~1®EÄRÖVkôà#o Ó—EkíNlÔ#é¸çD Ä„ÆÚ¡6›¸/͸Ç'xSgúYŸòcau£#àwj0î5S}ÂqNM«eQ¼ÌèÍÜzÿÙ§­W^¦Ü;[¹ºî Ñ‚…}™SZ¸þs{ÊuÝB«å—ù³Où+WÆ )úé¥óó÷ÃÝÍ]θ¹½V1yÑÉnƒèytœ´Æ~~r4ݸ‹W^ OY'SXr}¸ºb±Åñ2£7sêmˆ¼AŸu×P-Sç4—ÎÎ@_æ”ÖNÚÀä·Jæh¹BæÇEÈuæ÷«@§qK¹ÿ$Šè‡,û°3ÕÎ=‡ìû¢;z—véÆýýqUì­LaVöFÍDünq¼ÌèÍœz_ZÔ›‡Ñ\ªM¥‹›^:;}™SZXñÀxödzÛú¸:êÑêl)Q©>æý™­å ™C^@÷’×~C¤õìÝô7ü˜;¬ㆷÆ'ò ÛÆTË–reüÇE°~ƒFYœ&;sdc¯ú¬>@á øý«>¸*¬ü¨-ƒç¬¢^¯7¹¼¶³tÚs¢ƒ}ßv£ù‡?z~³“Åï”I7»•†ÑB *â'56µ»Åñ2¢7së}ÿïaü…{¦y»Š2Ø—9¥…B: ~1/I‰6@ F.X̸uÍÙýÙ»0æ`¶”+ã‡8.‚…äµ×{þŸ/¼éÛ³ÕEè?c#ƒç”åú/£q\žìžÞ…–6 (:†,>Êü5ÍJ×ÖEÏâ¡ø„ÅÐÈÉ€˜pôÎm-Žg©Þ,©÷w~ ùœiùj>§´`nå”Ú8Û²âQ lLa6N ˆ=‘måÊø‘9䌋ë¤ùª E$ú<ðçÔŽÆÉ_cÅðe'RœüS{ïÉàžeXy=Ø|ue{ ²8ž%z3§Þ „ÜšÃÌëÁXÙUbyÇÒÒé)`~åŒÞín\9;ô$ÊõäÑÑpímå ⸙àà¡#,\¼<Ùçà¡#9V‡YŒƒGJ‡%ËtøA:)˜òéxxz%ûLùô‹LçýÇçíi=ùW £WœdNŸj¥¯þéj¼¬ÙÐu|C õ½Àøn›°v¨Îš)Õ-Žg®Þ,­÷æ3¨4r9.:h!}™SZ¨ùåj8Z3xØ\îG|‡¹Ã£( ½çOͶreüÈ£ŽË³³¼A7oÒàåºx–Oúþ‚Ê•+Ó«w_ÜÜ‹äˆÞ^}œ…“¢îø”r®vèK3å&-àøê·¥“r€O>žD‹Í’„µhÑŒO>ž”é¼ß˜²5.ŠzUµøÍ²:»ª8»…ö¥ÎÒ T! •j€Oéöüîs/;ÅñÌÕ›%õŽ~r˜¡{ï£Ñ:°xr ÑB&û2§´ ³«Ê ;hº‰Åœ°s­Àü‹%™¶îó­šeu¹2~dr^!›_@'ä-RzqPl¬íáîÝ{”,Y’!C†ÉÃûwLq²êÅcBÞÕADD$={÷ãÌ™³x{WcõÊeèõ¶IâˆD ¢!«4#/ 2þ-H§¥eó&”/ïA¿~ý0byôàžæC¯·eñÂiܸ‹þ˜lÐD ‚4#O ØØXÓªEEåáýÛ¨jœåÄÙÙ™¥KŠ!Ñ‚g5#Ž‹`Â`0ðàÞm1„ ‚g‘­"AAò ²âò’×^ù/ˆÑ‚ šÉqÇ%¯½UH™Œü¹%éD¢ÑhA´ šÉÊtÙâ¸Èãn‚è@¢!'È´ãÒ¸iKñ¨Ñ :D BŽ ‡sAAÇEAAAAÄqAAÇEAAAAÄqAAÇEA!:.}ëÔÄÃÓ‹Mþ‘IÂ÷l‰‡§ ºïNá¿O/*x5!Ô`|Ó¢‡§ž^Ùn€MãÚâáéEí¶_óìKÕ>kÛO/^ýp³)Øïê)VÎùš®o4ͱzæGò“–õiއ§ÍF'ÿý£[ãáéEÃ>+EϹÊIï#:x¾û?/“Z_$ýe‹ã2°¶«Ñ)8â—$|ý¹@‚¯¬MîwÄèð‰ƒVÉQtøú'Úw èòú.<“äÚ™ÅCYu9‡âmX?­)¼Ý¨ï¸Eq>˜µAF¥çD=œÉKÖZîþ9žýÁQ¦ð¨àƒŒýóZëÂÌ×M4ðœëàêåó©~vÍ„­VAQÑÁsÚÿ ì¸Tì À>¦0CäMþ ŒŠŸ þá\x¬éšÏŠTZ?Ù’íÐàëõßQÔF˱YØx+€°{[éõý¿hmŠ2{ÃÔ>5Õ?¬æã‘=©íá& zNt`åPå“¡"ùdâSø_?'Ò Òä£ÅÔ°· <ç:Hk|Ç£—í&­¼`ý/¼Ž‹sÅ!h… «ËMa!w–cPUtvÆŸGZvã‰éÚ’«Á kèn {vÙ+áÿ8C §Œ AíZ”¯PÍtýѱ͌è݉ÚÞÕñ¬T‹fíû2o‹YõµumÄϳ{¡ÆEòY÷ID=aB÷ωˆSé;g]lE)/€<ºÎ¡[iGîí™Ä®ÀH"wóážû8•îÂüwÊI‡¾ :x–+[¦óæ˜eD« í'¯æ»>5¤S_ þO sÊH¨ç…+Ø¥ÞÕ¼©X­>ízãàÈ$qÏožË[-^¡b%o´îÆìM§Slwj6IÀœ²ÄqI­Þƒ·]õÄ„gOü²ûíMÆm˜ú7àܺÛñÞößø„Å w~—¬ÓÍ{ëÜŸ©Ýï3?Á•Kg8÷?Zôúˆ1uøéÏ\8ùƒ«3󃮌Û|Û¬:i6޽+᷇׺½ÉöaTî=‡‰M_’‘çEÑ¢e²IØÃçãv²}Ü4b°aÊòqÈŠõ‹5$pñש¼ùá*bT…¯âÛÞÕ¥C_ þO KËè=÷"Cg,ãÄÉ#,߀ Gþ`D·oM×}|G‡ñ ¸_ðu¶<Âî5S üid²|¯:¥¶ •^Y⸤Aç–Æ ÿ§3Øù€¡ßEQí7.Çœ1îomÙÓ¬|Õž}©UÚm¢°¥£§òɼÑT(ìˆNïL—I³Ø>õk³ëÜdÌ—èµÎù£ÑêùzÌ+2ê¼`:°/ÖŽE}*ðàÀ'L<ðŠ}~¤}Q;éÈp<¸°ñ ÚOXƒAUèøÉjfô§åEêÿ´°´Œ—~BíÒ.ètz¼3€°Ÿæ7a=qªÊðߣœ‹½K>øqP†ê–^Y⸤AÙ> ¸¼ô2j\$+…cíPún^¼âdM¸ïÏ„T..»@óæ-Å¿áœ|Ûfíý0FÖ«eZ>«Põõxþ ùb1ŒC5Þ®Nœ!‚A#Vʈóê þ¸Å¨j,±ªÊŠqu¥_@øüü)&ÿL:MYÃôÞÒ‰/Ø8––ÑÁMÿtÒÕ9®¸§çzÖ?  c¢xvî2T·ôÊzÐeWÆŽ%‡`¯]CÀùÕDøß! Ö€Kéît+_€ýÇ}Yíαsh­\^ÂѼ §°dŸpÈÿïsg)f­ÍP}/­ÍŒp®2Ÿ§Žæ»KMXxà;F¬mÄÜnž2ò¼ :H|³8ëäUG/šÎüô1]>ÿÕè´|º†iݪH¾€ã@ZXZ†U’z¦¾ïœ;Òæ–%+.© þ‹Ø|˜í;·P²s%*t/ÀÎßÿbpÊÈÔco=ŠÚ°èrp†Ò‡ÞÙJ·/ö µvgö²áh £—}‹»µ–??ïÍ–»a2ò¼:D'VN¢s¼ÓÒåóµâ´È8#et)lÜŽÞðô]7á¾›SqšäÀ]¶~lÙ¥$Sg_ i“¸Ö}€‹ ¦PqØË™*§ßÜw±×jøeÈD^öÅ`ˆ!ðÁ öl^ň®¯¥™6.ÆŸ÷»~ÊC­>]JýÆaÖê±jJsâ !L~g~1q2ú<Ç:D]¿Ú‚Іw¾XËWïÈËädÈ™2úÝ¢0ûýùÜ Š$"ðß _”b\O[ã ÏA߈VKºì̼ä[­aæy‚ƒ£Ñhõô(lÜ{Ó»v¤ îk‚BÀ MôØ[F(X±7{ÖfúÜUŒëþ:Ccpt)ŠwÝFt»0Í´›>ìÅ^¿\ªbv§2I®•ë<“¡ëš°Àçoº~¸™Ýßw4]{ö1´„ÿå]ùSA4ðüé@UUÀÀºº°î£Ôã%îcÑÁó7¤öÚ„>Íê±Æ½þX~nͤÙëyµþrœ‹W¤ó™0¹/Š’tšž1¦ƒgo£o£Ú/¬Î㽪Š££cºFØ¿oýâÚ• r' ‚ B6´¯º#°-ØŒsÿÎ}.Ûh®?ááé…ªªøùûáîæ.?²(‚ ¹M»‘38tá.Ñ•à—™3æ ^›ô¡çtbAAÈ]¦½áÎŒÉtñ>ªµ#å*Ug⬹ x½¤GAAÈ[x½Ö—¯õC˜l ‚ ‚ Ž‹ ‚ ‚8.‚ ‚ ˆã"‚ ‚ Ž‹ ‚ ‚8.‚ ‚ ¼hdúqèýûv‰_ 7m):D‚hAÈrÍä˜ãÐðhé‰UUÓ|5³è@t :-ˆ„Ìh&Ç—„ÊyEQ2ÔWæþ”ºè@t :-ˆD3™ÑLŽ9.BþA~ S¢!¿jFç ‚ ‚oÇE €þ‡ ƈтg5“Ù'Í."""4d8û÷dÐáDDDŠQD¢Ñ‚hAæ¤<©™lq\nÝÂÄ¡ïPóv6:lì Qåå6ÌXûo´ͤWŠPÜ(Š’ìpOèíÝôoSBvÖXÛ¢^›þì¾–,›ÜŠ—×1 ¼7æΜ9 À™3gyoÌ †,É?³vÊëý+:È™ñàôÏÓiYÓ;+-¶Nî4îð.‡Fˆò™®ì_Ljî¯S¾¨3ÖZ-zGg*Õjʘ¯Wgž#óˆÆö B1gt:JUkÊôuÇ“Äyxás>{WªMqÞÈ”6Ó˜“ÔØ@æM@ÍòÅÑ[ëÐYë)^¾&&Í#0öùut²{ÉÇ¥éÈÅ8zw`ùöc…Gã{i?o¹]`|÷ztžoÙž?Æ7a™Ú—ý3ÞHv-6üMª¶á×k^¼Àã©|íWÚTiÂňØ\—øü‹©ìÞ½7IØîÝ{ùü‹©™Î;³vÊëý+:È™ñàæ¦aÔì6‘ƒ¸èFÐíã¼aµ“•šqIt¯´ðÆÇ¿Q©Ý{l?q°˜(îøì¡sé;|?±Õ»ÿl†×ÁÈU7ÿ(c—í%$"”Ãk¿ ð·aI¢Õè<ž«jY¦­?‘åÚLkNZûNm†O[ŠÚj2WüB ó¿Î”×–NN­.kž[Ç%;5“ªÿ¨ªª¢êÕËçÓü,]4KUU5Éÿ y¤Etè)Pm 6QÍ寿÷U;×fêÅðU5>{•¤¬cã«©€:ø”Ÿ)Ì÷ä P«O8žëñò"æôqJŸ»§¥‹guY;åõþ˜§ƒÌŽ]ÝíT@Ýi ‹ Ü­jµÿäs-Ä„]PUkå–nÜkëÚ©€Újùe‹ÚgN=ÌÑfzs’›•VÔk±¦°ØˆëÆöY»«Ï Y¥™gý‰ôÒùúùª€šcg\­ÑOŽš?äÖFöXÃ’#›© Où©íÅ+¯Ч¬“)¬@¹>\]±8×ã½èdÖNy½E93üêoÜjTÀÆfS ×VÎä{1·ZcºQ×NÚÀä·Jæ¸6Í™“ìµñmI)_ƒôu^Þ*J‰}_t@ïÒ.ýý²ÈktªÛ‡ËÓ­œSªñ~lЪØ[™Â¬ì«ð{®Ç{ÑɬòzÿŠrf<¨é` À¡'Q¦°¨'‡ˆ Ø&:È·Äpçß l€÷€ùé¦XñÀxnhzÛú¸:êÑêl)Q©>æý™­Ú4wNšßÏØïÆ-åþ“(¢C²ìÃÎT8_º<‹È‘Ðø¡­§OuŸóuºñ?{½1ÝÖ0·sÙ4ãùÆÄà U’yËqѾ¹/¯’S¿!’Y;åõþäÌx0ÿãfT·ƒÁÃæ²gþÜñeî°ÁF;ÇŠò¡ž=,ëP¬«¦7O7ÝH㙡ËÅ{pê÷¸áÇÜaÍ7¼5>‘gØ6¦Z¶hÓÜ9©õìÝôhÜO´)šëñòêÞdfÒY²ŸY;åõþX~®!#㪪êŸ?NPëU*®Zk5ªµ}!µZ£×U@µÒ{Šò©TC´úàÊ1urÇr* i4'Ý2Îì JtÞ)hñLŠSÃLqIK›æÎIë»–WµÆðêÝ 52ø¾ºhdMPËw]ÿ\qÉ ÍdôŒK¶®¸ìžÞ…–6 (:†,>Êü5Íû¦~ä;l5ߥë­*âÀâ¡ø„ÅÐÈɸœîc\æsnkŠßÖEŸ+ñò*9õªæÌÚ)·úMt·Æ€VïN£Õ»Óžný…m¡íØí-:ȇZ@cÅKµùtõV¾²«„ïÑOi&iãlËŠGa4tJtÞÉ©!Ñ¡'²M›æÎIE¬µlúv Ålµ@úÏØÈà9e¹þËh ós³âò\¾òÿÏ©BÐX1|Ù‰©Ôž¯WU5Åϳ×÷4.Û­¼lº|ue{ 2…剾2– IDATV¼s픚òzÿŠrfé=5–Ùt¢Ñè@´ ZÍdeºlq\äq7At ˆÑ‚dÚqiÜ´¥xÔ‚è@¢!Gù‚ ‚ ˆã"‚ ‚ Ž‹ ‚ ⸂ ‚ ˆã"‚ ‚ Ž‹ ‚ ⸂ ‚ ˆã"‚ ‚—¾ujâáéÅ&ÿÈ$áû¶ÄÃÓ‹Ýw' ðߌ‡§¼šj0¾iÑÃÓ O¯l7À¦qmñðô¢vÛ¯ˆyö%j Ÿµm€‡§¯~¸Ù|÷Ì^¾ýd,o¾ÚŒ*^Õ¨ä]Ÿ×» eÑVQT>ÕÁ²>Íñðô¢Ùèä¿¿±stk<<½hØg¥hà9×AB9é}Dæáç³—ÏÞF«W^¡JåjT¬R‹ÍÚÒ}àû9^—ìÖPjùg¤Ü”ÒdWýOý¶˜¾ÚQû&å+V£rµ:Ô{åUÚvì™büÝýZP¥îˆçÏqXÛÕèñK¾þ\ ÁWÖ&÷£SPÀc$Z%G ÐáëŸh[Ü Ëkè»ðL’kgeÕå`Š·aý´v¦ðŸoÀ¾b f,ù™SgOóïΕ´r¾ÆŒ1]±æšŒVùP=œÉKÖZîþ9žýÁQ¦ð¨àƒŒýóZëÂÌ×M4ðœëàêåó©~vÍ„­VAQÑ_6™&Gr8¶<Ó—mä¤ÏIŽøï&ö¥hôe¹1ò76Œ£ó¸(Ôn »á¢Ï¿ìÛ²š)Ãß¡˜Ö/yÕÀÌ“þmÙÿùs\* ö6eÅÓo†È›ü?üùðXÓ5Ÿ7¨8´~²$Û  -À×ë¿£¨–c³°ñVa÷¶ÒëûÑÚeö†/(¨}jª¿7ÍcX÷6T*鎕VƒãKžŒú~{f~!wC>Ô•Cu–On„jˆä“‰{LáMüœHƒJ“SÃÞJ4ðœë 5®ýñoŒ^BT´›´JtA—ÿG¯î|?¶ÍCMÂXku8*Ê˯vâÛ•Û^[dD»9¥÷ißǺ)=ãâ`ÖÊ÷ÒhÓu 7ìL?üÑj.EÄÒbpùçÏqq®8­¢tu¹),äÎr ªŠÎÎøóHËn<1][r5€a ÝS]Kø?ÎÈÂ)#hP»å+T3]tl3#zw¢¶wu<+Õ¢Yû¾ÌÛbÞr­­k#~žÝ 5.’ϺO" ê ºNDœJß9«hìb›nÿoï¼ã£(þ?üìÞå’Kr Š”ÐB7("E+" ½WiŠðµ„ª D@@¤(‘¢Á‚]ø)J•&„Þ!!=á’»ÛÝß1„PLù<¯×Áeofönæ½3ï¶Šê €3i´TùT•;ϦK°³F³.6…”Øõ ßp¿àŽ|Ø©’h èàß^;…g_ Ça(´³Œ÷zÝ':ȆF¸Ë÷ÙwûbÎA§ÙÉß–Ó¿S+Bk‡RµV=žì8ˆ¥Of¼>ÓÊüÀ‹y¾c+Bï ¥Ú½ hÕ3Œ-ìÂîýb6­›=Lµê¡4z² ³ÖìÎ|½ßÄÐN‘ß7´M4 jõ:<Ô¢;®Ý—!NvZÓ¸•Cj2j祌½Œ;ß rHMî}øÍ¦q½ôÞ|¤>•Cjòê_‘Ò‹Ù?Ê!5©Ýht–ù¾3Éáî9|u:?ÿ±‡ÈGÖ=4Ë×b²”`HYßLßgÛòé<ûhcªÕ¸Ÿ&-{ñɦc,Ÿ6ŠÇj@Õ÷Ó¼í ~<‘˜w‹ÉZ™vŬ8“÷³!­ÛýÔ÷0Lƒ7°oÅ©´»­ßØ›ìÄø ý,Ù¦ý휕<Ðç-6oßÁáCîŠ!fßÇ4ïñ:;œõøôçÍØù êÄ3ýµÎ„}u*Gß¹Ô£aÌëY{Ôžêò,?œO¦FÏÙŒz¤dŽâoý Ìm‚Š<*-U~Õbbdøhì'~›ŒOÆ}FNF,D§>¸ÂÁ/ßæÙáKq Ͻ±”i=ëˆrÀ'ÇÜF´{°_¶a£vÌáɓأ7â‹[Ù½ùsšp€ñŸeæŽK™Â÷œsASÃÙ±s+hÄ­ß3¤Ë´ôÏ#ÿ˜JÛQó¹X¼%ßÿßVÖ/›ÄUC¯É+Ù_Ø G?§y«—øb›Æ˜y+Ù»o_Îy”-“2ô䤷dÀp·~6Lø%ÃñŸ&làþ°¾7ì¹^úýÇ6`Ó„3„ß<ÉÝ“Rý…~Yþ¶Ùpèûp^èÕ…‡êÝÏMZÐ{Ø8Öl>–)üª5§ŠÏu*İ?‹þýF~YÔsÛ™øü³,8Såë¶ðó®œÜ·™á=¦å]ãÐá1wƒÿéß1îŒüé<ƒš¼€¢(\ÜäÎØ˜¿ÝãÛ¥랣t\Ó5Ç [HŠn0vî0ª–°a¶Òqôûnçÿö;9þÎM_™ˆÕ¤³ïªÉÊ;¯<œ£xÛ>IŸùn!=;öe„ü«Ÿ{Z± WUÎo˨ͨÖëZ—ö ÂúàÀê ´ùš¡Ðvì2¦v¯#:È!'S4Êzš² »èµ¥¸ ƒ!³‡R©¨k@0/ÏŒah|òÚâLá‡/ËÁE1›­4ê4€äó«¯öØ\ƒa ™õ­X+ðò¬Á7²ÕÙ~¿Å/L'Ö¥Ñë“™_ÄøWzR.­ü6¼užÖÅ?ç £2´~ÐuÓiìçé.S‘ôcMÒŽ)ª:`莼m\låâcR‰Ù¿ û¥Õĸ4lÁ]èRÅ]KbYäe–î‹ÅäQŒËÚr”îõÆK¯ôöý¶oO¦•Wº³ãÐgغù"µžgåÛKX+ ›ßcÈòÏ~ÿ}Á+t›ò= Òeâ Þë×@Z¨|®ƒk+C€@sÖ—ˆh àéàïOß ýØÕnÓòægLîZ;Û8¢ƒŒôªè"úôdâmOÛ#C™ßæUg†óŽçMã±íØ7{!Î>àî•ûP®Ò«=4 “¢ðÏÜy|ýÎêzöæL•Ū¡õé:h«?ë—ÖËr ýó­³÷c-Þ{Óæ¥eНd}}†qÛòðŽÕÈó¥|Hÿ~ú€rªPµky~úæ6ŧâ_iÈ--{ìVÚ€ñ¹ŠŸtú[ºLØ€ÉĬðQ•aáÓ²˜øy|OÖžIÎg˼aôœöŠj¦û;«ß¡†´Nù\7‹h àé`Ç’Ñtÿ%:*Ç/gr—Z¢ƒ\ÐbJoLŠÂ7ÃÃѲi¯:–tÅ~uéê[û%·F¼K¶¿és· r÷´|9½Œª‚¡;ˆÓô,Ãõ,㞈ºðhBÖ½JÎ4ë<ˆGý½°G}Í¢}‹ùê’¯"MlËUúÿÆŒ¬€=ú{ÂþÁû'0™×((×åPýywÚ¶únÓ¡%3="ŽòíÚåúäN&þXG÷øÚÛ³ðHÓ{ð ΛâîªÜð–ÎÓgÎ ø˜T¾8Š-‘hš“ØóÇÙðÕR†t~*˸ºó/w~“Mçñ7ÑÀß’&†ú,× ]KdL§0¢œWŽqÎzO_‡¢Zè=e5ãž ‘–)Ÿëàf Ltž´•N–3©SMÑA.)ÒOG¶"éÐÇ´|y&»ŽEâÔ5’ã.°mÝÂz]ºé7­;fEaÎÐ9‹I!%ÍCQLôz·÷MŸûùImQ…Ù/Íáxl öØÌúa¦pÒ Ó¸Ï·“¢iÄœÜÍ[}3OíõÁ0üM*‹û¼Êº½§qj.¢Oîçƒ1ça…¤ ¯l‰´gÛì¾6È­“i}fºÍûÀÿeÛg•~ëIÏ0sð˸tƒ¢÷¤¤GöÃNµìÍä9KømÛ~.Ä&âÒ!51ŠuKÇ»¯Ù°×H<=Ÿ‹çºç }™ïdâåÚ< Ó÷ï@5YéVÂí„­ÅÚRÄüqIn;è¡ [»HªõdêL™³”°®OäÄV´4¡6¦í«ó³Œ»fx~²S´vfµ¯á³J¦3hESæíýÎÿbýŒ¶î cÖ¯nª;kCxXÆ4ÿËý&ò"ùA7]9Š ¤ÜÝÙ+^ïÈŠ×oîJùŠnÌ}Þæ·ºÍ™¾š×z<Çù˜4Õ‚`q*U­–®xÝ—øqAQ&ÎYN›‡—‘Š…àêuycÞhz¦m^x3”h<’Õ­¼>wO5\F`™jt8 vuËnÔŠ$Ž˜Îo“ž't¢…r!÷Ñqðø_Ç áü«tfýW%˜6{ oökGdB*Å+Ô¦ÛàÂM}¥f}GïÆd[ö•ºŒÁóÝΤÆ;PTOÞìR1Ûß•Uú5Âh쿊-iËŸ“³a§zå<ùóÇ•|½d. I—qê`õ  bõPFÍ\A¿î61bÁÌÖz•ðÎÚRÜתARR6›-Û mÓÆuôé?”£‡HM,‚ y€ˆðδ˜¼³µ »w}‰—zûæÿ |°.j¾Ëæðf·õ;çÔOT©‰aD]Š"¨xÐíqAá΢9Øò‡{Ï›g†O½­¦`þ_;òÔïã"‚ ù”EÍ0ùL^~¥è2f1ºüyVb\A!ŸÒwýVú²ß¬J± ‚ ‚ ÆEAAŒ‹ ‚ b\AAĸ‚ ‚ ˆqA¡qËË¡7m\'¹XˆhòÈc¢At ˆ„Û®™»f\ú&%Q0 #Ë­™E¢ÑhA´ ÜŠfîšq¹òe„¼¢(¹*«œ>²]t :ˆD ¢™[ÑÌ]3.BþA)ˆÑ‚_5#“sAAÈ7ˆqˆ‰‰¡ï󉉉‘̈тg5#ÆEÀnO¡ÿÀÙ´i ý¾ˆÝž"™":ˆD BžÔÌ3.I§ÖÓ·E}¼-X¼¨ß¢/ëO'ßöøy=\^GÓ4þ÷Êküý÷þþ{ÿ{å54Mˆò„Nü¹–Qƒ:q_È=x{šñô  VÃL]þ—è@ê© fîŠqq]>@ÓÚ-øòhM¶!úøjý’µšrÐîºmñóz¸üÀø o³~ý¯Ž­_ÿ+ã'¼-:ä <òÒBl¡ÏñÉÛˆ»ì òÐ&Ú?Àˆ®õéðáÑÔ R'`ÍÜÃ0 #11ÑŒ#û³|-Zð¾aF†¿¯¤q…m#î5cÀ®¨ôc‘;û€Qgäv#;r?¯‡Ë‹ä¤Œ¯÷ºRÆYéBt :¸:¸ޤ]`xi*::Aê„|ª™û‰ìâEFE€qGz\.9@¯Š~éÇü+õàÈâ…·-~^WØw*Ÿ“/Ž„?ER'HPȸ#Æå›h;µ|<ÒyøÔÀóÍm‹Ÿ×ÃvDÂʧº`-ÚJt u‚Ô …Œ;²]¤SÀפdºCÒ‘·-~^—W¹[ψîD>mžÙƒ''o ëìwDR'HP€5s׌K‡Êy‡F¢fàŸV€†+ÑÝÅc ºmñóz¸¼JŸþCo:Nnž9":Üî|Ú8­ ͆¯Tº¿û ;UH uBÖÌ]3.-‹ZYx>‰½ÉNûYp^Þ €5°åm‹Ÿ×ÃåUîÖVÍ¢ÑÁí̧õS:òØÈÏQ3þɇýîÏWz-HP(p[þè^€%ÇâÓÅY @Åý¯v¡)Êuº”Óøy=\aGt Üüüv[·iQ=x1|G&Ó"::Aê„ÂÅm_íLÞc„úZŒ"Uûû/&‰÷}BŠß:ƾdg†%UÿŽ{3ñóz¸ü°Œ­[×Îéåpí«[×η¼ôQt :¸:øî­V`(ª§ñ¿¥{oø›DR'ˆþÍ|þ±–éõIøÇùg9´Ù»6›÷¬¥uù=4*@@ùFì nÍ7{7SÓÛ|Ûâçõpù±oŒ¦yóG3kÞüQƾ1Zt :È:xfÜZ÷–žÊ̵ÓïÆÿ}W.::A´ðßШჄT©’áX5èѳ7ŃJÝöó)iN†¤¤$l6G"ögaÓÆuôé?4}|kÓÆuô0 · ò:Š¢d*c»=…î=ûð÷ß{ ½—eK±Z½2„©RÃ0n8®):ˆD ¢…«—Kã§_6pæÌYÊ•+ÇÀq8R¸pîô 5óo?q#®Ä‹ºEPñ yÈ¢V« ç@“&Y8ÿƒL” :D ‚f³‰Çš5¥J•ÊôéÓMsqñüÙ;s.Én 00EÍ—ŒˆÑ‚+<=-<Þ¼)ŠbpáÜ) Cã"‚ BÞEÓ4Ο=uGÏ!CE‚ ‚ ä¤Ç¥ò_nÕ,ˆÑ‚ šÉÆå¿ÜEOÈ9Ù­»Õx¢Ñè@´ ZÍÜÎxwĸÈr7At ˆÑ‚p7¸eãÒä‘ÇÄQ ¢At ˆ„»‚LÎAAŒ‹ ‚ ‚AA -¹šã¾p–äœ ‚ y߸ôé?TrMA„üa\d–¸ ‚ ÿ2ÇEA1.‚ ‚ b\AAã"‚ ‚ ÆEAAŒ‹ ‚ b\AAĸ‚ ‚ ˆqA¡ãs+U©!¹UÈQ…#ûE‚èC}wM¹6. Ûýf6m\'úD‚èCøOôq-2T$‚ B¾AŒ‹ ‚ b\AAĸ‚ ‚Ph1çç/ŸšêàÔ™3\ˆŒÄåreÖ0 ü|} ©\??›”ü€a¤¤¦ŸÀ¡ˆ#üñ×.FE¡Š åË•å¾Úµ©T1?›/ÞÞÞ¨ªxkáîs$z‹v„ámñ£uÕaÔ.ÕT2E¸i¾ßvše뢆k–bXYMUèŒK|B< Ðªekl6¿+Í£[Æy¸ß§¦¦rðÐAN=Cy¥ 6›˜—»‰Ãéäø‰“D9ÊÆÍ¿c6›xðº<Ûòi¬V+/^dÿ?ÿðÅ7ß¡ë÷‡Ö¢VêÔ¬^ //OÉ@á®áÔRùhçkt|¢?&ÅÄOÍ㋃ÓðÀLJÙ*I 9BÓ ¯;„ÍññòD3\:è$\v1yÑb\ £qq:]xy{ããëKª#]×1 ãÊû´WªÃAéÒ÷àr¹8qê Ê—Å××Wp7L‹ÃÁ®¿÷òǶíX,fŠ ÀÇÇJô¥K2ÀÇÇ›”ÔTüý¸/´ûäì¹sœ¿IL\Õ¯‡···d¤pwî’#æS«R]Ê«ÌÉäí h1–Ÿ÷-ãç£áôª3Q2H¸!'£’([ÔUU0 ÷­³¿¿í>…CWHuAª¦Ð¼NY Cò«PUQÒÞ)¨ªŠnè`€¢ªèºŠ†ŽÃáÀæc£ZÕê¸\.ŽŸ:M…rb^îç.\ä¯; (b# Hî)UŠcÇŽ³ýïmDEEàçïOùòå©^£*‚˹‡öl6Š 0 €ºuî8‘I'Ùrj £ºÌa_â÷Ä:NQѧ‘‘¸7àiÉ á†l=ÅœµûX6üQw‹¤(`è8up¸ œ8]âp^Óv …θ¸-‹Û´†ŽŠJZŸ ªj : *.§M× ¤jH5öíßËÉÓg¨\o«5Cz•Cjà{O+þ\?ÏM³¸òyNwù+ì\ºC\\ƒËãããƒÅÛƒ+pðÐ!¢/]ÂÇæK±âÅ(Y2MÓÐ5 MÓ8vüäuË•rP³Å‚_J— æ¾MèÜ£Õ‹yåêûÞJùÞImDíý•¹‹V±eû>ÎGÇãR=,^ŠàJUøì£w¼ ƒî—íG«&]‰ÓOïú»~ßÀüi³ióÑ"^œ±”¡O”+y¸=| =§|MÙÇû2%üMjU(Š#!’½Û~gͲpÙm`Ç™ŸÐ<ìÔ)ߌ¿b—á4T°6à½oþÇÀº³Q¸ñò¹õIÒt̾f\II¼µá<‹ž.#™ZÀIqhLÿb?šâÁ+=ãµ_^{Gè†Û¬84HLNÁ¢8©|Ýô~œ:!m¡F›™»ò=ª—õ#þô!–Ï}‹QýZñcÿ÷ù8챬ow®¤]¯Iœs*t°‚·:Ö’—þ¦Àš–‚c\Ò ‹¢ªî—¢ºÍKšaq˜ŒÇ”LŒ*ÕôuFÔâÒî9ŒZwî†ábö}Ló¯³ÃYOÞÌ¿0 N<Ó_ëLØW§ÒÃ=ßÐݯýóàŸ.‰¤ss2U òïjاÀˆ¬L™Ò—+ÇñgHMuû$&%ÉÙsg9vü‡"q8‚³gÏêHÅâéɉSgÑ\µkÞü’Á¢užO+›E7]N¹-ßkÇ™DìÏðwnÏ ðɱºûåè·ÿú½é‹V²óïÝìßù+Sû×dÍü‰´½)SØoç¬ä>o±yûÚ“¦Á©´5Ÿ‹Å[òýÿmeýò·I\54_k0>%’w6uâßÖgÃÑe\³Yg³ûÂ/ûŽ]¿¯å¹ H>Ù™w¶Fæ:@ÿ± Ø4áÇ Ç7OÚ@õú‰Û¸M¬ÝzŠ9ߢÓ3SºD1ŽœKB× œŠçЙx"ÎÄsølGÎÅq&–ˆÓÑ8q щDÅ&qèäÅë®(úôŒ»¦K™ëëÍV¶I§WdúlkøhÚŒXŠÓã&®XK¿F% tãâ6(Ê¿^nÃrõuí±œÍèîýá J{šøòÕ9ž¢]7Ì¢a IÑ ÆÎFÕ6ÌÖ@:Ž~ß}·üö;é᪠|€Kÿ zÏû¤ê†žÊ´¿£Ø¿ì )0"óõöÆÏφÓé`ë¶|óÝ9rœÄÄd ÷œ«ÕdærJ*§Ï\`ÿÃÄÇÇ£ª*Enúœ&ÏòiæðøM—SnË7+n%“iº+›ÃɞǢUãZøY=0{ùñP‡78õã{™ÂÝ{S7¸(צüÑÈ5†ÁY/Q1Њ5°/Ïœoõ—âJbÆïýh^¿cz~Èä Ìü½/ñ)Q,Ý5†çíMŒë8gSöRÓöÏmÃyÙàÁ2-²IÝ`Ú’c(ª…×Û»5Üa$ªÂ±%ïs½¯Cf¥RQ+Ö€ò ›5ÃÐY1rq®Ã”nú­fâÏ`Ïe÷fœšãv_BQÍŒ~®­3ýËýl<G—VâăQv H¿iÝpOÆÕt—n iiKF 0›TR.¬–Œ×ó™´›×27¸ÎMž¥ÓÊõL¦Ïz¾³Í0xtâB:Ô(ðå`.(?ÄmDÜó\Üë¡Ý;ªFÚž. †š¾¯KVí®Å÷ŸŒ{”'F¯£ßèŸØ0=sE¶ü\2/Õ¯{nä-éïý«¼ˆ—ú5qG–O°óý]xú?ălgǬ]°ìIÂ$ ¨^ ­âOÁ*(]ª$÷Ö®Ell,»÷ìÅápOjj*` (*&t— ?_/ülþî]us±lPK9žv±W¸érÊmùfÅ­¤QÞËÄQ»‹Ó©•¼²6/ŽøýLŸô¿ü±‡s—âqjú5y’¹à™ÀÌ+¯VG^ M±«“Ö­ÅZùs“v†Q·VCª×áBê?ô{ò þ8ümGhÉæøú{Sóžü· ³êI9ÏzLýmC|”mÚIg>fS|*!à õq={øÜKXå"¼±™g“xOÆ;èçŠ_“¯EÝùzùâ ,Wá“?“ÛÓié&®9ɪ•¸øû$â\:E*¾Dq·§æÞnCœšCÓ1k*†C#>Ù…‚Y5°z(xy(xy¨éï ݼ<=¸H™âuQÆÓĉgS5‚¯sk©î^“%ó¤ï•o´¢Ó„µü:º;Ÿ”ZCï‹èr(0“s¯}Ÿ¾ñºÛƨ*zÚd]·än®1¬Ø~}?y˜ðïF° £ëœßýÿoûöpåÆ ‹ÉRš>%}øðÜNþJHfúÞhʶÁ0Þ Óš™$Åû³+ÉoéY¦“o{ÅL&<<ÌÃÏϽ§Ë±cDZZ­œ¿pžèKјÌfb¢£1›MxzYÜÏÈ—v} @`Þ7]N¹-ß;•F¯Š~ŒÝç'[µH–aßíÐð‰<öê –wmBÍ •«†¦oˆ•¡([I¸\©˜­*ªaÆ®Åq0ùgjWx*%CùaÛrÚ7Ì1ûD;ñpÀ ~ÞõõJ?CIßìçì|÷sb#¦R9djæeên¾ßø®üÎÚCÃ0-Ä?sçAwùúÔõ¬8ŽÛĈöµY½å$+ÖþJ«ÇQ®¨7'"“INuâi"ͬ(¸TÒ^.44]ÇÛì¿•¹k¶Ò¨FP†´»•ñeÒ‘8–ŸMbT¥Ì7®‰gVà[¦S¦Ïîëþ6«…Žã¿æíÞ­q,ø‚ Öp‘¦_ñ(P‚IŸë’þJRÕk†’Òæ¼¨7Sc«¼üÉDl*Ìî;&Ó§ÝJû° ">Û”ZtpwÙÎÝ8ƒcvV¦ÊÀvh)§xgÃ÷v‡' Üo†;ÿU‹Å‚§Å‚·7>>ÞX­^Ø|ÝÏ&òõñÆÛÛŠ··7&“#}…ØÍô¶œdÔ«¿¢š¼yí½ÇrUN¹-ßâÜž Å”Þ˜…o†‡£e“ËO¹Çɧ=ÿ¸Û´ÉçVÞÔùÚ¹ïô¿Ž¾:‰Ü~éÛ|«½î¡ãÙ¶ýw~Üñ)U¬ÍðV9š²…dó´mÚ›Då'ìQÚ«6)v';üÏT}!{Mk‰¼ùëyLÅøóÀÞôyMG"öq`3Å=LœýuIÿ*´¯.]“¯Ñî|õj›)ýœ†»‚Å¿1#«`þžð£ðþ‰LæÆ5 Çqi߸<ƒZTaÍ›¸Mµ26LªBóÐ’4­]‚‡j” ~µ êV "´R5‚‹S¹l1.§¸Øsô“—þ†ÅdðTÝŒ='-'´r_w£W\gˆÑàÓÑn ´xýáË:Ý&ñùØ6 %0­kfm8S`Ë @>ÁN¹fuQ†¹/W&ï¦MཬÅeñÿêbÞ˜é³>s^ÀǤòÅÀQl‰ˆDӜĞ?Ά¯–2¤óS–kçÞ}ó7Va±ÝGï’>ø”ìA]_ ŸÝîp»²ª<œN'N‡#­Qw—ÉlÆËËŠ¯¯/¾¾6ŠÁÇ×o,Kš¹Tqº4RRR³5/†î$>ê$¿~µˆnµã÷D^œ¹š¶i†áfË)·å’ÖÅ»%Òžë4þM‘~|:²I‡>¦åË3Ùu,§®‘wmëÖÖ«ezØÎeÝÝϾØNЦyø^éþþM•×ó“Ú¢( ³_šÃñØì±'˜9ôÃ|«¿b>eÝt5©—Tf}9ÊSÞ«çS÷ógܧìKþ–=žPßÖ¬Þ8Ÿn¡ob1e¿yá¥=S8•¢Q¬îHŠš3Ö'ª9×ëCK9ÅÄ=Ñ>›3tÇbRH‰;Ŭ¡óP…“{eJ?§á®¥õ¤g˜9øe\ºAÑûGRÒÄp{©[¹“z×åÿþÚÍŽýGiPµ(ºaÓWóò´Ï2åsM^ÅóWÒ{üJz¾µ’Wg}Ë’ï¶ód Ft¸—ßã¯;‚™}pi×,ÚŽœÇޓѸ4—NîgÎÈNÌØÍC}ÞcôýÅnø½B»Mäóqm@Ofö‹­™öÃñ™ÿæ‚*¬Œw¾W羸÷ÕÕs<ÇåZjõŸG«åMX›6_!½a©Ö“ «J0eÎRº>Mt’[ÑÒ„>ؘ¶¯ÎÏÖ§DÊzÍä´]£\Ûÿ¥9G•W/M×/O`ò*Cï>¦t]'>>ظ„LOzVÒþI74ÿ*…Ëöd¢¢¢(Uª$×§¯RµªÙ[‘"”*Sû۾ĸž™wν™rÊm¼©¯´bÀ¬ïèÝØ=ûÊʢܞû ôy›ßê6gnøj^ëñçcÐT þÅ©Tõê‰aŸÏ#eÄT~œø<_Ž5SºRM: ûˆõûä¸ÌJ4Éê‰V^Ÿ»Š§.#°L5:œ»ºåߊNµÐ-ôMvž[Ç{+Ãèм/uËtfkÜ'Ä9Îò€_gþ>¹/ÝŸ{K6ÉQšë&üÀã£\÷óF£šAëålœ¸ÖtL?>·ƒ•W;=ÉÓ±ØJUaФ9¼Ú¨D¦ø9 w-5Âh쿊-'Ü;³>5æ!qwˆ{ŠzóÞ€™úù>¾ÙÇsÍÝ×üê×›ç:Í–£>¦JÃÕÌ[ö5;„“˜‚ÕHÕ{`Ò‰tjšý¢Ð®ù…Žo}Éü—Û’šº’1mB TÞ§íJl””„Íf»áöÑ•ªÔàèáyêËŸ>{ÕäA“‡¹ñxúúÕ.êi“sÿÚö'öË —+/Wa6lÚ¸Ž¾†Ý´>4MãÄÉS|ñõ·˜=<½·žž'¥K•âÔéSxyZ‰åìÙ³˜Í&Î_8ÕËJ@`Q"¡s»ç¨V-D´Xõñ_}ù sÿJ…òiÓ` ç{ R«1yù`†7^NQïÒwä¼9Ý¢ÿV·òïL‹É{1[«°{×—x©ŠèãNÞœK×aûÑxÎGųbdS÷´ž Ç[pHý±ÿ†×„KsCPñ ü;Td†î^^–Õ0B¦ù.ÿšã’]|áÖñ´xP²Dqbbb‰Ž‰MÛÐ ˜TŠªIÁl6c±Xð÷/‚¯ÍÆ©³ç¸§ô=X­^™zk!·x•føCŸaJ`úê—IMÖùlÓ»4.Ó5ÔÔTN§ÓýÌ,]Ï7¿Ms$°å÷>QÏ Ÿš'LKAD×ÝîµÛí$'%Ѻ^ÏÔ ÀäKl\œûÿØ8âãã‰OH 11»ÝýH“ü¤©¼H¾*2¥=߯n·cµZÓW]q¶WÞÿÛý¢@Š=»ÝŽY5eˆóïÝN³Cp–5ªªR¤Hî Åétq(â0ö”TÊ•-ƒÃá"00Eq/SOMu˜”ŒÃ¥s1ê–¬Jߪԯ֞ää˨ª{3KUQ1™TTÕ„ª*˜L&L&S®êŠ»QO,jÞ€Ég’ðò+E—1‹™Ð-D þN˜CMÃápâr9q¹\8].\N5JYxñ‰ÒÄÇÅ£º[?ff“³ÙŒÙÃŒ‡Ùý^Ót,L&S®ÚÂÞöäkãâëëCâù ¬[ÿKŽžgóïŠLU J—,)]xwEQðöö¦b…òñ÷ãÈñãœч÷‹¬ìD‚èC}ÿ¹^Èá–ÿ‚ ‚ w›³å¿ ‚ …1.‚ ‚ ˆqAAã"‚ ‚AA„¼N¦åйy¼¶ ‚ ÂÂÐÌÆÅâiÁ0Œ;rB—Ë%¹.‚ B®ÐÓžàžn\bbb°§ÚÁÌA!ïát8´ è$;AAÈü?3æÊ¥+~ÿÎIEND®B`‚xnec2c-3.4/doc/nec2c.txt000066400000000000000000000170141257141547200150550ustar00rootroot00000000000000 README File for nec2c 1. INTRODUCTION: nec2c is a translation of the NEC2 FORTRAN source code to the C language. The translation was performed mostly "by hand" and a lot of modifications to the original program were introduced in order to modernize the NEC2 and to remove as many built-in limitations as possible. The attendant SOMNEC program was also translated to C and incorporated in nec2c as a function so that Sommerfeld ground solutions are a part of the program. 2. CHANGES: The following is a list of the more significant changes incorporated into nec2c during translation from FORTRAN to C: * All GO TO constructs have been removed (all 961 of them!) and "spaghetti" code sections untangled as far as was possible to the author. Still, a lot of the code is not as clean and straightforward as might have been. * Obsolete memory-saving practices (such as "equivalences" of different variables) have been eliminated and memory-sharing variables have been separated so that they are independent. * All fixed-size arrays used in calculations have been replaced with buffer pointers which are allocated memory dynamically according to the needs of the program and the complexity of each structure's geometry. There is a two-fold advantage in this - there is virtually no limit to the complexity of a structure (number of segments/patches etc), and there is no wasted memory in fixed arrays. Additionally, there is no need for data storage/swapping between memory and files and therefore functions relating to this activity and also the NGF form of solution have been removed from the program. * When a Sommerfeld finite ground solution is requested, since the SOMNEC program has been incorporated in nec2c there is no need to store the ground grid data in a file and read it when running nec2c. Instead, ground grid data are calculated as needed and for each new frequency if frequency stepping is specified. * The factr() and solve() functions have been modified to handle the main matrix (cm) in untransposed form so that calculations are faster. * The parser that reads the input file allows the two characters of the mnemonic to be in lower case if preferred. It also allows comments to be inserted anywhere in the input file in Unix style, e.g. all lines beginning with a '#' are ignored. * Operationally, nec2c differs from NEC2 in not being an interactive application. Instead, nec2c is a non-interactive command-line application which accepts an input file name and optionally an output file name. If this is not specified, a name for the output file is made by stripping any extensions from the input file name and adding a ".out" extension. Furthermore, nec2c has the potential of being incorporated in another application (like a GUI) after suitable modifications, allowing the creation of a stand-alone program without the need for reading files produced separately. * My original motive for translating NEC2 into C was to make it easier to modify and modernize and to change obsolete functions and usage. As a result I have edited to some extend the format of the output file to make it more "human readable" (e.g. provided a single space between adjacent numbers to avoid a hard-to-read "chain" of numbers joined by - signs) etc. In my humble opinion these changes make the output file easier to read and possibly somewhat more presentable, although this is likely to be a problem with applications that read the output file in a rigid manner, based on the exact output format. I apologize for this change if it causes such problems but my intention is to eventually modify nec2c to be used as part of a graphical application, providing results for graphical plots directly in its buffers. 3. COMPILATION: The nec2c package is very simple at this time and compilation basically only requires a Linux platform with development tools installed (gcc, make and optionally gdb and "valgrind" for debugging). To compile the source code just type "make nec2c" in the nec2c directory and if all is well an executable binary (nec2c) should be produced. If gdb is not installed, remove the -g option from the line in Makefile the reads: CC = gcc -Wall -O3 -g These changes can also be made if debugging is not of interest, thereby reducing the size of the binary and speeding it as well. If desired, nec2c can be installed (to /usr/local/bin) with "make install". There is a double precision FORTRAN source (nec2dx.f) in this package and this can be compiled and installed by typing "make nec2dx" in the nec2c directory. It can be run by typing nec2dx and supplying an input and output file name and it may be used to check nec2c's results for bugs etc. 4. USAGE: nec2c is run as a non-interactive command-line application and is invoked in the following manner: nec2c -i [-o][-hv] -h: print this usage information and exit. -v: print nec2c version number and exit. The -i option is always needed and it specifies the name of the input file. The -o switch is optional and it specifies the output file name. If not used, a name for the output file is made by stripping any extensions from the input file name and adding a ".out" extension, e.g. nec2c -i yagi.nec will cause nec2c to read yagi.nec as the input file and produce yagi.out as the output file. 5. BUGS!! Translating such a complex and large program from FORTRAN to C and making so many changes along the way is very prone to bugs in the new program. I have fixed a lot of these by using various input files that hopefully invoke most if not all of NEC2's functions but there must still be bugs in nec2c that will surface with some specific combinations of "cards" in some input file. The best way to check nec2c's results is to run nec2dx with the same input file and compare results - there should be very close agreement between them as nec2dx is also double-precision. 6. Version history: Version 0.1 beta: First release of the translated NEC2 Version 0.2: I used the "valgrind" (http://valgrind.kde.org) tool to check nec2c and found two significant bugs in intrp() and subph() which I (hopefully!) have fixed. I also fixed another bug that was found by Tim Molteno in the netwk() routine. If you intend to use valgrind (recommended!) to test nec2c for bugs (mainly memory allocation/access errors) then do not use performance enhancing C flags (e.g. do not use -Ox flags etc) otherwise you will get false error reports. Version 0.3: I have split nec2c.c into a number of smaller files to make it easier to work on during bug-fixing or development. Version 0.4: Fixed a bug in conect that caused segmentation faults when only one wire segment exists in the structure. this is a case that will probably never exist in practice but the seg fault had to be fixed. Version 0.5: Replaced the cmplx() function with a macro to speed up calculations. Changed the fbar() and zint() functions from complex long double to void type and returned the calculated values via a pointer in the argument list. This was done to work around a bug I could never trace, possibly due to gcc itself, were functions of the complex long double type produce a NAN result on return. 7. License: nec2c is Public Domain, same as the original FORTRAN source. Please keep any software you write incorporating nec2c in Public Domain or at least use an open license like GPL or BSD. 8. AUTHOR: Neoklis Kyriazis January 27 2004 xnec2c-3.4/doc/xnec2c.1.gz000066400000000000000000000006161257141547200152050ustar00rootroot00000000000000‹š’Sxnec2c.1MQKOÜ0¾ûWŒr…MaÕB¨]"…݈¤¨á`¼“‘‘+ø÷ŒóP9XŠï9“7wð¼-6ë dçd÷Ñ ¬ÏÎÒ÷‡A±°Î/èò×£ƒÕš›½ÏX^ßÁöú±`3¨]‡ÛæÏ z)¸i:.‚<"Ñyi ØFÂ(P¿lwU]Ö,ÿ “k»²=½’fˆaÕI…+Ã5þj´ÝÓH¹)êÍSY5ånËò²bÿÚ•„ ߎ„vb¼¦?ïpe¢~£àd;8+Ð{ë<ƒú±ÍE/ÍŒí/ A‰!ôÒCôü€„ë¬Ó<¤àTðC†|\Àsû¥Ýìö›"guQÀõC½ËXÓ#tQ)Ø[5š0i“Ë·½æ$N÷À= ¶!5ÊBï&r•”åÄDJïŒ ¿ PSZ‚&¢ÃT{@§> èW*Iø´Ñ—O“ˆi¯ãDgÍE,¯*æ{Õi‘Ä.Ò$!Ø…<( ¸¤c_ ŸnyTxnec2c-3.4/doc/xnec2c.html000066400000000000000000001567121257141547200154030ustar00rootroot00000000000000 Xnec2c User Manual

Xnec2c is a GTK2-based Graphical version of nec2c, the C translation of NEC2

  1. Introduction
  2. Features
  3. Limitations
  4. Compilation and Installation
  5. Operation
  6. Input File Considerations
  7. Output File Considerations
  8. Version History
  9. Bugs and Inadequacies
  10. Acknowledgment
1. Introduction:

Xnec2c is a GTK2-based Graphical version of nec2c, my translation to the C language of NEC2, the FORTRAN Numerical Electromagnetics Code commonly used for antenna simulation and analysis. The original nec2c is a non-interactive command-line application that reads standard NEC2 input files and produces an output file with data requested by "commands" in the input file. In contrast xnec2c is a GUI interactive application that (in its current form) reads NEC2 input files but presents output data in graphical form, e.g. as wire frame drawings of the radiation pattern or near E/H field, graphs of maximum gain, input impedance, vswr etc against frequency and simple rendering of the antenna structure, including color code representation of currents or charge densities. These results are only calculated and drawn on user demand via menu items or buttons, e.g. xnec2c is interactive and does not execute NEC2 "commands" in batch style as the original does. Printing of results to an output file has been removed starting from version 1.0, since xnec2c works in a way that does not allow printing compatible with the NEC2 format. If printing to file is needed then it is better to use the original NEC2 program, to avoid bugs that may still be lurking in the C translation.

Xnec2c now has a built-in editor for NEC2 input files which can be used to edit geometry or command "card" data. This basic editor displays comment, geometry and command cards in tree views where individual rows, each representing a card, can have their cells edited directly for "raw" entry of data. More useful are pop-up "editor" windows that open when appropriate buttons are clicked or when a selected row is right-clicked with the mouse. These editors allow easier, more convenient entry and editing of individual rows, with no need for detailed knowledge of "card" formats. When editing is completed, the contents of the nec2 editor can be saved in a NEC2-compatible input file which can then be re-loaded by xnec2c for execution.

2. Features:
  • Interactive Operation:
    Xnec2c is interactive in its operation, e.g. when started it just shows its Main window in a "blank" state, indicating that no valid input data has been read in yet. The NEC2-type input file can be specified at start-up in the command line optionally with the -i option or it can be opened from the file selection dialog that appears via the File->Open menu of the Main window. Once a valid input file is opened, all the normal widgets in the Main window appear so as to allow proper operation. The NEC2 "commands" in the input file are read in but not executed, until a request is issued by the user via buttons or menus in the appropriate windows.

  • No Output File:
    Printing of results to an output file has been removed starting from version 1.0, since xnec2c works in a way that does not allow printing compatible with the NEC2 format. If printing to file is needed then it is better to use the original NEC2 program, to avoid bugs that may still be lurking in the C translation.

  • Windows:
    In its current form, xnec2c has three windows for the graphical display of output data: When started without an input file specified optionally by the -i <input-file> option, the Main window opens with most of the button and menu widgets hidden. When a valid input file is opened, all the hidden widgets are shown and the structure is drawn in the Main window's drawing area widget. From the View menu, the Radiation Pattern and Frequency Related data display windows can be opened, to draw either the Gain pattern or the Near E/H fields or Frequency-related Data like Input Impedance, VSWR, Max gain, F/B Ratio, Gain in the Viewer's direction etc. Both the Main window and the Radiation Pattern window have buttons to select fixed viewing angles of the structure or the radiation pattern, as well as spin buttons to input specific viewing angles.
  • Color Coding:
    Xnec2c uses color coding to visualize the Current or Charge distribution in the Structure's segments or patches as well as the Gain pattern or the Near E/H field pattern. Color coding is also used to clarify the Graphs of Frequency-related data. A color code strip is shown in the Main and Radiation Pattern windows.

  • On-demand Calculation:
    Since xnec2c collects data to be displayed in buffers directly from the functions that produce them, there is no need to produce and parse an output file and no need to re-run the program when certain input data (currently the frequency) is changed or when different output data (gain, near-fields, input impedance etc) is required. The frequency can be changed either from spin buttons in the Main and Radiation Pattern windows or by clicking on the Frequency Data window's graph drawing area. The frequency corresponding to the pointer position will then be used to re-calculate whatever data is on display.

  • Multi-threading operation on SMP machines:
    Since version 1.0, xnec2c can run multi-threaded (by forking) on SMP machines, when executing a frequency loop. Multi-threading is enabled by using the -j<n> option, where n is the number of processors in a SMP machine. xnec2c will spawn n child processes, to which it will delegate calculation of frequency-dependent data for each frequency step. Thus data related to n frequency steps will be calculated concurrently and passed on the the parent process by pipes, to be further processed for graphical display. Child processes are spawned before GTK is initialized and started so that only the parent process is tied to the GUI interface. Thus there are n+1 processes running when the -j option is used and execution is faster by slightly less than n times. Please note that its pointless and counter-productive to specify a value of n greater than the number of steps in the frequency loop.

    Built-in NEC2 input file editor:
    Xnec2c has a built-in editor for NEC2 input files. Data in NEC2 "cards" can be entered or edited either directly in the main editor window (tree view) or in more convenient dedicated editors for each type of card. Edited data can be saved to a NEC2 input file and reloaded for execution so that the edit-execute-display cycle is quicker and more convenient.

3. Limitations:

Since xnec2c is interactive, it cannot operate in the same way as NEC2 or nec2c. Specifically, commands that cause execution in NEC2/nec2c (XQ, RP etc), are only read in but not acted upon unless the user requests the display of relevant data. For example, if an RP command line is included in the input file, xnec2c reads the relevant data from that line but does not calculate/render the radiation pattern, until the user requests this by opening the Radiation Pattern window and clicking on the Gain button. In addition, the NX and WG/GF commands are not recognized since only one structure at a time can be input and evaluated, and the Numerical Green's function is not needed or implemented. Also, some options of certain commands (e.g. the surface wave option I1=1 of the RP command) are not implemented and they must not be used since they will disrupt or even crash xnec2c.

There are advantages deriving from the interactive operation: it is possible, for example, to specify both the NE and NH commands in combination with a multiple-frequency FR card, although only the relevant data of the last command will be used.

4. Compilation and Installation:
Please note that I use Void Linux AMD64 which is a "bleeding edge" type distribution, so there may be compilation and/or run time difficulties if you are using a relatively old distro. This is mostly true of the basic dependencies like GTK+ 2 and Glade-2, and there can also be sound card incompatibility problems at run time.

To compile the package, it may be preferable to first run the included "autogen.sh" script in the package's top directory, to produce a fresh build environment. Then the "configure" script can be run with optional parameters to override the default settings and compiler flags, e.g: ./configure --prefix=/usr CFLAGS="-g -O2" will override the default /usr/local installation prefix and the "-Wall -O2" compiler flags.

Running "make" in the package's top directory should produce the executable binary in src/. Running "make install" will install the binary into /usr/local/bin by default or under the specified prefix. It will also install the default configuration file into the user's home directory. This will have to be edited by the user as required. There is also this hypertext documentation file which you can copy to a location of your choice.

No configuration files are needed and the sample input files that were used during development are in the xnec2c/examples directory. Please also read the xnec2c/doc/nec2c.txt file that describes the nec2c application that is used as the basis for xnec2c.

5. Operation:

Command Line Options:
Xnec2c has the following command line options:

-i <input-file-name>: Specify a NEC2 input file to be opened at start-up. If the -i option is omitted, xnec2c will take the last argument to be the input file path name, but will only open it if it has the .nec extension.

-j <number of child processes to spawn>: Since version 1.0 xnec2c can run multi-threaded on SMP machines. This option specifies the number of child processes to spawn by forking, so that the total number of processes running will be n+1. n should be equal to the number of processors in a SMP machine. Please note that its pointless and counter-productive to specify a value of n greater than the number of steps in the frequency loop.

-h: Print usage information and exit.

-v: Print version information and exit.

The Main Window:
Main Window When starting xnec2c from a terminal or from a file manager (by OLE), the -i option can be used to specify a NEC2 input file: xnec2c -i ~/nec2/turnstile.nec. Otherwise an input file can be opened from the Main window's File->Open menu item. If the input file is valid, xnec2c will render the structure specified in the Geometry section of the file in the Main window's drawing area. The background color is black and the structure is rendered in blue. The excitation points (segments) are rendered in red, the x, y, z axis in white, loaded segments in yellow, transmission lines in cyan and two-port networks in magenta. These colors are hard-coded in the source code and at this stage of development there is no option to change them.

Once an input file is opened, the structure display can be rotated around the Z axis and tilted about a horizontal axis through the origin. This can be done either by pressing button 1 and dragging the structure with the mouse pointer, clicking the X, Y, Z or the right-arrow Default view button (45 deg rotation and tilt). The actual value of rotation and tilt is shown in two spin button widgets which can also be used to change the viewing angle.

Starting with version 2.1, the structure display can be zoomed in or out by using the mouse wheel or the Zoom controls (Zoom % spin wheel and the +/-/1 buttons) and it can also be moved around by dragging with the right mouse button 2.

The current distribution or charge density in the structure can be displayed by clicking the Cur or Chg toggle buttons at the top right of the Main window. The distribution of current or charges is rendered by a color code, red for the maximum value and magenta for zero. The Frequency Loop control buttons can be used to Start, Pause or Reset the loop. There is a Color Code bar at the left of the second row of widgets in the Main window, indicating the color coding and the maximum value of the displayed quantity (at its right).

The title in the border of the drawing area widget shows the user-selected function of the display, while the text entry widget at the right of the color code bar shows antenna gain in the Viewer direction, e.g. perpendicular to the Screen. To the right of this the Frequency Spin Button shows the current frequency in MHz for which the current/charge distribution and Viewer gain are calculated and displayed. If the Redo Check box is active, each time the frequency is changed in the spin button, all relevant data on display will be recalculated. If not, clicking the Redo button will initiate recalculation.

Printing of results to an output file has been removed starting from version 1.0, since xnec2c works in a way that does not allow printing compatible with the NEC2 format. If printing to file is needed then it is better to use the original NEC2 program, to avoid bugs that may still be lurking in the C translation. Otherwise, it is possible to save the structure drawing to a PNG file by using the Save or Save As items in the File menu.

Starting with version 2.1, xnec2c can save the structure display as a data file for the "gnuplot" plotting program. This is done by using the File->Save As gnuplot menu item, to open a file chooser dialog. If only the stem of the file name is given, xnec2c will automatically add the .gplot extension. Plotting in gnuplot is done with the "splot <filename> with lines" command, although the plot can be enhanced with some of the style etc commands available in gnuplot.

The View menu allows opening of other output data display windows and selection of various options:

The Radiation Pattern menu item opens the Radiation Pattern window so that the Gain pattern or the Near E/H fields can be calculated and displayed.
The Frequency Data item opens the Frequency Data Plots window which allows the plotting of various frequency-related data against the frequency range specified in the FR command. It also allows quick selection of the current frequency and recalculation of data by clicking on the plots drawing area.
The Polarization sub menu allows the selection of different polarizations for which many data items are calculated (e.g. gain, F/B ratio etc). The selection is global, e.g. it effects all relevant data that are drawn or displayed in other windows.
The Common Projection item couples the projection (viewing angle) parameters of the Structure display in the Main window and the Gain or E/H field display in the Radiation pattern window so that both move in step. Similarly, the Common Frequency menu item couples the Frequency entry/display spin buttons in the same windows so that displayed data are for the same frequency.

The Radiation Pattern window:
Radiation Pattern On the top row of widgets, this window has the same Viewer angle selection buttons and spin button displays as the Main window. The two buttons at the middle right (Gain and E/H) select either the Gain or the Near Electric/Magnetic Field pattern display. Provided there are at least two steps in the theta and one in the phi angle as specified in the Radiation Pattern (RP) command, the Gain pattern will be calculated and drawn. The E/H field will be properly drawn if there are at least two points specified in the NE or NH commands. The Frequency Loop control buttons at the far right can be used to Start, Pause and Reset the loop.

The View menu, in addition to the Common Projection and Common Frequency check buttons, provides sub-menus for selecting Polarization type, Gain Scaling and the Near Field data to be drawn. The selection of polarization type affects the Gain pattern, the displayed Viewer gain and the value of max and min gain as shown to the left and right of the color code bar. The selection of gain scaling only affects the form of the Gain pattern drawing: Linear Power is the most realistic, since the distance from the origin of each point in the gain pattern is proportional to the radiated power density, as is the color code (red for max gain and magenta for min gain). A disadvantage of this scaling is the inadequate representation of side lobes since they are usually significantly weaker than the main beam. Linear Voltage is better in this respect since the position of points in the gain pattern is proportional to Electric field strength and hence follows a square root law. ARRL Style follows a form of logarithmic scaling suggested by the American Radio Relay League, e.g. exp(0.058267 * gain) where gain is in dB10. Finally Logarithmic follows a logarithmic scale with a median of 40dB.

When a Near Field (NE or NH) command is included in the input file, clicking the E/H button produces a drawing of the near Electric and/or Magnetic fields. By selecting the Near Field->Poynting Vector menu item the Poynting vector is also drawn. These fields are depicted by lines of fixed length in the direction of the relevant (E/H/Poynting) vector at each point in the drawing. The field strength is depicted by the color of the lines as using the line length for this purpose makes most lines too small to be useful. The drawing of the Near E or H Fields can be enabled or disabled by the Near Field->Near E Field and Near Field->Near H Field menu items.

The Near Field->Animate Dialog menu item opens a dialog box for setting the parameters and starting an Animation of the near field pattern. The Steps/Cycle spin button allows the setting of the number of angular steps around a cycle of the excitation input. The default is 36 and it results in angular steps of 10 degrees. The Animate Frequency spin button specifies a fictitious (slowed down) excitation frequency for which the animation is performed. The default is 1.0 Hz. Clicking the Apply button starts an animation of the near fields using the specified parameters. The OK button does like wise but it closes the animation dialog, while Cancel stops the animation.

The Total Field sub-menu allows the selection of drawing either the Peak value or a "time-frozen" Snapshot of the instantaneous value of the total Near Field E/H vectors. The Snapshot values are calculated as the vector sum of the X, Y, Z components of the E/H field and the Peak values are calculated using the formula NEC4 uses to print the Peak field values.

The Overlay Structure menu item enables the drawing of the structure in the radiation pattern drawing area when the Near Field pattern is selected for drawing. This makes it easier to understand the scale and extend of the Near Field patterns around the structure. The color scheme for the structure becomes white when Overlay is enabled, unless it is overridden by either the Current or Charge distribution being enabled by the relevant buttons in the Main window.

In the second row of widgets, the Color Code bar shows either the max and min values of Gain in the radiation pattern or the maximum value of the field strength in the near E/H field pattern. (Of course only one value can be shown, the precedence being E field, H field or Poynting field strength, depending on which of these is enabled in the View->Near Field sub menu). The Text Entry widget at the right of the color bar shows gain in the direction of the viewer (perpendicular to screen), while the Frequency Spin button following it shows the current frequency in MHz for which data is displayed. It can also be used to enter a new frequency in the same manner as in the Main window. The Redo Check box enables re-calculation and display of data when the frequency value changes, while the button to its right causes same when clicked by the user, but only if a new frequency has been entered.

Currently the Gain pattern is drawn as a transparent wire frame, with each line segment colored according to the average value of gain associated with the two points it joins. The pattern can be "dragged" with the mouse pointer to rotate or tilt it and it can also be positioned using either the X, Y, Z or Default (right arrow) buttons. The Rotate and Incline spin buttons can also be used to accurately position the Gain pattern in the window. The label in the drawing area's frame gives information on what is on display and also the type of polarization or gain scaling.

Starting with version 2.1, the radiation pattern display can be zoomed in or out by using the mouse wheel or the Zoom controls (Zoom % spin wheel and the +/-/1 buttons) and it can also be moved around by dragging with the right mouse button 2.

Both the Gain and Near Field patterns can be saved as PNG image files by using the File->Save or File->Save As menu items. The Save option will save the drawings with a suitable default file name which includes a serial number, so that consecutive Saves do not overwrite files, but please note that when xnec2c is restarted the serial numbers are reset so that overwriting will occur if the same input file is opened.

Starting with version 2.1, xnec2c can save the radiation pattern and near E/H field display as a data file for the "gnuplot" plotting program. This is done by using the File->Save As gnuplot menu item, to open a file chooser dialog. If only the stem of the filename is given, xnec2c will automatically add the .gplot extension. Plotting in gnuplot is done with the "splot <filename> with lines" command, although the plot can be enhanced with some of the style etc commands available in gnuplot.


Frequency Data Plots window:
Frequency PlotsThe Frequency Data Plots window is the main display of frequency related data such as maximum gain, VSWR, input impedance etc. Most data can be plotted against frequency and some are displayed in text entry widgets. It is also a convenient way to quickly enter a new current frequency by clicking on the graph drawing area.

The following applies to all graphs plotted in this window: When a graph of two quantities against frequency is plotted (e.g real and imaginary parts of input impedance), then one quantity is plotted in magenta color and its scale is at the left vertical side of the bounding box. The second quantity is plotted in cyan color and its scale is at the right side while a short descriptive title is printed in yellow at the top horizontal side. The graph bounding box is in white and the scale grid lines are in light gray. When only a single quantity is plotted against frequency, it is plotted in magenta color and the scale is at the left side of the bounding box.

Once graph plotting is complete (e.g. the frequency loop is done), clicking on the graph drawing area with button 1 (left mouse button) will produce a vertical green line in the graph bounding box, marking the new current frequency and triggering a re-calculation of all frequency-related data. Also, displays and drawings in all open windows (assuming the Redo check boxes are ticked active) will be refreshed to present the new data. Clicking on the drawing area with button 3 (right button) sets the frequency to the nearest frequency loop step value, as marked by the little boxes or diamonds on the graphs. However, all the displayed frequency-related data are still recalculated and refreshed e.g. buffered values are not used. Clicking with button 2 (middle button) cancels the green frequency-marking line.

The top row of widgets in this window has at its right buttons to select data to be plotted against frequency. These are:
Max Gain: Maximum gain and front-to-back ratio at each frequency step.
Dir: The direction of maximum gain, e.g. the radiation angle relative to the xy plane (90-theta) and the phi angle as defined in NEC2.
Viewer: The gain in the viewer's direction, e.g. perpendicular to the screen.
VSWR @ Zo: The VSWR for the Zo value in the Impedance Spin button (default 50 Ohm).
Zr/Zi: The real and imaginary parts of the input impedance.
Zm/Zph: The scalar magnitude and phase of the input impedance.
The View->Net Gain menu item changes the second plotted quantity to the Net Gain of the array. This was added after a feature request for xnec2c.

The Frequency Loop control buttons at the top right can be use to Start, Pause or Reset the loop. As the loop progresses, more data will be presented in the graphs and in the text entry widgets above the graph drawing area. These widgets display the current frequency in MHz, the maximum gain in the radiation pattern for that frequency, the VSWR for the Zo value in the spin button above and the real and imaginary parts of the input impedance.

The File->Save and File->Save As menu items can be used to save the graphs in the drawing area as PNG image files, with a default file name or one of the user's choice respectively. The View->Polarization sub-menu can be used to select the wave polarization type for which data is calculated and presented. When Viewer gain plotting is enabled, the graph will be re-drawn when the structure projection is changed by the various means described earlier (dragging by mouse pointer, Rotate/Incline spin buttons etc).

Starting with version 2.1, xnec2c can save the frequency dependent functions as a data file for the "gnuplot" plotting program. This is done by using the File->Save As gnuplot menu item, to open a file chooser dialog. If only the stem of the filename is given, xnec2c will automatically add the .gplot extension. Plotting in gnuplot is done with the "plot <filename> with lines" command, although the plot can be enhanced with some of the style etc commands available in gnuplot.


NEC2 Input File Editor:
Nec2 Editor Xnec2c has a built-in NEC2 input file editor to make the edit/save/execute cycle easier and quicker. The main editor window opens from either the File->New or File->Edit menu items of the Main window. The File->New menu item opens the editor with some default rows ("cards") that amount to a free space vertical dipole which serves as a simple example. The File->Edit menu is used to edit a NEC2 input file that is already open in xnec2c.

The main NEC2 input file editor can be used to directly edit rows if desired and indeed this is the only method available for editing Comments. The editor though has several dedicated sub-editors for each of the type of card that is indicated in the Buttons above the Geometry and Commands Tree Views. The dedicated editor windows open when these buttons are clicked (to add a new row) or when a selected row is right-clicked by the user with the mouse.

Main Editor Description:
The Main NEC2 Editor window is divided into three Tree View areas, one for editing Comments, one for editing Geometry and one for Control Commands. Each tree view has editable rows divided into cells that correspond to NEC2 input file's card columns e.g. Card Name (CM) - Comment Text or Card Name (GW) - Wire Data (I1 I2 F1 F2 F3 F4 F5 F6 F7) etc. Each row can be edited by selecting it with a mouse click and then clicking on a cell. This requires detailed knowledge of the format of each of the NEC2 input file "cards" and so this method is only useful for editing comments.

The main editor is controlled by the top row of buttons: The Add button inserts a new blank row in whatever tree view has been selected by a mouse click. The Remove button deletes a row that was selected by a mouse click and the Clear button deletes all rows in a selected tree view and clears it. The Save As button opens a file selector dialog for saving the data in the Editor to a NEC2 input file. The Save button writes data in the Editor to an already open input file. The Apply check button, when checked, signals xnec2c to reload the edited input file for execution.

Note: In xnec2c versions earlier than version 2.0-beta, due to the complex file opening process followed by NEC2 (many data sanity checks and initializations etc), reloading the input file resulted in all open windows (radiation pattern, frequency plots) to be closed. This was always an awkward situation and slowed down work in the NEC2 input file editor. As of xnec2c version 2.0-beta, the user interface as well as a fair amount of code in xnec2c, have been modified so that as far as possible, when an edited NEC2 file is saved and reloaded, or another NEC2 file is opened, xnec2c will not close open Radiation Pattern or Frequency Plot windows and will not completely reset internally. This allows the user to edit a NEC2 file in the Editor window and, after saving, to be presented with the new calculations on the structure being modeled.

Finally the Revert button reloads the last saved state of the editor from the input file, to reduce the effort needed to recover from a big mistake like clearing a tree view accidentally!


Sample Dedicated Geometry Editor Description:
Wire EditorWire Geometry Editor: This is one of the dedicated "card" or row editors, for creating or editing wire geometry. It will appear when the "Wire" button in the "Edit Geometry Data" frame is clicked or when a selected Wire row is right-clicked with the mouse. In the former case, a blank "GW" row will be added to the Geometry tree view which can then be filled by entering wire geometry data in the Editor and clicking Apply or OK. (in the latter case the editor is closed). The "Tapered Wire" check button in the upper left corner opens an additional frame for entering wire taper data and adds a blank "GC" row to the tree view.

To make things easier, the Wire editor has spin buttons to specify Length Taper and Diameter Taper separately to hide the need for calculating the actual beginning and end diameters. Also the "Segs % lambda" spin button indicates the wire segment length as a percentage of smallest wavelength and can be use to set the needed number of segments for each wire to maintain a uniform relative segment length for all wires. Please note that this function will only work if the Frequency (FR) card is specified in the Commands tree view and all the data is saved to file and read by xnec2c, so that frequency data is valid in xnec2c's buffers. Please also note that all dedicated editors require wire diameter to be specified but then convert this to radius when entering to the Main editor and saving to file (NEC2 requires wire radius to be specified).

Three geometry Editors (wire, helix, arc) have a spin button to specify wire conductivity in Siemens/meter. When the spin button value is greater than zero, the Editor will enter an LD card in the Commands tree view to specify a type 5 (wire conductivity) loading. This will result in all segments with tag number equal to that in the Editor to be loaded with the specified resistivity. Please note that Deleting the GW row in the Geometry tree view will not remove the LD loading row in the Commands tree view.

All editors (except for the "GE" card) have the following buttons along the bottom of the window: "New" inserts a new blank row in the tree view after entering edited data into the current row. "Delete Card" removes the current row (card) and closes the editor window. "Apply" enters edited data into the current row. "OK" enters edited data into the current row and closes the editor window. Please note that the "GE" row is entered automatically by the first editor used, if the tree view is cleared, and there is no button for it in the Geometry frame. But there is a dedicated editor for it which opens with a right-click on the (selected) GE row and it should be used to specify the presence of Ground (GN command etc).


Sample Dedicated Control Editor:
Excitation EditorExcitation Command Editor: The Excitation Command Editor opens when the "Excitation" button in the "Edit Control Commands" frame is clicked or when a selected "EX" row is right-clicked with the mouse. The excitation type is selected by activating the appropriate radio button whereby some labels over the data input spin buttons will change to indicate their purpose. The print control check buttons specify additional data to be printed to the output file but please remember that xnec2c does not produce an output file. The buttons in the bottom row of the Command Editors function in the same way as the Wire editor described above.

6. Input File Considerations:
Since xnec2c is interactive, it will not initiate calculations without a prompt from the user. For this reason certain NEC2 commands that normally cause execution (e.g. RP, XQ etc) are read in but not acted upon. Any data in the lines of these commands are saved for use when the user requests output data calculation and display, via buttons and menu items in the GUI. Also, since xnec2c was designed to visualize output data graphically, certain types of output data requests are not supported (e.g. the surface wave pattern option (I1=1) of the RP command etc). An error message dialog will hopefully appear to inform the user of unsupported commands or options. Here is a list of commands or command options not supported by xnec2c:

GF: Read Numerical Green's Function: Relevant code has been removed in nec2c since this type of solution is obsolete.
WG: Write Numerical Green's Function: Relevant code has been removed in nec2c since this type of solution is obsolete.
NX: Next Structure Data: Relevant code has been removed since xnec2c cannot operate in batch mode.
PQ, PT, CP: These commands affect printed output and have no effect on data presented by xnec2c in graphical form. Since version 1.0 xnec2c does not print results to file.
SOMNEC: The separate SOMNEC code has been incorporated in nec2c and hence in xnec2c also.
EX: When Incident Wave or Elementary Current Source Excitation is specified, xnec2c can only calculate and render the re-radiated field, produced by the current induced onto the structure. Only the initial values of the theta and phi angles are used and no stepping of these angles is performed. Therefore it is better to specify only one step for theta and phi in the EX card.
RP: The surface wave option (I1=1) is not supported.

7. Output File Considerations:
Printing of results to an output file has been removed starting from version 1.0, since xnec2c works in a way that does not allow printing compatible with the NEC2 format. If printing to file is needed then it is better to use the original NEC2 program, to avoid bugs that may still be lurking in the C translation.

8. Version History:

Version 0.1: First version with ability to draw a color-coded wire frame Radiation Pattern (Near and Far Field), Graphs of various Frequency dependent data (Gain, VSWR, Impedance etc) and the Structure (Wires/Patches), including a color coded Current or Charge distribution.

Version 0.2: Incorporated some changes to the GUI (the Glade-generated design) since after upgrading to GTK+ 2.8.9, the geometry of the windows (the position and extend of buttons/entry widgets) changed a little. Also fixed some bugs in the GUI code to handle unusual sequences of user actions correctly.

Version 0.3: Added the ability to stop the frequency loop by clicking on the frequency display spin buttons and to restart it by toggling the "Gain" or "E/H" buttons in the Radiation Pattern window.

Version 0.4b: Added a NEC2 input file editor that makes the edit/save/reload/execute cycle easier and quicker.

Version 0.5b:Fixed a bug that caused segmentation faults when only one wire segment was present in the structure. This is not a case that will normally exist but the seg fault had to be fixed.

Version 0.6b: Fixed a bug inherited from NEC2: If no geometry cards are present (only a GE card) then there is division by zero in conect(). NEC2 seems to accept the lack of geometry cards, this is now an error condition in xnec2c. Reduced the max value specification of the Capacitance spin button in the Loading card editor, from 1.0e+12 to 1.0e+9 (pF) since the higher value is beyond the range of the "long" type in 32 bit systems. Modified the behavior of some card Editors to make them more user friendly.

Version 0.7b: Fixed a bug in the co-ordinate translation (Move) editor and edited the code in the GW card editor so that the wire diameter does not change when the New button is clicked.

Version 0.8b: Fixed a serious bug that caused segmentation faults and crashes in structures that have a wire in contact with a patch. The subph() routine divides this patch into 3 or 4 sub-patches so the total number of patches increases. There was no provision to reallocate and initialize buffers used in rendering patches in the structure display window. Other minor bugs were also fixed and the example NEC2 files were also checked and edited when needed.

Version 0.9b: Fixed a few bugs mainly in the NEC2 editor code and also changed the code of all individual Geometry and Command editors, so that edited data are set in the main NEC2 editor's tree views when another Geometry or Command card (tree view row) is selected for editing.

Implemented a work round around a serious bug which I could not trace, since it now seems to be outside my code: When the zint() or fbar() functions are called, they seem to corrupt xnec2c's memory allocation when they return. This corruption manifests itself as NAN values appearing in calculations so I modified these functions to return their computed value via a pointer in the argument list. I also changed the function declaration from complex long double to void as it seems this bug is related to functions of the former type declaration, returning a value.

Version 1.0b: In this version xnec2c has been re-worked extensively to make it multi-threading and to streamline its operation to some extend. Many bugs created by these changes, and others that already existed have been fixed, and the user interface has also changed somewhat. The example input files have also been checked and some mistakes in them have been corrected. This is now the first version 1.0 beta release for public testing.

Version 1.0b3: Added setlocale(LC_NUMERIC, "C"); to the main() function, so that in locales where commas are used in decimal numbers xnec2c can read data correctly (suggested by Joop Stakenborg). Some minor changes to the user interface were also made to allow the NEC2 editor window to fit in displays with shorter heights.

Version 1.0b4: After a bug report from Juha Vierinen I changed some "sprintf" commands to "snprintf" to avoid buffer overruns.

Version 1.0b5: Following on the above changes, I revised all similar situations in xnec2c's source and modified all "sprintf" commands to "snprintf" just in case, as I could not replicate the bug so could not test for other similar problems. I also fixed a bug in the "save" and "save as" handler, to avoid false attempts by xnec2c to save structure and radiation pattern/frequency plots pixmaps when a save of the NEC2 editor data failed for some reason.

Version 1.0: After several months with no bug reports or feature requests, I am sticking my neck out and releasing xnec2c as version 1.0. This version incorporates the last two feature request I received from users:
The "Cancel" button on card editors has been replaces with a "Delete Card" button, which deletes the selected "card" (row in the NEC2 editor window).
A "Net Gain" menu item has been added to the View menu of the Frequency Plots window to replace the second plotted quantity with the Net Gain of the antenna.

Version 1.1: I spoke too soon! A segfault bug has been reported that occurs when Maximum Admittance Matrix Asymmetry printing is requested in the EX card. Although this is not supported in xnec2c, it still produces a segmentation fault because the "ipnt" buffer is not allocated in the netwk() function in network.c

Version 1.2: Made the page size of spin buttons 0 to make setting of spin button values compatible with GTK 2.4

Version 1.3: After an inquiry about using incident field excitation, which was not implemented in previous versions, I removed the restrictions in excitation to allow plotting the re-radiated pattern from a structure excited by incident field or elementary current source. However, the calculations are carried out only for one set of angle-of-incidence angles, e.g. there is no stepping of the theta and phi angles. This would require much more complex changes to xnec2c and I am not currently able to do this.

Version 1.4: Applied a patch supplied by Tom Beierlein, DL1JBE, to fix crashing of xnec2c 1.3 on long input file names (> 80 characters).

Version 1.5: Changed the handling of command line arguments so that the input file name may be specified without the use of the -i option. In this case xnec2c will take the last argument to be the input file name, but only if it has the .nec extension.
Got rid of some variables that were set but not used, according to warnings given by gcc.
Applied a patch supplied by Rik van Riel to allow the calculation of front to back ratios when the antenna is modeled over ground.

Version 1.6: I received another bug report from Rik van Riel: The patch applied above did not help, as somehow the buggy code got duplicated below the bug fix, reproducing the same error in the calculation of front-to-back ratio! Hopefully fixed this time.

Version 2.0-beta: I received a bug report from David Binderman regarding an array bounds violation, which he found by compiling xnec2c with the -D_FORTIFY_SOURCE gcc flag. I fixed this bug and also tested xnec2c source code using cppcheck.
I decided it was about time I modify the xnec2c user interface so that it will, as far as possible, allow the user to save and re-open NEC2 files in the Editor window, without closing the Radiation Pattern and/or the Frequency Plots windows. This will significantly speed up work on editing NEC2 files and also make xnec2c usage less awkward. However, many bugs were introduced and fixed during this re-write of xnec2c, so users are advised to be watchful of possible bugs that got away and to report them for fixing.

Version 2.1-beta: I have introduced many changes in this version, so I am releasing it again as a public beta version for testing and bug reports:
After a bug report by David J. Singer, I changed all declarations of variables that are used in memory allocations, from int to size_t. This error was in the nec2c code from the beginning but apparently it only showed up when extremely large memory allocations are requested in nec2c and xnec2c.
I have replaced all the (deprecated) GDK drawing primitives with equivalent Cairo graphics equivalents (e.g. replaced gdk_draw_line() with cairo_line_to()) since Cairo provides for nicer anti-aliased drawing.
After a feature request by David J. Singer and friend Richard, I have added code to save data of the structure display, radiation patterns and frequency plots into file, in a format suitable for the "gnuplot" plotting program.

Version 2.1: Patched a problem in the graph plotting routines that caused xnec2c to crash with a division by zero fault. This can happen when e.g. a single-wire structure is specified and a plot of gain vs frequency is requested, for a polarization that is at 90 deg to the wire, e.g. requesting gain plot for horizontal polarization for a vertical wire. Since there is no radiation in the horizontal plane of a vertical wire, the values of gain given to the plotting routines are all the same so the vertical scale drawing routines crash xnec2c. Please note that although xnec2c will now not crash as above, the plots will be jumbled and meaningless.

Version 2.2-beta: I made extensive modifications to the source code to silence a large number of warnings generated by the LLVM clang compiler when used with the -Weverything option. These were mostly cases of implicit conversions between variable types, like int to char or uint to int etc. I have also updated the basic files of the GNU Autotools build system, to be compatible with the current version of these tools at the time of writing (February 2013).

Version 2.3-beta: Fixed a bug in the cell_edited_callback() function that caused segmentation fault crashes when a cell in the input file editor was edited directly by the user.

Version 2.4: I submitted xnec2c (and nec2c) for scanning to the Coverity source code audit website, which produced a list of no less than 57 issues to be fixed! Most of them were not bugs that affected calculations but possibly two, both in the Somnec code, one in function rom1() and one in gshank() likely could have caused errors in the relevant calculations. Unfortunately the Fortran source of Somnec (as well as that of the NEC2) is very difficult to read so I cannot say with certainty if this was so.

Version 2.5: After a bug report by Jean Collin, I made some changes to the input file parser code in input.c, to properly identify tabs in the input file.

Version 2.6: After a bug report by Lucjan SQ9VPA, I changed the case of the signal handler that deals with SIGCHLD so that it doesn't cause xnec2c to exit when the SIGCHLD signal does not originate from child processes created by xnec2c. It appears that in some Linux installations a SIGCHLD signal is sent to xnec2c even if it is not running forked, e.g. the -j option is not used in the command line.

Version 2.7: After a bug report by Tim, WJ5Q, I fixed a bug that was preventing the creation of an LD card of type 5 (LDTYP=5) when wire conductivity (S/m) was specified in the GW card (Wire) editor. The same bug was present in the GH (Helix) card editor and it was also fixed. I added code so that the wire conductivity for GW, GA and GH cards can be read from the relevant LD card and shown in the Conductivity (S/m) spin button.

After all these changes I checked the xnec2c source code using the Coverity Scan service and I fixed an out-of-bounds read error that was reported by the scanner, in the plot_freqdat.c file.

Version 2.8: Fixed a bug in the GN card editor function which caused xnec2c to save the GN card parameters in the .nec antenna description file without clearing the number of radials to zero. This resulted in the GN card editor window to open with confusing and incorrect defaults for the radial screen, when the Reflection Coefficient Approximation method was selected for specifying ground parameters.

Also fixed some bugs (missing variable initializations) in the Ground Parameters calculation functions which resulted in incorrect Radiation Pattern calculations. This would happen if a .nec file, with Perfect Ground (iperf = 1) specified in the GN card, was opened after a .nec file, with a Radial Ground Screen specified in the GN card, was processed.

Version 2.9: After a request by the Debian maintainer of xnec2c, I added a rudimentary man page he sent me and corrected some spelling errors (arbitrary to arbitrary).

Version 3.0: I have modified the NEC2 file parser so that it can read the file with both the '.' and ',' as decimal point characters. This is necessary to make xnec2c compatible with different locales. I also fixed a resource (memory) leak, reported by valgrind, in the xyz axes drawing routine.

Version 3.1: I have made several changes to the code that renders wire frame drawings and displays some data, like the projection parameters (azimuth and elevation of the structure and the radiation pattern) and gain values. This has resulted in a faster and smoother animation of these drawings and reduced workload on the processor during dragging of these images.
I have also reduced the default minimum size of xnec2c's windows, as I had reports that they would not fit in the displays of some laptops or monitors, with resolutions on the lower side.

Version 3.2: I made some changes to the Strlcat() function and its usage in the xnec2c code, to improve safe handling of string concatenation operations. Hopefully this has not broken the handling of various strings in xnec2c! ;-)

Version 3.3: I fixed a bug that was in the code that reads the commands from the NEC2 input file, where xnec2c would crash with a segmentation fault when the FR card was after the RP card. Also modified the Strtod() function to avoid freeing the end pointer before it was used, causing problems.

Version 3.4: I fixed a bug in the code that implements the modified GS (scaling) card. In NEC2 the GS card scales all of the structure, but in Xnec2c I modified the code so that it is possible to specify a range of tag numbers to apply scaling to only. When a GS card follows a GX card, selective scaling doesn't work correctly because a symmetric structure is created. If you are using a GS card, it may be better to avoid specifying a tag number range, just in case the bug fix is not complete.

9. Bugs and Inadequacies:
Xnec2c is based on nec2c, my translation to C of the original FORTRAN NEC2 code. Any bugs discovered in nec2c will affect xnec2c as well and they will have to be fixed. In addition, changing the flow logic of nec2c, from a non-interactive batch-processing command line tool to a GUI-based interactive application, was rather complex and introduced many bugs that were fixed, but it is always possible that a combination of some input file with an untested sequence of user actions may trigger a hidden bug. Such a case in fact did appear and it was traced to a bug in the original NEC2 code. This has been fixed by G. Burke and the fix has been incorporated in nec2c and xnec2c. See the NEC2-bug.txt file for details.

When xnec2c was made multi-threading, a lot of bugs appeared and were fixed but again there may be some that have not showed up. One condition that did appear a couple of times was xnec2c getting blocked in a select() call, waiting for a child to write to a pipe. This apparently happened because I was testing a very minimal input file and the child processes seemed to write to the pipes before the parent process dropped into select(). If this seems to happen, do not enable multi-threading (don't use the -j option) for very simple jobs.

A known inadequacy of xnec2c is the slowness of the animation of displayed drawings, e.g. the structure itself, the radiation pattern, near fields pattern etc. Specifically, dragging these drawings with the mouse to rotate or incline them seems very heavy on processor loading, and with most structures the movement is jerky. This is my first attempt at animated wire frame drawings and I lack experience with GTK2 in this field, so I probably went about this the wrong way. I am open to any suggestions that may solve this problem! -;)

10. Acknowledgment:
Some of the code in xnec2c is based on Pieter-Tjerk de Boer's "xnecview" application, which visualizes NEC2's input and output files. The general 'look and feel" of xnec2c was also influenced by the same application.

Author: Neoklis Kyriazis (Ham Radio call: 5B4AZ)

September 20 2005

xnec2c-3.4/examples/000077500000000000000000000000001257141547200143705ustar00rootroot00000000000000xnec2c-3.4/examples/10-20m_horizomni.nec000066400000000000000000000040741257141547200177760ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.3 --- CE --- End Comments --- GW 1 15 -1.27000E+00 -1.27000E+00 0.00000E+00 1.27000E+00 -1.27000E+00 0.00000E+00 1.50000E-03 GW 1 15 1.27000E+00 -1.27000E+00 0.00000E+00 1.27000E+00 1.27000E+00 0.00000E+00 1.50000E-03 GW 1 15 -1.27000E+00 -1.27000E+00 0.00000E+00 -1.27000E+00 1.27000E+00 0.00000E+00 1.50000E-03 GW 1 7 -5.00000E-02 1.27000E+00 0.00000E+00 -1.27000E+00 1.27000E+00 0.00000E+00 1.50000E-03 GW 1 7 5.00000E-02 1.27000E+00 0.00000E+00 1.27000E+00 1.27000E+00 0.00000E+00 1.50000E-03 GM 1 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 GS 2 2 8.05000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GS 3 3 6.90000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GS 4 4 5.95000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GS 5 5 5.30000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 5 8 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 161 0 0 1.40000E+01 1.00000E-01 3.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 TL 1 8 2 8 3.00000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 2 8 3 8 3.00000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 3 8 4 8 3.00000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 4 8 5 8 3.00000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/10-30m_MultiBand_Vertical.nec000066400000000000000000000031371257141547200214700ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.3 --- CM Multiband Vertical covering all bands from 10m-30m CM No traps are used and only one element (30m) is CM fed power. A vertical element for each band is needed CM close to the central driven element. A good ground CM plane system will be needed for good performance. CE --- End Comments --- GW 1 35 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 7.20000E+00 1.25000E-02 GW 2 25 4.00000E-01 0.00000E+00 0.00000E+00 4.00000E-01 0.00000E+00 5.00000E+00 6.00000E-03 GW 3 20 1.00000E-01 2.30000E-01 0.00000E+00 1.00000E-01 2.30000E-01 4.00000E+00 6.00000E-03 GW 4 17 -2.50000E-01 1.90000E-01 0.00000E+00 -2.50000E-01 1.90000E-01 3.40000E+00 6.00000E-03 GW 5 14 -2.60000E-01 -1.90000E-01 0.00000E+00 -2.60000E-01 -1.90000E-01 2.89000E+00 6.00000E-03 GW 6 12 9.00000E-02 -2.70000E-01 0.00000E+00 9.00000E-02 -2.70000E-01 2.55000E+00 6.00000E-03 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 93 0 0 7.00000E+00 2.50000E-01 3.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 GN 1 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/10-30m_Vertical.nec000066400000000000000000000033111257141547200175230ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.3 --- CM Multiband Vertical covering all bands from 10m-30m CM No traps are used and only one element (30m) is CM fed power. A vertical element for each band is needed CM close to the central driven element. A good ground CM plane system will be needed for good performance. CE --- End Comments --- GW 1 35 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 7.25000E+00 1.25000E-02 GW 2 25 2.50000E-01 0.00000E+00 0.00000E+00 2.50000E-01 0.00000E+00 5.05000E+00 6.00000E-03 GW 7 8 1.50000E-01 1.50000E-01 0.00000E+00 1.50000E-01 1.50000E-01 1.45000E+00 6.00000E-03 GW 3 20 7.70000E-02 2.38000E-01 0.00000E+00 7.70000E-02 2.38000E-01 4.02000E+00 6.00000E-03 GW 4 17 -2.02000E-01 1.47000E-01 0.00000E+00 -2.02000E-01 1.47000E-01 3.43000E+00 6.00000E-03 GW 5 14 -2.02000E-01 -1.47000E-01 0.00000E+00 -2.02000E-01 -1.47000E-01 2.92000E+00 6.00000E-03 GW 6 12 7.70000E-02 -2.48000E-01 0.00000E+00 7.70000E-02 -2.48000E-01 2.58000E+00 6.00000E-03 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 121 0 0 2.80000E+01 2.00000E-01 5.20000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 GN 1 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/10-30m_bipyramid.nec000066400000000000000000000032661257141547200177430ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Skeleton bi-pyramid antenna for 10-30 MHz CE --- End Comments --- GW 1 18 2.40000E+00 0.00000E+00 2.90000E+00 0.00000E+00 0.00000E+00 2.00000E-01 3.00000E-03 GW 2 18 2.40000E+00 0.00000E+00 2.90000E+00 0.00000E+00 0.00000E+00 5.60000E+00 3.00000E-03 GW 3 12 2.40000E+00 0.00000E+00 2.90000E+00 0.00000E+00 0.00000E+00 2.90000E+00 7.50000E-03 GR 0 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 5 12 0.00000E+00 0.00000E+00 2.90000E+00 0.00000E+00 0.00000E+00 2.00000E-01 1.50000E-02 GW 6 12 0.00000E+00 0.00000E+00 2.90000E+00 0.00000E+00 0.00000E+00 5.60000E+00 1.50000E-02 GW 7 1 0.00000E+00 0.00000E+00 2.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 1.50000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 7 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 41 0 0 1.00000E+01 5.00000E-01 3.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 10 1 10 -4.50000E+00 0.00000E+00 5.00000E-01 1.00000E+00 0.00000E+00 1.00000E+00 RP 4 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 GN 0 32 0 0 1.20000E+01 1.00000E-02 7.50000E+00 4.00000E-03 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/10-30m_inv_cone.nec000066400000000000000000000025701257141547200175600ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Skeleton bi-pyramid antenna for 14-52 MHz CE --- End Comments --- GW 1 25 0.00000E+00 0.00000E+00 1.90400E-01 1.80200E+00 0.00000E+00 5.10000E+00 1.00000E-03 GW 2 9 9.01000E-01 1.56060E+00 5.10000E+00 1.80200E+00 0.00000E+00 5.10000E+00 1.00000E-03 GW 3 9 0.00000E+00 0.00000E+00 5.10000E+00 1.80200E+00 0.00000E+00 5.10000E+00 3.00000E-03 GR 0 6 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 4 1 0.00000E+00 0.00000E+00 1.90400E-01 0.00000E+00 0.00000E+00 0.00000E+00 1.25000E-02 GW 5 25 0.00000E+00 0.00000E+00 1.90400E-01 0.00000E+00 0.00000E+00 5.10000E+00 1.25000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 4 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 41 0 0 1.00000E+01 5.00000E-01 3.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 4 19 37 0 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 GN 1 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/10-30m_sphere.nec000066400000000000000000000032001257141547200172350ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Skeleton spherical broadband vertical for 10-30 MHz CM Average ground with radial wire screen CE --- End Comments --- GA 1 38 2.50000E+00 -9.00000E+01 9.00000E+01 7.50000E-03 0.00000E+00 0.00000E+00 0.00000E+00 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 2.70000E+00 1.00000E+00 GW 2 12 0.00000E+00 0.00000E+00 2.70000E+00 2.50000E+00 0.00000E+00 2.70000E+00 1.25000E-02 GR 0 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 3 24 0.00000E+00 0.00000E+00 2.00000E-01 0.00000E+00 0.00000E+00 5.20000E+00 1.25000E-02 GW 4 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 2.00000E-01 1.25000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 4 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 41 0 0 1.00000E+01 5.00000E-01 3.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 GN 0 32 0 0 1.20000E+01 5.00000E-03 7.00000E+00 3.00000E-03 0.00000E+00 0.00000E+00 NE 0 1 1 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 20 1 15 -4.75000E+00 0.00000E+00 2.50000E-01 5.00000E-01 0.00000E+00 5.00000E-01 RP 4 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/10-30m_vert.nec000066400000000000000000000035261257141547200167420ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Skeleton Cage broad-band vertical 10-30 MHz CM Average ground with radial wire screen and cliff CE --- End Comments --- GW 1 5 1.20000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 7.50000E-03 GM 0 2 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 2.40000E+00 0.00000E+00 GW 2 20 1.20000E+00 0.00000E+00 0.00000E+00 1.20000E+00 0.00000E+00 4.80000E+00 3.00000E-03 GR 0 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 3 20 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 4.80000E+00 1.25000E-02 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 5.00000E-01 0.00000E+00 GW 4 2 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 5.00000E-01 1.25000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 4 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.00000E+01 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 0 32 0 0 1.30000E+01 5.00000E-03 7.00000E+00 3.00000E-03 0.00000E+00 0.00000E+00 GD 0 0 0 0 1.20000E+01 5.00000E-03 1.00000E+01 4.00000E+00 0.00000E+00 0.00000E+00 NE 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 1 20 15 0.00000E+00 -4.75000E+00 5.00000E-01 0.00000E+00 5.00000E-01 5.00000E-01 RP 6 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/10-80m_G5RV.nec000066400000000000000000000020551257141547200165060ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM G5RV antenna for 10 - 80m CE --- End Comments --- GW 1 61 1.55500E+01 0.00000E+00 9.65000E+00 -1.55500E+01 0.00000E+00 9.65000E+00 2.00000E-03 GW 2 1 2.00000E-01 0.00000E+00 2.00000E-01 -2.00000E-01 0.00000E+00 2.00000E-01 1.50000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 55 0 0 3.00000E+00 5.00000E-01 3.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 37 74 1000 0.00000E+00 0.00000E+00 2.50000E+00 5.00000E+00 0.00000E+00 0.00000E+00 TL 1 31 2 1 4.50000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 2 0 0 0 1.20000E+01 1.00000E-02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/10-80m_Inverted-L.nec000066400000000000000000000017061257141547200177360ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Inverted L antenna for 10 - 80m CE --- End Comments --- GW 1 21 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 9.00000E+00 2.00000E-03 GW 2 62 0.00000E+00 0.00000E+00 9.00000E+00 2.50000E+01 0.00000E+00 9.00000E+00 2.00000E-03 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 55 0 0 3.00000E+00 5.00000E-01 3.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 GN 0 4 0 0 1.20000E+01 5.00000E-03 8.00000E+00 5.00000E-03 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/10-80m_windom.nec000066400000000000000000000020201257141547200172500ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CE --- End Comments --- GW 1 60 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.20000E+01 1.25000E-03 GW 2 65 0.00000E+00 0.00000E+00 1.20000E+01 -1.45000E+01 0.00000E+00 1.20000E+01 1.25000E-03 GW 3 130 0.00000E+00 0.00000E+00 1.20000E+01 2.70000E+01 0.00000E+00 1.20000E+01 1.25000E-03 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 55 0 0 3.00000E+00 5.00000E-01 3.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 GN 0 16 0 0 1.20000E+01 1.00000E-02 1.00000E+01 5.00000E-03 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/137MHz_turnstile-sloped.nec000066400000000000000000000032711257141547200214100ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM R.H. cicular polarized turnstile for 137 MHz CE --- End Comments --- GW 1 24 0.00000E+00 -4.90000E-01 1.00000E-01 0.00000E+00 4.90000E-01 1.00000E-01 6.00000E-03 GW 2 24 -4.85000E-01 0.00000E+00 1.00000E-01 4.85000E-01 0.00000E+00 1.00000E-01 6.00000E-03 GW 3 12 0.00000E+00 1.00000E-02 5.00000E-01 3.30000E-01 1.00000E-02 1.63000E-01 6.00000E-03 GW 4 12 0.00000E+00 -1.00000E-02 5.00000E-01 -3.30000E-01 -1.00000E-02 1.63000E-01 6.00000E-03 GW 5 12 0.00000E+00 -3.57000E-01 1.57000E-01 0.00000E+00 -1.00000E-02 5.00000E-01 6.00000E-03 GW 6 12 0.00000E+00 1.00000E-02 5.00000E-01 0.00000E+00 3.57000E-01 1.57000E-01 6.00000E-03 GW 7 1 0.00000E+00 1.00000E-02 5.00000E-01 0.00000E+00 -1.00000E-02 5.00000E-01 1.25000E-02 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 7 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 11 0 0 1.36000E+02 2.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 5 0 0 0 3.70000E+07 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 16 1 16 -7.50000E-01 0.00000E+00 -4.50000E-01 1.00000E-01 0.00000E+00 1.00000E-01 RP 0 19 37 1000 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/137MHz_turnstile.nec000066400000000000000000000031331257141547200201210ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Turnstile antenna RH elliptical polarization for 137 MHz CE --- End Comments --- GW 1 24 0.00000E+00 5.20000E-01 1.05450E-01 0.00000E+00 -5.20000E-01 1.05450E-01 6.00000E-03 GW 2 24 -5.20000E-01 0.00000E+00 1.05450E-01 5.20000E-01 0.00000E+00 1.05450E-01 6.00000E-03 GW 3 12 -5.15000E-01 1.00000E-02 4.21000E-01 0.00000E+00 1.00000E-02 4.21000E-01 6.00000E-03 GW 4 12 0.00000E+00 -1.00000E-02 4.21000E-01 5.15000E-01 -1.00000E-02 4.21000E-01 6.00000E-03 GW 5 11 0.00000E+00 -4.76000E-01 4.21000E-01 0.00000E+00 -1.00000E-02 4.21000E-01 6.00000E-03 GW 6 11 0.00000E+00 1.00000E-02 4.21000E-01 0.00000E+00 4.76000E-01 4.21000E-01 6.00000E-03 GW 7 1 0.00000E+00 1.00000E-02 4.21000E-01 0.00000E+00 -1.00000E-02 4.21000E-01 6.00000E-03 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 7 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 11 0 0 1.37000E+02 1.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 16 1 16 -1.50000E+00 0.00000E+00 -9.00000E-01 2.00000E-01 0.00000E+00 2.00000E-01 RP 0 19 37 1000 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/13cm_Yagi.nec000066400000000000000000000035711257141547200166010ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Yagi antenna for 2.4 GHz CE --- End Comments --- GW 1 23 0.00000E+00 0.00000E+00 -2.62500E-02 0.00000E+00 0.00000E+00 2.62500E-02 1.50000E-03 GW 2 23 -1.30000E-02 0.00000E+00 -2.87500E-02 -1.30000E-02 0.00000E+00 2.87500E-02 1.50000E-03 GW 3 21 1.20000E-02 0.00000E+00 -2.48000E-02 1.20000E-02 0.00000E+00 2.48000E-02 1.50000E-03 GW 4 20 3.18000E-02 0.00000E+00 -2.44000E-02 3.18000E-02 0.00000E+00 2.44000E-02 1.50000E-03 GW 5 20 5.93000E-02 0.00000E+00 -2.39000E-02 5.93000E-02 0.00000E+00 2.39000E-02 1.50000E-03 GW 6 20 8.93000E-02 0.00000E+00 -2.35000E-02 8.93000E-02 0.00000E+00 2.35000E-02 1.50000E-03 GW 7 20 1.24000E-01 0.00000E+00 -2.32500E-02 1.24000E-01 0.00000E+00 2.32500E-02 1.50000E-03 GW 8 20 1.61000E-01 0.00000E+00 -2.31000E-02 1.61000E-01 0.00000E+00 2.31000E-02 1.50000E-03 GW 9 20 2.00000E-01 0.00000E+00 -2.28500E-02 2.00000E-01 0.00000E+00 2.28500E-02 1.50000E-03 GW 10 20 2.40000E-01 0.00000E+00 -2.28500E-02 2.40000E-01 0.00000E+00 2.28500E-02 1.50000E-03 GW 11 20 2.80000E-01 0.00000E+00 -2.28500E-02 2.80000E-01 0.00000E+00 2.28500E-02 1.50000E-03 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 -1.35000E-01 0.00000E+00 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 12 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 41 0 0 2.00000E+03 2.00000E+01 2.80000E+03 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 0 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/13cm_corner_reflector.nec000066400000000000000000000024011257141547200212340ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Corner reflector for 2.4 GHz CE --- End Comments --- GW 1 13 1.00000E-02 0.00000E+00 2.25000E-02 1.00000E-02 0.00000E+00 -2.25000E-02 1.50000E-03 GM 0 12 0.00000E+00 0.00000E+00 0.00000E+00 2.00000E-02 0.00000E+00 0.00000E+00 1.00000E+00 GW 2 13 0.00000E+00 1.00000E-02 2.25000E-02 0.00000E+00 1.00000E-02 -2.25000E-02 1.50000E-03 GM 0 12 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 2.00000E-02 0.00000E+00 2.00000E+00 GW 3 15 6.00000E-02 6.00000E-02 3.00000E-02 6.00000E-02 6.00000E-02 -3.00000E-02 1.50000E-03 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E-01 -1.00000E-01 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 3 8 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 2.00000E+03 5.00000E+01 3.00000E+03 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 0 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/13cm_helix+screen.nec000066400000000000000000000032651257141547200202740ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Helix and screen reflector for 2400 MHz CE --- End Comments --- GH 1 507 3.34700E-02 5.30000E-01 2.15900E-02 2.15900E-02 2.15900E-02 2.15900E-02 1.50000E-03 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.50600E-02 0.00000E+00 GW 2 7 0.00000E+00 0.00000E+00 0.00000E+00 2.15800E-02 0.00000E+00 1.50600E-02 1.50000E-03 GW 3 10 4.00000E-02 5.00000E-02 0.00000E+00 4.00000E-02 -5.00000E-02 0.00000E+00 1.50000E-03 GM 0 8 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E-02 0.00000E+00 0.00000E+00 3.00000E+00 GW 4 10 5.00000E-02 4.00000E-02 0.00000E+00 -5.00000E-02 4.00000E-02 0.00000E+00 1.50000E-03 GM 0 8 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E-02 0.00000E+00 4.00000E+00 GM 0 0 9.00000E+01 0.00000E+00 9.00000E+01 -2.51000E-01 0.00000E+00 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 31 0 0 2.30000E+03 1.00000E+01 2.60000E+03 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 1 20 1 17 7.50000E-02 0.00000E+00 -8.00000E+01 7.50000E-02 0.00000E+00 1.00000E+01 RP 0 37 73 1000 0.00000E+00 0.00000E+00 5.00000E+00 5.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/15m_delta-loop.nec000066400000000000000000000027451257141547200176110ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM 3 Element Delta Loop beam for 15m CM NOTE: This input file uses the modified GS command available CM in xnec2c, where scaling is specified for a range of tag CM numbers. It is NOT compatible with the standard NEC2 or its CM translation to C, nec2c. BEWARE! CE --- End Comments --- GW 1 17 0.00000E+00 2.49360E+00 1.43968E+00 0.00000E+00 -2.49360E+00 1.43968E+00 1.00000E-02 GW 2 17 -3.00000E+00 2.49360E+00 1.43968E+00 -3.00000E+00 -2.49360E+00 1.43968E+00 1.00000E-02 GS 2 2 1.03000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 3 17 2.50000E+00 2.49360E+00 1.43968E+00 2.50000E+00 -2.49360E+00 1.43968E+00 1.00000E-02 GS 3 3 9.80000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GM 0 2 1.20000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 9 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 2.00000E+01 1.00000E-01 2.20000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/1MHz_3x_helicone.nec000066400000000000000000000033541257141547200201230ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Top-loaded helical vertical for 1.0 MHz, over perfect ground. CM Three helices are used in parallel to raise the input impedance CM to near 50 Ohms. The top hat is conical to add to radiation. CE --- End Comments --- GW 1 20 0.00000E+00 0.00000E+00 1.35000E+01 1.07000E+01 0.00000E+00 1.90000E+01 3.00000E-02 GW 1 7 1.07000E+01 0.00000E+00 1.90000E+01 9.88550E+00 4.09470E+00 1.90000E+01 3.00000E-02 GR 0 16 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GH 2 120 1.30000E+00 1.30000E+01 1.20000E+00 1.20000E+00 1.20000E+00 1.20000E+00 3.00000E-02 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 -3.00000E+00 0.00000E+00 0.00000E+00 2.00000E+00 GW 3 3 -1.80000E+00 0.00000E+00 1.30000E+01 0.00000E+00 0.00000E+00 1.30000E+01 3.00000E-02 GM 0 2 0.00000E+00 0.00000E+00 1.20000E+02 0.00000E+00 0.00000E+00 0.00000E+00 2.00000E+00 GW 4 1 0.00000E+00 0.00000E+00 1.30000E+01 0.00000E+00 0.00000E+00 1.35000E+01 5.00000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 1 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 FR 0 41 0 0 9.00000E-01 5.00000E-03 1.10000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/1MHz_3x_helisphere.nec000066400000000000000000000033561257141547200204670ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Top-loaded helical vertical for 1.0 MHz, over perfect ground. CM Three helices are used in parallel to raise the input impedance CM to near 50 Ohms. The top hat is spherical to add to radiation. CE --- End Comments --- GA 1 32 7.00000E+00 -9.00000E+01 9.00000E+01 3.00000E-02 2.52150E-01 0.00000E+00 0.00000E+00 GR 0 16 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.78000E+01 1.00000E+00 GH 2 120 1.03000E+00 1.03000E+01 1.15000E+00 1.15000E+00 1.15000E+00 1.15000E+00 3.00000E-02 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 -3.00000E+00 0.00000E+00 0.00000E+00 2.00000E+00 GW 3 3 -1.85000E+00 0.00000E+00 1.03000E+01 0.00000E+00 0.00000E+00 1.03000E+01 3.00000E-02 GM 0 2 0.00000E+00 0.00000E+00 1.20000E+02 0.00000E+00 0.00000E+00 0.00000E+00 2.00000E+00 GW 4 1 0.00000E+00 0.00000E+00 1.03000E+01 0.00000E+00 0.00000E+00 1.08000E+01 5.00000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 1 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 FR 0 41 0 0 9.00000E-01 5.00000E-03 1.10000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/1MHz_4x_helisphere.nec000066400000000000000000000032131257141547200204600ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Top-loaded helical vertical for 1.0 MHz, over perfect ground. Four CM co-axial helices are used in parallel to raise the input impedance CM to near 50 Ohms. The top hat is spherical to add to radiation. CE --- End Comments --- GA 1 20 5.00000E+00 -9.00000E+01 9.00000E+01 3.00000E-02 2.88171E-01 0.00000E+00 0.00000E+00 GR 0 16 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.37000E+01 1.00000E+00 GH 2 80 1.02500E+00 8.20000E+00 1.16500E+00 1.16500E+00 1.16500E+00 1.16500E+00 3.00000E-02 GW 3 2 0.00000E+00 0.00000E+00 8.20000E+00 1.16500E+00 0.00000E+00 8.20000E+00 3.00000E-02 GM 0 3 0.00000E+00 0.00000E+00 9.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 2.00000E+00 GW 4 1 0.00000E+00 0.00000E+00 8.20000E+00 0.00000E+00 0.00000E+00 8.70000E+00 5.00000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 9.80000E-01 2.00000E-03 1.02000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 4 4 0 0.00000E+00 0.00000E+00 5.00000E+00 5.00000E+00 0.00000E+00 0.00000E+00 GN 1 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/1MHz_helivert.nec000066400000000000000000000033221257141547200175400ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Top-loaded helical vertical for 1.0 MHz, over perfect ground. CM The input impedance is such that a 16:1 quadrifilar toroid CM transformer should raise it to 50 Ohms. CE --- End Comments --- GW 1 3 0.00000E+00 0.00000E+00 1.32000E+01 5.99500E+00 0.00000E+00 1.32000E+01 3.00000E-02 GW 1 1 5.99500E+00 0.00000E+00 1.32000E+01 5.53800E+00 2.29100E+00 1.32000E+01 3.00000E-02 GR 0 16 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 1 1 1.00000E+00 0.00000E+00 1.30000E+01 0.00000E+00 0.00000E+00 1.32000E+01 3.00000E-02 GH 2 80 1.30000E+00 1.30000E+01 1.00000E+00 1.00000E+00 1.00000E+00 1.00000E+00 3.00000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 1 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 9.80000E-01 2.00000E-03 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 5 0 0 0 3.70000E+07 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 1 20 15 0.00000E+00 -1.42500E+01 1.50000E+00 0.00000E+00 1.50000E+00 1.50000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/1MHz_tower.nec000066400000000000000000000060421257141547200170600ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Top-loaded tower for 1.0 MHz, over perfect ground. CM Each leg is loaded by an inductance to ground. CM Tower is fed at one of the loaded legs. CE --- End Comments --- GW 1 1 1.24900E+00 0.00000E+00 1.24900E+00 0.00000E+00 1.24900E+00 1.24900E+00 5.00000E-02 GW 1 1 1.24900E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.24900E+00 1.24900E+00 5.00000E-02 GM 0 8 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.24900E+00 0.00000E+00 GW 1 6 1.24900E+00 0.00000E+00 0.00000E+00 1.24900E+00 0.00000E+00 1.12400E+01 5.00000E-02 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.24900E+00 0.00000E+00 GW 2 4 8.92500E+00 -1.83600E+00 1.24900E+01 1.24900E+00 0.00000E+00 1.24900E+01 5.00000E-02 GW 2 4 8.92500E+00 1.83600E+00 1.24900E+01 1.24900E+00 0.00000E+00 1.24900E+01 5.00000E-02 GW 2 4 7.39500E+00 -4.95300E+00 1.24900E+01 1.24900E+00 0.00000E+00 1.24900E+01 5.00000E-02 GW 2 4 7.39500E+00 4.95300E+00 1.24900E+01 1.24900E+00 0.00000E+00 1.24900E+01 5.00000E-02 GW 2 1 1.24900E+00 0.00000E+00 1.24900E+00 0.00000E+00 1.24900E+00 1.24900E+00 5.00000E-02 GW 3 1 1.24900E+00 0.00000E+00 0.00000E+00 1.24900E+00 0.00000E+00 1.24900E+00 5.00000E-02 GS 0 0 1.25000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GR 3 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 1 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EK 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 3 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 5 0 0 0 3.70000E+07 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 0 3 1 1 0.00000E+00 8.50000E-05 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 0 6 1 1 0.00000E+00 8.50000E-05 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 0 9 1 1 0.00000E+00 8.50000E-05 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 0 12 1 1 0.00000E+00 8.50000E-05 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 1 20 15 0.00000E+00 -1.90000E+01 2.00000E+00 0.00000E+00 2.00000E+00 2.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 FR 0 21 0 0 9.80000E-01 2.00000E-03 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/20-40m_ground_plane.nec000066400000000000000000000023041257141547200204320ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Dual band base-loaded 7 & 14 MHz Ground Plane. CM Infinite perfect ground CE --- End Comments --- GW 1 20 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.30000E+01 2.50000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 1 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 19 0 0 6.00000E+00 5.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 0 1 1 1 0.00000E+00 4.80000E-06 6.20000E-11 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 1 20 15 0.00000E+00 -9.50000E+00 1.00000E+00 0.00000E+00 1.00000E+00 1.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/20-40m_vert_circ_cliff.nec000066400000000000000000000026541257141547200211100ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Dual band base loaded 7 & 14 MHz Ground Plane. CM Finite ground with radials, circular cliff. CE --- End Comments --- GW 1 32 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.31000E+01 2.50000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 19 0 0 6.00000E+00 5.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 0 32 0 0 1.20000E+01 5.00000E-02 1.00000E+01 5.00000E-03 0.00000E+00 0.00000E+00 GD 0 0 0 0 1.00000E+01 3.00000E-03 1.00000E+01 3.00000E+00 0.00000E+00 0.00000E+00 LD 0 1 1 1 0.00000E+00 4.80000E-06 6.20000E-11 0.00000E+00 0.00000E+00 0.00000E+00 LD 5 1 0 0 3.70000E+07 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 1 20 15 0.00000E+00 -9.50000E+00 5.00000E-01 0.00000E+00 1.00000E+00 1.00000E+00 RP 6 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/20-40m_vert_linear_cliff.nec000066400000000000000000000026521257141547200214400ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Dual band base-loaded 7 & 14 MHz Ground Plane. CM Finite ground with radials, linear cliff. CE --- End Comments --- GW 1 32 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.31000E+01 2.50000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 19 0 0 6.00000E+00 5.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 0 32 0 0 1.20000E+01 5.00000E-02 1.00000E+01 5.00000E-03 0.00000E+00 0.00000E+00 GD 0 0 0 0 1.00000E+01 3.00000E-03 1.00000E+01 3.00000E+00 0.00000E+00 0.00000E+00 LD 0 1 1 1 0.00000E+00 4.80000E-06 6.20000E-11 0.00000E+00 0.00000E+00 0.00000E+00 LD 5 1 0 0 3.70000E+07 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 1 20 15 0.00000E+00 -9.50000E+00 5.00000E-01 0.00000E+00 1.00000E+00 1.00000E+00 RP 5 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/20-40m_vert_sommerfeld_cliff.nec000066400000000000000000000025221257141547200223170ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Dual band base loaded 7 & 14 MHz Ground Plane. CM Finite ground, no radials, linear cliff, Sommerfeld method. CE --- End Comments --- GW 1 32 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.31000E+01 2.50000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 19 0 0 6.00000E+00 5.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 2 0 0 0 1.30000E+01 1.00000E-01 1.00000E+01 1.00000E-01 1.00000E+01 3.00000E+00 LD 5 1 0 0 3.70000E+07 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 0 1 1 1 0.00000E+00 4.80000E-06 6.10000E-11 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 1 20 15 0.00000E+00 -9.50000E+00 1.00000E+00 0.00000E+00 1.00000E+00 1.00000E+00 RP 2 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/20m_car_ant.nec000066400000000000000000000535561257141547200171620ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM 14 MHz vertical whip on a car roof CE --- End Comments --- GW 1 9 0.00000E+00 0.00000E+00 0.00000E+00 2.69000E+00 0.00000E+00 0.00000E+00 4.80000E-02 GW 1 3 2.69000E+00 0.00000E+00 0.00000E+00 2.69000E+00 0.00000E+00 7.90000E-01 4.80000E-02 GW 1 9 2.69000E+00 0.00000E+00 7.90000E-01 0.00000E+00 0.00000E+00 7.90000E-01 4.80000E-02 GW 1 3 0.00000E+00 0.00000E+00 7.90000E-01 0.00000E+00 0.00000E+00 0.00000E+00 4.80000E-02 GW 1 4 2.69000E+00 0.00000E+00 7.90000E-01 3.84000E+00 0.00000E+00 6.70000E-01 4.80000E-02 GW 1 3 3.84000E+00 0.00000E+00 6.70000E-01 3.84000E+00 0.00000E+00 0.00000E+00 4.80000E-02 GW 1 4 3.84000E+00 0.00000E+00 0.00000E+00 2.69000E+00 0.00000E+00 0.00000E+00 4.80000E-02 GW 2 3 3.84000E+00 0.00000E+00 6.70000E-01 3.84000E+00 8.40000E-01 6.70000E-01 4.80000E-02 GW 2 4 3.84000E+00 8.40000E-01 6.70000E-01 2.69000E+00 8.40000E-01 7.90000E-01 4.80000E-02 GW 2 3 2.69000E+00 8.40000E-01 7.90000E-01 2.69000E+00 0.00000E+00 7.90000E-01 4.80000E-02 GW 3 3 3.84000E+00 0.00000E+00 0.00000E+00 3.84000E+00 8.40000E-01 0.00000E+00 4.80000E-02 GW 3 3 3.84000E+00 8.40000E-01 0.00000E+00 3.84000E+00 8.40000E-01 6.70000E-01 4.80000E-02 GW 4 6 4.80000E-01 8.40000E-01 1.25000E+00 2.14000E+00 8.40000E-01 1.25000E+00 4.80000E-02 GW 4 3 2.14000E+00 8.40000E-01 1.25000E+00 2.14000E+00 0.00000E+00 1.25000E+00 4.80000E-02 GW 4 6 2.14000E+00 0.00000E+00 1.25000E+00 4.80000E-01 0.00000E+00 1.25000E+00 4.80000E-02 GW 4 3 4.80000E-01 0.00000E+00 1.25000E+00 4.80000E-01 8.40000E-01 1.25000E+00 4.80000E-02 GW 5 3 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 8.40000E-01 0.00000E+00 4.80000E-02 GW 5 3 0.00000E+00 8.40000E-01 0.00000E+00 0.00000E+00 8.40000E-01 7.90000E-01 4.80000E-02 GW 5 3 0.00000E+00 8.40000E-01 7.90000E-01 0.00000E+00 0.00000E+00 7.90000E-01 4.80000E-02 GW 6 3 0.00000E+00 0.00000E+00 7.90000E-01 4.80000E-01 0.00000E+00 1.25000E+00 4.80000E-02 GW 7 2 1.40000E+00 0.00000E+00 7.90000E-01 1.40000E+00 0.00000E+00 1.25000E+00 4.80000E-02 GW 8 3 2.14000E+00 0.00000E+00 1.25000E+00 2.69000E+00 0.00000E+00 7.90000E-01 4.80000E-02 GW 9 3 -0.00000E+00 1.68000E+00 -0.00000E+00 -0.00000E+00 1.68000E+00 7.90000E-01 4.80000E-02 GW 9 9 -0.00000E+00 1.68000E+00 7.90000E-01 2.69000E+00 1.68000E+00 7.90000E-01 4.80000E-02 GW 9 3 2.69000E+00 1.68000E+00 7.90000E-01 2.69000E+00 1.68000E+00 -0.00000E+00 4.80000E-02 GW 9 9 2.69000E+00 1.68000E+00 -0.00000E+00 -0.00000E+00 1.68000E+00 -0.00000E+00 4.80000E-02 GW 10 4 2.69000E+00 1.68000E+00 -0.00000E+00 3.84000E+00 1.68000E+00 -0.00000E+00 4.80000E-02 GW 10 3 3.84000E+00 1.68000E+00 -0.00000E+00 3.84000E+00 1.68000E+00 6.70000E-01 4.80000E-02 GW 10 4 3.84000E+00 1.68000E+00 6.70000E-01 2.69000E+00 1.68000E+00 7.90000E-01 4.80000E-02 GW 11 3 2.69000E+00 1.68000E+00 7.90000E-01 2.69000E+00 8.40000E-01 7.90000E-01 4.80000E-02 GW 11 3 3.84000E+00 8.40000E-01 6.70000E-01 3.84000E+00 1.68000E+00 6.70000E-01 4.80000E-02 GW 12 3 3.84000E+00 8.40000E-01 -0.00000E+00 3.84000E+00 1.68000E+00 -0.00000E+00 4.80000E-02 GW 13 3 2.14000E+00 8.40000E-01 1.25000E+00 2.14000E+00 1.68000E+00 1.25000E+00 4.80000E-02 GW 13 6 2.14000E+00 1.68000E+00 1.25000E+00 4.80000E-01 1.68000E+00 1.25000E+00 4.80000E-02 GW 13 3 4.80000E-01 1.68000E+00 1.25000E+00 4.80000E-01 8.40000E-01 1.25000E+00 4.80000E-02 GW 14 3 -0.00000E+00 1.68000E+00 -0.00000E+00 -0.00000E+00 8.40000E-01 -0.00000E+00 4.80000E-02 GW 14 3 -0.00000E+00 8.40000E-01 7.90000E-01 -0.00000E+00 1.68000E+00 7.90000E-01 4.80000E-02 GW 15 3 -0.00000E+00 1.68000E+00 7.90000E-01 4.80000E-01 1.68000E+00 1.25000E+00 4.80000E-02 GW 16 2 1.40000E+00 1.68000E+00 7.90000E-01 1.40000E+00 1.68000E+00 1.25000E+00 4.80000E-02 GW 17 3 2.14000E+00 1.68000E+00 1.25000E+00 2.69000E+00 1.68000E+00 7.90000E-01 4.80000E-02 GW 1 1 0.00000E+00 0.00000E+00 2.63000E-01 2.99000E-01 0.00000E+00 2.63000E-01 4.80000E-02 GW 1 1 2.99000E-01 0.00000E+00 2.63000E-01 5.98000E-01 0.00000E+00 2.63000E-01 4.80000E-02 GW 1 1 5.98000E-01 0.00000E+00 2.63000E-01 8.97000E-01 0.00000E+00 2.63000E-01 4.80000E-02 GW 1 1 8.97000E-01 0.00000E+00 2.63000E-01 1.19600E+00 0.00000E+00 2.63000E-01 4.80000E-02 GW 1 1 1.19600E+00 0.00000E+00 2.63000E-01 1.49400E+00 0.00000E+00 2.63000E-01 4.80000E-02 GW 1 1 1.49400E+00 0.00000E+00 2.63000E-01 1.79300E+00 0.00000E+00 2.63000E-01 4.80000E-02 GW 1 1 1.79300E+00 0.00000E+00 2.63000E-01 2.09200E+00 0.00000E+00 2.63000E-01 4.80000E-02 GW 1 1 2.09200E+00 0.00000E+00 2.63000E-01 2.39100E+00 0.00000E+00 2.63000E-01 4.80000E-02 GW 1 1 2.39100E+00 0.00000E+00 2.63000E-01 2.69000E+00 0.00000E+00 2.63000E-01 4.80000E-02 GW 1 1 0.00000E+00 0.00000E+00 5.27000E-01 2.99000E-01 0.00000E+00 5.27000E-01 4.80000E-02 GW 1 1 2.99000E-01 0.00000E+00 5.27000E-01 5.98000E-01 0.00000E+00 5.27000E-01 4.80000E-02 GW 1 1 5.98000E-01 0.00000E+00 5.27000E-01 8.97000E-01 0.00000E+00 5.27000E-01 4.80000E-02 GW 1 1 8.97000E-01 0.00000E+00 5.27000E-01 1.19600E+00 0.00000E+00 5.27000E-01 4.80000E-02 GW 1 1 1.19600E+00 0.00000E+00 5.27000E-01 1.49400E+00 0.00000E+00 5.27000E-01 4.80000E-02 GW 1 1 1.49400E+00 0.00000E+00 5.27000E-01 1.79300E+00 0.00000E+00 5.27000E-01 4.80000E-02 GW 1 1 1.79300E+00 0.00000E+00 5.27000E-01 2.09200E+00 0.00000E+00 5.27000E-01 4.80000E-02 GW 1 1 2.09200E+00 0.00000E+00 5.27000E-01 2.39100E+00 0.00000E+00 5.27000E-01 4.80000E-02 GW 1 1 2.39100E+00 0.00000E+00 5.27000E-01 2.69000E+00 0.00000E+00 5.27000E-01 4.80000E-02 GW 1 3 2.99000E-01 0.00000E+00 0.00000E+00 2.99000E-01 0.00000E+00 7.90000E-01 4.80000E-02 GW 1 3 5.98000E-01 0.00000E+00 0.00000E+00 5.98000E-01 0.00000E+00 7.90000E-01 4.80000E-02 GW 1 3 8.97000E-01 0.00000E+00 0.00000E+00 8.97000E-01 0.00000E+00 7.90000E-01 4.80000E-02 GW 1 3 1.19600E+00 0.00000E+00 0.00000E+00 1.19600E+00 0.00000E+00 7.90000E-01 4.80000E-02 GW 1 3 1.49400E+00 0.00000E+00 0.00000E+00 1.49400E+00 0.00000E+00 7.90000E-01 4.80000E-02 GW 1 3 1.79300E+00 0.00000E+00 0.00000E+00 1.79300E+00 0.00000E+00 7.90000E-01 4.80000E-02 GW 1 3 2.09200E+00 0.00000E+00 0.00000E+00 2.09200E+00 0.00000E+00 7.90000E-01 4.80000E-02 GW 1 3 2.39100E+00 0.00000E+00 0.00000E+00 2.39100E+00 0.00000E+00 7.90000E-01 4.80000E-02 GW 1 1 3.84000E+00 0.00000E+00 2.23000E-01 3.55300E+00 0.00000E+00 2.33000E-01 4.80000E-02 GW 1 1 3.55300E+00 0.00000E+00 2.33000E-01 3.26500E+00 0.00000E+00 2.43000E-01 4.80000E-02 GW 1 1 3.26500E+00 0.00000E+00 2.43000E-01 2.97800E+00 0.00000E+00 2.53000E-01 4.80000E-02 GW 1 1 2.97800E+00 0.00000E+00 2.53000E-01 2.69000E+00 0.00000E+00 2.63000E-01 4.80000E-02 GW 1 1 3.84000E+00 0.00000E+00 4.47000E-01 3.55300E+00 0.00000E+00 4.67000E-01 4.80000E-02 GW 1 1 3.55300E+00 0.00000E+00 4.67000E-01 3.26500E+00 0.00000E+00 4.87000E-01 4.80000E-02 GW 1 1 3.26500E+00 0.00000E+00 4.87000E-01 2.97800E+00 0.00000E+00 5.07000E-01 4.80000E-02 GW 1 1 2.97800E+00 0.00000E+00 5.07000E-01 2.69000E+00 0.00000E+00 5.27000E-01 4.80000E-02 GW 1 3 3.55300E+00 0.00000E+00 0.00000E+00 3.55300E+00 0.00000E+00 7.00000E-01 4.80000E-02 GW 1 3 3.26500E+00 0.00000E+00 0.00000E+00 3.26500E+00 0.00000E+00 7.30000E-01 4.80000E-02 GW 1 3 2.97800E+00 0.00000E+00 0.00000E+00 2.97800E+00 0.00000E+00 7.60000E-01 4.80000E-02 GW 2 1 2.69000E+00 2.80000E-01 7.90000E-01 2.97800E+00 2.80000E-01 7.60000E-01 4.80000E-02 GW 2 1 2.97800E+00 2.80000E-01 7.60000E-01 3.26500E+00 2.80000E-01 7.30000E-01 4.80000E-02 GW 2 1 3.26500E+00 2.80000E-01 7.30000E-01 3.55300E+00 2.80000E-01 7.00000E-01 4.80000E-02 GW 2 1 3.55300E+00 2.80000E-01 7.00000E-01 3.84000E+00 2.80000E-01 6.70000E-01 4.80000E-02 GW 2 1 2.69000E+00 5.60000E-01 7.90000E-01 2.97800E+00 5.60000E-01 7.60000E-01 4.80000E-02 GW 2 1 2.97800E+00 5.60000E-01 7.60000E-01 3.26500E+00 5.60000E-01 7.30000E-01 4.80000E-02 GW 2 1 3.26500E+00 5.60000E-01 7.30000E-01 3.55300E+00 5.60000E-01 7.00000E-01 4.80000E-02 GW 2 1 3.55300E+00 5.60000E-01 7.00000E-01 3.84000E+00 5.60000E-01 6.70000E-01 4.80000E-02 GW 2 3 2.97800E+00 0.00000E+00 7.60000E-01 2.97800E+00 8.40000E-01 7.60000E-01 4.80000E-02 GW 2 3 3.26500E+00 0.00000E+00 7.30000E-01 3.26500E+00 8.40000E-01 7.30000E-01 4.80000E-02 GW 2 3 3.55300E+00 0.00000E+00 7.00000E-01 3.55300E+00 8.40000E-01 7.00000E-01 4.80000E-02 GW 3 1 3.84000E+00 0.00000E+00 2.23000E-01 3.84000E+00 2.80000E-01 2.23000E-01 4.80000E-02 GW 3 1 3.84000E+00 2.80000E-01 2.23000E-01 3.84000E+00 5.60000E-01 2.23000E-01 4.80000E-02 GW 3 1 3.84000E+00 5.60000E-01 2.23000E-01 3.84000E+00 8.40000E-01 2.23000E-01 4.80000E-02 GW 3 1 3.84000E+00 0.00000E+00 4.47000E-01 3.84000E+00 2.80000E-01 4.47000E-01 4.80000E-02 GW 3 1 3.84000E+00 2.80000E-01 4.47000E-01 3.84000E+00 5.60000E-01 4.47000E-01 4.80000E-02 GW 3 1 3.84000E+00 5.60000E-01 4.47000E-01 3.84000E+00 8.40000E-01 4.47000E-01 4.80000E-02 GW 3 3 3.84000E+00 2.80000E-01 0.00000E+00 3.84000E+00 2.80000E-01 6.70000E-01 4.80000E-02 GW 3 3 3.84000E+00 5.60000E-01 0.00000E+00 3.84000E+00 5.60000E-01 6.70000E-01 4.80000E-02 GW 4 1 4.80000E-01 5.60000E-01 1.25000E+00 7.57000E-01 5.60000E-01 1.25000E+00 4.80000E-02 GW 4 1 7.57000E-01 5.60000E-01 1.25000E+00 1.03300E+00 5.60000E-01 1.25000E+00 4.80000E-02 GW 4 1 1.03300E+00 5.60000E-01 1.25000E+00 1.31000E+00 5.60000E-01 1.25000E+00 4.80000E-02 GW 4 1 1.31000E+00 5.60000E-01 1.25000E+00 1.58700E+00 5.60000E-01 1.25000E+00 4.80000E-02 GW 4 1 1.58700E+00 5.60000E-01 1.25000E+00 1.86300E+00 5.60000E-01 1.25000E+00 4.80000E-02 GW 4 1 1.86300E+00 5.60000E-01 1.25000E+00 2.14000E+00 5.60000E-01 1.25000E+00 4.80000E-02 GW 4 1 4.80000E-01 2.80000E-01 1.25000E+00 7.57000E-01 2.80000E-01 1.25000E+00 4.80000E-02 GW 4 1 7.57000E-01 2.80000E-01 1.25000E+00 1.03300E+00 2.80000E-01 1.25000E+00 4.80000E-02 GW 4 1 1.03300E+00 2.80000E-01 1.25000E+00 1.31000E+00 2.80000E-01 1.25000E+00 4.80000E-02 GW 4 1 1.31000E+00 2.80000E-01 1.25000E+00 1.58700E+00 2.80000E-01 1.25000E+00 4.80000E-02 GW 4 1 1.58700E+00 2.80000E-01 1.25000E+00 1.86300E+00 2.80000E-01 1.25000E+00 4.80000E-02 GW 4 1 1.86300E+00 2.80000E-01 1.25000E+00 2.14000E+00 2.80000E-01 1.25000E+00 4.80000E-02 GW 4 3 7.57000E-01 8.40000E-01 1.25000E+00 7.57000E-01 0.00000E+00 1.25000E+00 4.80000E-02 GW 4 3 1.03300E+00 8.40000E-01 1.25000E+00 1.03300E+00 0.00000E+00 1.25000E+00 4.80000E-02 GW 4 3 1.31000E+00 8.40000E-01 1.25000E+00 1.31000E+00 0.00000E+00 1.25000E+00 4.80000E-02 GW 4 3 1.58700E+00 8.40000E-01 1.25000E+00 1.58700E+00 0.00000E+00 1.25000E+00 4.80000E-02 GW 4 3 1.86300E+00 8.40000E-01 1.25000E+00 1.86300E+00 0.00000E+00 1.25000E+00 4.80000E-02 GW 5 1 0.00000E+00 0.00000E+00 2.63000E-01 0.00000E+00 2.80000E-01 2.63000E-01 4.80000E-02 GW 5 1 0.00000E+00 2.80000E-01 2.63000E-01 0.00000E+00 5.60000E-01 2.63000E-01 4.80000E-02 GW 5 1 0.00000E+00 5.60000E-01 2.63000E-01 0.00000E+00 8.40000E-01 2.63000E-01 4.80000E-02 GW 5 1 0.00000E+00 0.00000E+00 5.27000E-01 0.00000E+00 2.80000E-01 5.27000E-01 4.80000E-02 GW 5 1 0.00000E+00 2.80000E-01 5.27000E-01 0.00000E+00 5.60000E-01 5.27000E-01 4.80000E-02 GW 5 1 0.00000E+00 5.60000E-01 5.27000E-01 0.00000E+00 8.40000E-01 5.27000E-01 4.80000E-02 GW 5 3 0.00000E+00 2.80000E-01 0.00000E+00 0.00000E+00 2.80000E-01 7.90000E-01 4.80000E-02 GW 5 3 0.00000E+00 5.60000E-01 0.00000E+00 0.00000E+00 5.60000E-01 7.90000E-01 4.80000E-02 GW 9 1 -0.00000E+00 1.68000E+00 5.27000E-01 2.99000E-01 1.68000E+00 5.27000E-01 4.80000E-02 GW 9 1 2.99000E-01 1.68000E+00 5.27000E-01 5.98000E-01 1.68000E+00 5.27000E-01 4.80000E-02 GW 9 1 5.98000E-01 1.68000E+00 5.27000E-01 8.97000E-01 1.68000E+00 5.27000E-01 4.80000E-02 GW 9 1 8.97000E-01 1.68000E+00 5.27000E-01 1.19600E+00 1.68000E+00 5.27000E-01 4.80000E-02 GW 9 1 1.19600E+00 1.68000E+00 5.27000E-01 1.49400E+00 1.68000E+00 5.27000E-01 4.80000E-02 GW 9 1 1.49400E+00 1.68000E+00 5.27000E-01 1.79300E+00 1.68000E+00 5.27000E-01 4.80000E-02 GW 9 1 1.79300E+00 1.68000E+00 5.27000E-01 2.09200E+00 1.68000E+00 5.27000E-01 4.80000E-02 GW 9 1 2.09200E+00 1.68000E+00 5.27000E-01 2.39100E+00 1.68000E+00 5.27000E-01 4.80000E-02 GW 9 1 2.39100E+00 1.68000E+00 5.27000E-01 2.69000E+00 1.68000E+00 5.27000E-01 4.80000E-02 GW 9 1 -0.00000E+00 1.68000E+00 2.63000E-01 2.99000E-01 1.68000E+00 2.63000E-01 4.80000E-02 GW 9 1 2.99000E-01 1.68000E+00 2.63000E-01 5.98000E-01 1.68000E+00 2.63000E-01 4.80000E-02 GW 9 1 5.98000E-01 1.68000E+00 2.63000E-01 8.97000E-01 1.68000E+00 2.63000E-01 4.80000E-02 GW 9 1 8.97000E-01 1.68000E+00 2.63000E-01 1.19600E+00 1.68000E+00 2.63000E-01 4.80000E-02 GW 9 1 1.19600E+00 1.68000E+00 2.63000E-01 1.49400E+00 1.68000E+00 2.63000E-01 4.80000E-02 GW 9 1 1.49400E+00 1.68000E+00 2.63000E-01 1.79300E+00 1.68000E+00 2.63000E-01 4.80000E-02 GW 9 1 1.79300E+00 1.68000E+00 2.63000E-01 2.09200E+00 1.68000E+00 2.63000E-01 4.80000E-02 GW 9 1 2.09200E+00 1.68000E+00 2.63000E-01 2.39100E+00 1.68000E+00 2.63000E-01 4.80000E-02 GW 9 1 2.39100E+00 1.68000E+00 2.63000E-01 2.69000E+00 1.68000E+00 2.63000E-01 4.80000E-02 GW 9 3 2.99000E-01 1.68000E+00 7.90000E-01 2.99000E-01 1.68000E+00 -0.00000E+00 4.80000E-02 GW 9 3 5.98000E-01 1.68000E+00 7.90000E-01 5.98000E-01 1.68000E+00 -0.00000E+00 4.80000E-02 GW 9 3 8.97000E-01 1.68000E+00 7.90000E-01 8.97000E-01 1.68000E+00 -0.00000E+00 4.80000E-02 GW 9 3 1.19600E+00 1.68000E+00 7.90000E-01 1.19600E+00 1.68000E+00 -0.00000E+00 4.80000E-02 GW 9 3 1.49400E+00 1.68000E+00 7.90000E-01 1.49400E+00 1.68000E+00 -0.00000E+00 4.80000E-02 GW 9 3 1.79300E+00 1.68000E+00 7.90000E-01 1.79300E+00 1.68000E+00 -0.00000E+00 4.80000E-02 GW 9 3 2.09200E+00 1.68000E+00 7.90000E-01 2.09200E+00 1.68000E+00 -0.00000E+00 4.80000E-02 GW 9 3 2.39100E+00 1.68000E+00 7.90000E-01 2.39100E+00 1.68000E+00 -0.00000E+00 4.80000E-02 GW 10 1 2.69000E+00 1.68000E+00 2.63000E-01 2.97800E+00 1.68000E+00 2.53000E-01 4.80000E-02 GW 10 1 2.97800E+00 1.68000E+00 2.53000E-01 3.26500E+00 1.68000E+00 2.43000E-01 4.80000E-02 GW 10 1 3.26500E+00 1.68000E+00 2.43000E-01 3.55300E+00 1.68000E+00 2.33000E-01 4.80000E-02 GW 10 1 3.55300E+00 1.68000E+00 2.33000E-01 3.84000E+00 1.68000E+00 2.23000E-01 4.80000E-02 GW 10 1 2.69000E+00 1.68000E+00 5.27000E-01 2.97800E+00 1.68000E+00 5.07000E-01 4.80000E-02 GW 10 1 2.97800E+00 1.68000E+00 5.07000E-01 3.26500E+00 1.68000E+00 4.87000E-01 4.80000E-02 GW 10 1 3.26500E+00 1.68000E+00 4.87000E-01 3.55300E+00 1.68000E+00 4.67000E-01 4.80000E-02 GW 10 1 3.55300E+00 1.68000E+00 4.67000E-01 3.84000E+00 1.68000E+00 4.47000E-01 4.80000E-02 GW 10 3 2.97800E+00 1.68000E+00 -0.00000E+00 2.97800E+00 1.68000E+00 7.60000E-01 4.80000E-02 GW 10 3 3.26500E+00 1.68000E+00 -0.00000E+00 3.26500E+00 1.68000E+00 7.30000E-01 4.80000E-02 GW 10 3 3.55300E+00 1.68000E+00 -0.00000E+00 3.55300E+00 1.68000E+00 7.00000E-01 4.80000E-02 GW 11 1 3.84000E+00 1.40000E+00 6.70000E-01 3.55300E+00 1.40000E+00 7.00000E-01 4.80000E-02 GW 11 1 3.55300E+00 1.40000E+00 7.00000E-01 3.26500E+00 1.40000E+00 7.30000E-01 4.80000E-02 GW 11 1 3.26500E+00 1.40000E+00 7.30000E-01 2.97800E+00 1.40000E+00 7.60000E-01 4.80000E-02 GW 11 1 2.97800E+00 1.40000E+00 7.60000E-01 2.69000E+00 1.40000E+00 7.90000E-01 4.80000E-02 GW 11 1 3.84000E+00 1.12000E+00 6.70000E-01 3.55300E+00 1.12000E+00 7.00000E-01 4.80000E-02 GW 11 1 3.55300E+00 1.12000E+00 7.00000E-01 3.26500E+00 1.12000E+00 7.30000E-01 4.80000E-02 GW 11 1 3.26500E+00 1.12000E+00 7.30000E-01 2.97800E+00 1.12000E+00 7.60000E-01 4.80000E-02 GW 11 1 2.97800E+00 1.12000E+00 7.60000E-01 2.69000E+00 1.12000E+00 7.90000E-01 4.80000E-02 GW 11 3 3.55300E+00 1.68000E+00 7.00000E-01 3.55300E+00 8.40000E-01 7.00000E-01 4.80000E-02 GW 11 3 3.26500E+00 1.68000E+00 7.30000E-01 3.26500E+00 8.40000E-01 7.30000E-01 4.80000E-02 GW 11 3 2.97800E+00 1.68000E+00 7.60000E-01 2.97800E+00 8.40000E-01 7.60000E-01 4.80000E-02 GW 12 1 3.84000E+00 8.40000E-01 2.23000E-01 3.84000E+00 1.12000E+00 2.23000E-01 4.80000E-02 GW 12 1 3.84000E+00 1.12000E+00 2.23000E-01 3.84000E+00 1.40000E+00 2.23000E-01 4.80000E-02 GW 12 1 3.84000E+00 1.40000E+00 2.23000E-01 3.84000E+00 1.68000E+00 2.23000E-01 4.80000E-02 GW 12 1 3.84000E+00 8.40000E-01 4.47000E-01 3.84000E+00 1.12000E+00 4.47000E-01 4.80000E-02 GW 12 1 3.84000E+00 1.12000E+00 4.47000E-01 3.84000E+00 1.40000E+00 4.47000E-01 4.80000E-02 GW 12 1 3.84000E+00 1.40000E+00 4.47000E-01 3.84000E+00 1.68000E+00 4.47000E-01 4.80000E-02 GW 12 3 3.84000E+00 1.12000E+00 -0.00000E+00 3.84000E+00 1.12000E+00 6.70000E-01 4.80000E-02 GW 12 3 3.84000E+00 1.40000E+00 -0.00000E+00 3.84000E+00 1.40000E+00 6.70000E-01 4.80000E-02 GW 13 1 4.80000E-01 1.12000E+00 1.25000E+00 7.57000E-01 1.12000E+00 1.25000E+00 4.80000E-02 GW 13 1 7.57000E-01 1.12000E+00 1.25000E+00 1.03300E+00 1.12000E+00 1.25000E+00 4.80000E-02 GW 13 1 1.03300E+00 1.12000E+00 1.25000E+00 1.31000E+00 1.12000E+00 1.25000E+00 4.80000E-02 GW 13 1 1.31000E+00 1.12000E+00 1.25000E+00 1.58700E+00 1.12000E+00 1.25000E+00 4.80000E-02 GW 13 1 1.58700E+00 1.12000E+00 1.25000E+00 1.86300E+00 1.12000E+00 1.25000E+00 4.80000E-02 GW 13 1 1.86300E+00 1.12000E+00 1.25000E+00 2.14000E+00 1.12000E+00 1.25000E+00 4.80000E-02 GW 13 1 4.80000E-01 1.40000E+00 1.25000E+00 7.57000E-01 1.40000E+00 1.25000E+00 4.80000E-02 GW 13 1 7.57000E-01 1.40000E+00 1.25000E+00 1.03300E+00 1.40000E+00 1.25000E+00 4.80000E-02 GW 13 1 1.03300E+00 1.40000E+00 1.25000E+00 1.31000E+00 1.40000E+00 1.25000E+00 4.80000E-02 GW 13 1 1.31000E+00 1.40000E+00 1.25000E+00 1.58700E+00 1.40000E+00 1.25000E+00 4.80000E-02 GW 13 1 1.58700E+00 1.40000E+00 1.25000E+00 1.86300E+00 1.40000E+00 1.25000E+00 4.80000E-02 GW 13 1 1.86300E+00 1.40000E+00 1.25000E+00 2.14000E+00 1.40000E+00 1.25000E+00 4.80000E-02 GW 13 3 7.57000E-01 8.40000E-01 1.25000E+00 7.57000E-01 1.68000E+00 1.25000E+00 4.80000E-02 GW 13 3 1.03300E+00 8.40000E-01 1.25000E+00 1.03300E+00 1.68000E+00 1.25000E+00 4.80000E-02 GW 13 3 1.31000E+00 8.40000E-01 1.25000E+00 1.31000E+00 1.68000E+00 1.25000E+00 4.80000E-02 GW 13 3 1.58700E+00 8.40000E-01 1.25000E+00 1.58700E+00 1.68000E+00 1.25000E+00 4.80000E-02 GW 13 3 1.86300E+00 8.40000E-01 1.25000E+00 1.86300E+00 1.68000E+00 1.25000E+00 4.80000E-02 GW 14 1 -0.00000E+00 1.68000E+00 2.63000E-01 -0.00000E+00 1.40000E+00 2.63000E-01 4.80000E-02 GW 14 1 -0.00000E+00 1.40000E+00 2.63000E-01 -0.00000E+00 1.12000E+00 2.63000E-01 4.80000E-02 GW 14 1 -0.00000E+00 1.12000E+00 2.63000E-01 -0.00000E+00 8.40000E-01 2.63000E-01 4.80000E-02 GW 14 1 -0.00000E+00 1.68000E+00 5.27000E-01 -0.00000E+00 1.40000E+00 5.27000E-01 4.80000E-02 GW 14 1 -0.00000E+00 1.40000E+00 5.27000E-01 -0.00000E+00 1.12000E+00 5.27000E-01 4.80000E-02 GW 14 1 -0.00000E+00 1.12000E+00 5.27000E-01 -0.00000E+00 8.40000E-01 5.27000E-01 4.80000E-02 GW 14 3 -0.00000E+00 1.40000E+00 -0.00000E+00 -0.00000E+00 1.40000E+00 7.90000E-01 4.80000E-02 GW 14 3 -0.00000E+00 1.12000E+00 -0.00000E+00 -0.00000E+00 1.12000E+00 7.90000E-01 4.80000E-02 GW 18 13 1.31000E+00 8.40000E-01 1.25000E+00 1.31000E+00 8.40000E-01 6.70000E+00 5.00000E-03 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 11 0 0 1.30000E+01 2.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 18 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 1 16 10 1.31000E+00 -6.60000E+00 5.00000E-01 0.00000E+00 1.00000E+00 1.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/20m_quad.nec000066400000000000000000000027351257141547200164760ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM 3 Element Quad for 14 MHz CM NOTE: This input file uses the modified GS command available CM in xnec2c, where scaling is specified for a range of tag numbers. CM It is NOT compatible with the standard NEC2 or its translation CM to C, nec2c. BEWARE! CE --- End Comments --- GW 1 13 0.00000E+00 2.72000E+00 -2.72000E+00 0.00000E+00 2.72000E+00 2.72000E+00 2.00000E-03 GW 2 13 -4.00000E+00 2.72000E+00 -2.72000E+00 -4.00000E+00 2.72000E+00 2.72000E+00 2.00000E-03 GS 2 2 1.02000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 3 13 3.00000E+00 2.72000E+00 -2.72000E+00 3.00000E+00 2.72000E+00 2.72000E+00 2.00000E-03 GS 3 3 9.80000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GM 0 3 9.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 46 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 19 0 0 1.36000E+01 5.00000E-02 1.45000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/23cm_helix+radials.nec000066400000000000000000000031131257141547200204250ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Helix and radial reflector for 1296 MHz CE --- End Comments --- GW 2 10 0.00000E+00 0.00000E+00 0.00000E+00 4.50000E-02 0.00000E+00 0.00000E+00 3.00000E-03 GR 0 8 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -3.00000E-02 0.00000E+00 GH 1 478 6.70000E-02 1.00000E+00 4.30000E-02 4.30000E-02 4.30000E-02 4.30000E-02 3.00000E-03 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 3.00000E-02 0.00000E+00 GW 3 7 0.00000E+00 0.00000E+00 0.00000E+00 4.30000E-02 0.00000E+00 3.00000E-02 3.00000E-03 GM 0 0 9.00000E+01 0.00000E+00 9.00000E+01 -5.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 3 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 11 0 0 1.20000E+03 2.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 1 20 1 17 7.50000E-02 0.00000E+00 -8.00000E+01 7.50000E-02 0.00000E+00 1.00000E+01 RP 0 37 73 1000 0.00000E+00 0.00000E+00 5.00000E+00 5.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/23cm_helix+screen.nec000066400000000000000000000032651257141547200202750ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Helix and screen reflector for 1296 MHz CE --- End Comments --- GH 1 478 6.70000E-02 1.00000E+00 4.30000E-02 4.30000E-02 4.30000E-02 4.30000E-02 3.00000E-03 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 3.00000E-02 0.00000E+00 GW 2 7 0.00000E+00 0.00000E+00 0.00000E+00 4.30000E-02 0.00000E+00 3.00000E-02 3.00000E-03 GW 3 10 8.00000E-02 1.00000E-01 0.00000E+00 8.00000E-02 -1.00000E-01 0.00000E+00 3.00000E-03 GM 0 8 0.00000E+00 0.00000E+00 0.00000E+00 -2.00000E-02 0.00000E+00 0.00000E+00 3.00000E+00 GW 4 10 1.00000E-01 8.00000E-02 0.00000E+00 -1.00000E-01 8.00000E-02 0.00000E+00 3.00000E-03 GM 0 8 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -2.00000E-02 0.00000E+00 4.00000E+00 GM 0 0 9.00000E+01 0.00000E+00 9.00000E+01 -5.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 11 0 0 1.20000E+03 2.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 1 20 1 17 7.50000E-02 0.00000E+00 -8.00000E+01 7.50000E-02 0.00000E+00 1.00000E+01 RP 0 37 73 1000 0.00000E+00 0.00000E+00 5.00000E+00 5.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/2m_1:4l-gp_on_pole.nec000066400000000000000000000023431257141547200202700ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Ground Plane for 2m mounted on a 3m pole CM It just shows where your RF goes with such a setup ;-) CE --- End Comments --- GW 1 13 0.00000E+00 0.00000E+00 0.00000E+00 -3.40000E-01 0.00000E+00 -3.40000E-01 7.50000E-03 GR 0 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 2 13 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 4.80000E-01 7.50000E-03 GW 3 75 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -3.00000E+00 2.50000E-02 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.25000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 37 73 0 0.00000E+00 0.00000E+00 5.00000E+00 5.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.40000E+02 5.00000E-01 1.50000E+02 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/2m_5:8l-gp_on_pole.nec000066400000000000000000000025221257141547200202770ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM 5/8 lambda Ground Plane for 2m mounted on a 3m pole CM It just shows where your RF goes with such a setup ;-) CE --- End Comments --- GW 1 11 0.00000E+00 0.00000E+00 0.00000E+00 4.80000E-01 0.00000E+00 0.00000E+00 7.50000E-03 GR 0 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 2 32 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.28000E+00 7.50000E-03 GW 3 75 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -3.00000E+00 2.50000E-02 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.25000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.40000E+02 5.00000E-01 1.50000E+02 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 0 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 LD 1 2 1 1 1.00000E+06 1.50000E-07 1.00000E-12 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/2m_EME_ant.nec000066400000000000000000000042231257141547200167260ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM EME antenna for 2m, with extended double Zeppelin driven element CM and reflector. Director is traditional Yagi sized in length. CM Feeding is done with a balanced line harness, not shown here. CE --- End Comments --- GW 1 55 1.39500E+00 0.00000E+00 0.00000E+00 -1.39500E+00 0.00000E+00 0.00000E+00 7.50000E-03 GW 2 61 1.52500E+00 -2.60000E-01 0.00000E+00 -1.52500E+00 -2.60000E-01 0.00000E+00 7.50000E-03 GW 3 17 4.20000E-01 2.50000E-01 0.00000E+00 -4.20000E-01 2.50000E-01 0.00000E+00 7.50000E-03 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 -2.05000E+00 0.00000E+00 -2.40000E+00 0.00000E+00 GM 3 3 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.60000E+00 0.00000E+00 GM 12 1 0.00000E+00 0.00000E+00 0.00000E+00 4.10000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 28 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 4 28 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 7 28 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 10 28 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 13 28 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 16 28 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 19 28 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 22 28 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 73 37 0 0.00000E+00 0.00000E+00 2.50000E+00 1.00000E+01 0.00000E+00 0.00000E+00 FR 0 11 0 0 1.44000E+02 2.00000E-01 1.46000E+02 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/2m_bigwheel.nec000066400000000000000000000031271257141547200172460ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Big Wheel horizontally polarized omni antenna for 2m CE --- End Comments --- GA 1 21 6.65000E-01 0.00000E+00 7.00000E+01 3.00000E-03 2.06474E+00 0.00000E+00 0.00000E+00 GM 0 0 9.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 2 17 0.00000E+00 0.00000E+00 1.00000E-02 6.65000E-01 0.00000E+00 0.00000E+00 3.00000E-03 GM 0 0 0.00000E+00 0.00000E+00 7.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 3 17 0.00000E+00 0.00000E+00 -1.00000E-02 6.65000E-01 0.00000E+00 0.00000E+00 3.00000E-03 GR 0 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 4 1 0.00000E+00 0.00000E+00 -1.00000E-02 0.00000E+00 0.00000E+00 1.00000E-02 3.00000E-03 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 4 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.44000E+02 2.00000E-01 1.48000E+02 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 15 1 15 -1.40000E+00 0.00000E+00 -1.40000E+00 2.00000E-01 0.00000E+00 2.00000E-01 RP 0 19 37 1000 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/2m_extended_Xpol_yagi.nec000066400000000000000000000022371257141547200212740ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM X-polarized extended Yagi - RHCP CE --- End Comments --- GW 1 61 1.39500E+00 0.00000E+00 0.00000E+00 -1.39500E+00 0.00000E+00 0.00000E+00 7.50000E-03 GW 2 67 1.52500E+00 -2.60000E-01 0.00000E+00 -1.52500E+00 -2.60000E-01 0.00000E+00 7.50000E-03 GW 3 19 4.20000E-01 2.30000E-01 0.00000E+00 -4.20000E-01 2.30000E-01 0.00000E+00 7.50000E-03 GM 3 1 0.00000E+00 -9.00000E+01 0.00000E+00 0.00000E+00 5.10000E-01 0.00000E+00 1.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 31 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 4 31 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.44000E+02 2.00000E-01 1.48000E+02 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 73 37 0 0.00000E+00 0.00000E+00 2.50000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/2m_extended_yagi.nec000066400000000000000000000016731257141547200202750ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM 2m Extended Yagi CE --- End Comments --- GW 1 61 1.39500E+00 0.00000E+00 0.00000E+00 -1.39500E+00 0.00000E+00 0.00000E+00 7.50000E-03 GW 2 67 1.52500E+00 -2.60000E-01 0.00000E+00 -1.52500E+00 -2.60000E-01 0.00000E+00 7.50000E-03 GW 3 19 4.20000E-01 2.30000E-01 0.00000E+00 -4.20000E-01 2.30000E-01 0.00000E+00 7.50000E-03 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 31 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.44000E+02 2.00000E-01 1.48000E+02 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 73 37 0 0.00000E+00 0.00000E+00 2.50000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/2m_halo_stack.nec000066400000000000000000000025111257141547200175640ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM A stack of two halo antennas for 2m. Note that the CM circumference of the halos is .625l, not 0.5l CE --- End Comments --- GA 1 31 1.95000E-01 2.00000E+00 3.58000E+02 3.00000E-03 1.95551E+00 0.00000E+00 0.00000E+00 GM 0 0 9.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 7.00000E-01 0.00000E+00 GX 1 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 3 1 -1.97000E-01 -2.00000E-02 0.00000E+00 -1.97000E-01 2.00000E-02 0.00000E+00 3.00000E-03 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 3 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 1 16 3 1 6.00000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 2 16 3 1 6.00000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.40000E+02 5.00000E-01 1.50000E+02 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 37 37 0 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/2m_sqr_halo.nec000066400000000000000000000021061257141547200172640ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM A square halo antenna for 2m. Circumference is 0.625l CE --- End Comments --- GW 1 7 -1.62000E-01 1.62000E-01 0.00000E+00 1.62000E-01 1.62000E-01 0.00000E+00 6.00000E-03 GM 1 2 0.00000E+00 0.00000E+00 9.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 4 4 1.62000E-01 1.62000E-01 0.00000E+00 1.62000E-01 1.00000E-02 0.00000E+00 6.00000E-03 GW 5 4 1.62000E-01 -1.62000E-01 0.00000E+00 1.62000E-01 -1.00000E-02 0.00000E+00 6.00000E-03 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 4 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.40000E+02 5.00000E-01 1.50000E+02 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 37 37 0 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/2m_sqr_halo_stack.nec000066400000000000000000000031361257141547200204550ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM A stack of two square halos for 2m. Circumference is 0.625l CE --- End Comments --- GW 1 7 -1.62000E-01 1.62000E-01 0.00000E+00 1.62000E-01 1.62000E-01 0.00000E+00 6.00000E-03 GM 1 2 0.00000E+00 0.00000E+00 9.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 4 4 1.62000E-01 1.62000E-01 0.00000E+00 1.62000E-01 1.00000E-02 0.00000E+00 6.00000E-03 GW 5 4 1.62000E-01 -1.62000E-01 0.00000E+00 1.62000E-01 -1.00000E-02 0.00000E+00 6.00000E-03 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 6.00000E-01 0.00000E+00 GX 6 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 13 1 -1.62000E-01 -2.00000E-02 0.00000E+00 -1.62000E-01 2.00000E-02 0.00000E+00 6.00000E-03 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 13 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.40000E+02 5.00000E-01 1.50000E+02 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 37 37 0 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 TL 13 1 2 4 3.00000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 13 1 8 4 3.00000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/2m_xpol_omni.nec000066400000000000000000000022571257141547200174670ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Cross-polarized omni-directional antenna for 144 MHz CE --- End Comments --- GW 1 20 0.00000E+00 0.00000E+00 2.00000E-02 6.92700E-01 2.51900E-01 2.61800E-01 3.00000E-03 GW 2 20 0.00000E+00 0.00000E+00 -2.00000E-02 6.92700E-01 -2.51900E-01 -2.61800E-01 3.00000E-03 GW 3 20 6.92700E-01 2.51900E-01 2.61800E-01 6.92700E-01 -2.51900E-01 -2.61800E-01 3.00000E-03 GR 3 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 13 1 0.00000E+00 0.00000E+00 -2.00000E-02 0.00000E+00 0.00000E+00 2.00000E-02 3.00000E-03 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 13 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.44000E+02 1.00000E-01 1.46000E+02 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/2m_xpol_omni_stack.nec000066400000000000000000000033141257141547200206470ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Vertically-stacked omni-directional RH-polarized anrtenna for 2m CE --- End Comments --- GW 1 20 0.00000E+00 0.00000E+00 2.00000E-02 6.92700E-01 2.51900E-01 2.61800E-01 3.00000E-03 GW 2 20 0.00000E+00 0.00000E+00 -2.00000E-02 6.92700E-01 -2.51900E-01 -2.61800E-01 3.00000E-03 GW 3 20 6.92700E-01 2.51900E-01 2.61800E-01 6.92700E-01 -2.51900E-01 -2.61800E-01 3.00000E-03 GR 3 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 13 1 0.00000E+00 0.00000E+00 -2.00000E-02 0.00000E+00 0.00000E+00 2.00000E-02 3.00000E-03 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -7.50000E-01 0.00000E+00 GM 13 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.50000E+00 0.00000E+00 GW 27 1 0.00000E+00 2.00000E-02 0.00000E+00 0.00000E+00 -2.00000E-02 0.00000E+00 1.00000E-02 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 27 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 13 1 27 1 5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 27 1 26 1 5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.40000E+02 5.00000E-01 1.50000E+02 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/2m_yagi.nec000066400000000000000000000032361257141547200164120ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Yagi for 145 MHz CE --- End Comments --- GW 1 25 0.00000E+00 5.09000E-01 0.00000E+00 0.00000E+00 -5.09000E-01 0.00000E+00 5.00000E-03 GW 2 25 4.00000E-01 4.84000E-01 0.00000E+00 4.00000E-01 -4.84000E-01 0.00000E+00 5.00000E-03 GW 3 22 7.00000E-01 4.59000E-01 0.00000E+00 7.00000E-01 -4.59000E-01 0.00000E+00 5.00000E-03 GW 4 22 1.10000E+00 4.50000E-01 0.00000E+00 1.10000E+00 -4.50000E-01 0.00000E+00 5.00000E-03 GW 5 22 1.50000E+00 4.40000E-01 0.00000E+00 1.50000E+00 -4.40000E-01 0.00000E+00 5.00000E-03 GW 6 21 1.90000E+00 4.30000E-01 0.00000E+00 1.90000E+00 -4.30000E-01 0.00000E+00 5.00000E-03 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.40000E+02 5.00000E-01 1.50000E+02 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 13 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 5 0 0 0 3.70000E+07 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 20 15 1 -1.40000E+00 -1.40000E+00 5.00000E-02 2.00000E-01 2.00000E-01 0.00000E+00 RP 0 37 73 1000 0.00000E+00 0.00000E+00 5.00000E+00 5.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/30-80m_inv_L.nec000066400000000000000000000017021257141547200170320ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM 30-80m Inverted L antenna CE --- End Comments --- GW 1 31 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.68000E+01 1.50000E-03 GW 2 18 0.00000E+00 0.00000E+00 1.68000E+01 9.00000E+00 0.00000E+00 1.68000E+01 1.50000E-03 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 46 0 0 3.00000E+00 2.00000E-01 1.20000E+01 0.00000E+00 0.00000E+00 0.00000E+00 GN 1 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/35-55MHz_logper.nec000066400000000000000000000066101257141547200175270ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM 12 ELEMENT LOG PERIODIC ANTENNA IN FREE SPACE. CM 78 SEGMENTS. SIGMA=D/L RECEIVING AND TRANS. PATTERNS. CM DIPOLE LENGTH TO DIAMETER RATIO=150. CM TAU=0.93, SIGMA=0.70, BOOM IMPEDANCE=50. OHMS. CE --- End Comments --- GW 1 9 0.00000E+00 -1.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 0.00000E+00 7.00000E-03 GW 2 9 -7.53000E-01 -1.07500E+00 0.00000E+00 -7.53000E-01 1.07500E+00 0.00000E+00 7.00000E-03 GW 3 9 -1.56200E+00 -1.15600E+00 0.00000E+00 -1.56200E+00 1.15600E+00 0.00000E+00 8.00000E-03 GW 4 11 -2.43200E+00 -1.24300E+00 0.00000E+00 -2.43200E+00 1.24300E+00 0.00000E+00 8.00000E-03 GW 5 11 -3.36800E+00 -1.33700E+00 0.00000E+00 -3.36800E+00 1.33700E+00 0.00000E+00 9.00000E-03 GW 6 11 -4.37400E+00 -1.43700E+00 0.00000E+00 -4.37400E+00 1.43700E+00 0.00000E+00 1.00000E-02 GW 7 13 -5.45600E+00 -1.54600E+00 0.00000E+00 -5.45600E+00 1.54600E+00 0.00000E+00 1.00000E-02 GW 8 13 -6.62000E+00 -1.66200E+00 0.00000E+00 -6.62000E+00 1.66200E+00 0.00000E+00 1.10000E-02 GW 9 15 -7.87000E+00 -1.78700E+00 0.00000E+00 -7.87000E+00 1.78700E+00 0.00000E+00 1.20000E-02 GW 10 15 -9.21600E+00 -1.92100E+00 0.00000E+00 -9.21600E+00 1.92100E+00 0.00000E+00 1.30000E-02 GW 11 17 -1.06600E+01 -2.06600E+00 0.00000E+00 -1.06600E+01 2.06600E+00 0.00000E+00 1.40000E-02 GW 12 17 -1.22200E+01 -2.22200E+00 0.00000E+00 -1.22200E+01 2.22200E+00 0.00000E+00 1.50000E-02 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 6.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 3.50000E+01 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 5 0 0 0 3.70000E+07 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 1 5 2 5 -5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 2 5 3 5 -5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 3 5 4 6 -5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 4 6 5 6 -5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 5 6 6 6 -5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 6 6 7 7 -5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 7 7 8 7 -5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 8 7 9 8 -5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 9 8 10 8 -5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 10 8 11 9 -5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 11 9 12 9 -5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 2.00000E-02 0.00000E+00 EX 0 1 5 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/40-80m_Inv_L.nec000066400000000000000000000020171257141547200167730ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.3 --- CE --- End Comments --- GW 1 20 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.20000E+01 1.25000E-03 GW 2 26 0.00000E+00 0.00000E+00 1.20000E+01 1.60000E+01 0.00000E+00 1.20000E+01 1.25000E-03 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 101 0 0 3.00000E+00 5.00000E-02 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 GN 0 16 0 0 1.20000E+01 1.00000E-02 1.00000E+01 5.00000E-03 0.00000E+00 0.00000E+00 LD 0 1 1 1 1.00000E-01 1.50000E-05 6.00000E-11 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/40m-moxon.nec000066400000000000000000000034141257141547200166170ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Moxon antenna for 40m CE --- End Comments --- GW 1 19 2.56000E+00 0.00000E+00 2.00000E+00 2.56000E+00 0.00000E+00 1.74000E+01 1.50000E-03 GW 2 3 2.56000E+00 0.00000E+00 2.00000E+00 1.80000E-01 0.00000E+00 2.00000E+00 1.50000E-03 GW 3 3 2.56000E+00 0.00000E+00 1.74000E+01 1.80000E-01 0.00000E+00 1.74000E+01 1.50000E-03 GW 4 1 1.80000E-01 0.00000E+00 9.50000E+00 1.80000E-01 0.00000E+00 9.90000E+00 1.50000E-02 GR 10 3 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 4 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 1 10 4 1 5.00000E+01 6.20000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 11 10 14 1 5.00000E+01 6.20000E+00 0.00000E+00 0.00000E+00 1.00000E+04 0.00000E+00 TL 21 10 24 1 5.00000E+01 6.20000E+00 0.00000E+00 0.00000E+00 1.00000E+04 0.00000E+00 FR 0 21 0 0 6.80000E+00 2.00000E-02 7.20000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 10 1 10 -1.35000E+00 0.00000E+00 -1.35000E+00 3.00000E-01 0.00000E+00 3.00000E-01 RP 0 19 37 10 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 GN 2 0 0 0 1.20000E+01 2.00000E-03 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/6-17m_bipyramid.nec000066400000000000000000000034401257141547200176670ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Skeleton bi-pyramid antenna for 14-52 MHz CE --- End Comments --- GW 1 18 1.34400E+00 0.00000E+00 1.62400E+00 0.00000E+00 0.00000E+00 1.12000E-01 3.00000E-03 GW 2 18 1.34400E+00 0.00000E+00 1.62400E+00 0.00000E+00 0.00000E+00 3.13600E+00 3.00000E-03 GW 3 12 1.34400E+00 0.00000E+00 1.62400E+00 0.00000E+00 0.00000E+00 1.62400E+00 7.50000E-03 GW 4 17 1.34400E+00 0.00000E+00 1.62400E+00 0.00000E+00 1.34400E+00 1.62400E+00 3.00000E-03 GR 0 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 5 13 0.00000E+00 0.00000E+00 1.62400E+00 0.00000E+00 0.00000E+00 1.12000E-01 1.50000E-02 GW 6 13 0.00000E+00 0.00000E+00 1.62400E+00 0.00000E+00 0.00000E+00 3.13600E+00 1.50000E-02 GW 7 1 0.00000E+00 0.00000E+00 1.12000E-01 0.00000E+00 0.00000E+00 0.00000E+00 1.50000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 7 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 41 0 0 1.40000E+01 1.00000E+00 5.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 10 1 10 -4.50000E+00 0.00000E+00 5.00000E-01 1.00000E+00 0.00000E+00 1.00000E+00 RP 4 19 37 0 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 GN 1 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/6-20m_inv_cone.nec000066400000000000000000000025671257141547200175120ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Skeleton bi-pyramid antenna for 14-52 MHz CE --- End Comments --- GW 1 25 0.00000E+00 0.00000E+00 1.12000E-01 1.06000E+00 0.00000E+00 3.00000E+00 3.00000E-03 GW 2 9 5.30000E-01 9.17980E-01 3.00000E+00 1.06000E+00 0.00000E+00 3.00000E+00 3.00000E-03 GW 3 9 0.00000E+00 0.00000E+00 3.00000E+00 1.06000E+00 0.00000E+00 3.00000E+00 3.00000E-03 GR 0 6 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 4 1 0.00000E+00 0.00000E+00 1.12000E-01 0.00000E+00 0.00000E+00 0.00000E+00 1.25000E-02 GW 5 25 0.00000E+00 0.00000E+00 1.12000E-01 0.00000E+00 0.00000E+00 3.00000E+00 1.25000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 4 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 39 0 0 1.40000E+01 1.00000E+00 5.20000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 4 19 37 0 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 GN 1 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/6m_big-square_stack.nec000066400000000000000000000036261257141547200207140ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Big Square horizontally polarized omni antenna for 2m CE --- End Comments --- GW 1 16 0.00000E+00 0.00000E+00 5.00000E-02 1.75800E+00 0.00000E+00 0.00000E+00 6.00000E-03 GM 0 0 0.00000E+00 0.00000E+00 8.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 2 16 0.00000E+00 0.00000E+00 -5.00000E-02 1.75800E+00 0.00000E+00 0.00000E+00 6.00000E-03 GW 3 20 3.05300E-01 1.73800E+00 0.00000E+00 1.75800E+00 0.00000E+00 0.00000E+00 6.00000E-03 GR 0 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 4 1 0.00000E+00 0.00000E+00 -5.00000E-02 0.00000E+00 0.00000E+00 5.00000E-02 6.00000E-03 GM 4 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 3.00000E+00 0.00000E+00 GW 9 1 5.00000E-02 0.00000E+00 1.50000E+00 -5.00000E-02 0.00000E+00 1.50000E+00 6.00000E-03 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 3.00000E+00 0.00000E+00 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 9 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 9 1 4 1 4.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 9 1 8 1 4.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 4.50000E+01 5.00000E-01 5.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 GN 0 0 0 0 1.20000E+01 1.00000E-02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/6m_bigwheel-stack.nec000066400000000000000000000037771257141547200203700ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Big Wheel horizontally polarized omni antenna for 2m CE --- End Comments --- GA 1 21 1.85000E+00 0.00000E+00 7.00000E+01 6.00000E-03 1.97451E+00 0.00000E+00 0.00000E+00 GM 0 0 9.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 2 17 0.00000E+00 0.00000E+00 5.00000E-02 1.85000E+00 0.00000E+00 0.00000E+00 6.00000E-03 GM 0 0 0.00000E+00 0.00000E+00 7.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 3 17 0.00000E+00 0.00000E+00 -5.00000E-02 1.85000E+00 0.00000E+00 0.00000E+00 6.00000E-03 GR 0 4 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 4 1 0.00000E+00 0.00000E+00 -5.00000E-02 0.00000E+00 0.00000E+00 5.00000E-02 6.00000E-03 GM 4 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 3.00000E+00 0.00000E+00 GW 9 1 5.00000E-02 0.00000E+00 1.50000E+00 -5.00000E-02 0.00000E+00 1.50000E+00 6.00000E-03 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 3.00000E+00 0.00000E+00 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 9 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 9 1 4 1 5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 9 1 8 1 5.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 4.50000E+01 5.00000E-01 5.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 GN 0 0 0 0 1.20000E+01 1.00000E-02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/6m_horizomni.nec000066400000000000000000000025211257141547200174770ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.3 --- CE --- End Comments --- GW 1 15 -5.00000E-01 -4.90000E-01 0.00000E+00 5.00000E-01 -4.90000E-01 0.00000E+00 1.50000E-03 GW 1 15 -5.00000E-01 -4.90000E-01 0.00000E+00 -5.00000E-01 4.90000E-01 0.00000E+00 1.50000E-03 GW 1 15 5.00000E-01 -4.90000E-01 0.00000E+00 5.00000E-01 4.90000E-01 0.00000E+00 1.50000E-03 GW 1 7 2.00000E-02 4.90000E-01 0.00000E+00 5.00000E-01 4.90000E-01 0.00000E+00 1.50000E-03 GW 1 7 -2.00000E-02 4.90000E-01 0.00000E+00 -5.00000E-01 4.90000E-01 0.00000E+00 1.50000E-03 GW 2 1 -3.00000E-02 -4.90000E-01 -2.26000E+00 3.00000E-02 -4.90000E-01 -2.26000E+00 5.00000E-03 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 TL 1 8 2 1 4.50000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 51 0 0 4.50000E+01 2.00000E-01 5.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/70cm_collinear.nec000066400000000000000000000051071257141547200176600ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM 432 MHz stacked Extended Double Zeppelin with two CM reflectors and directors mounted on driven elements CE --- End Comments --- GW 1 21 0.00000E+00 -2.31000E-01 3.42000E-01 0.00000E+00 2.31000E-01 3.42000E-01 7.50000E-03 GW 2 7 0.00000E+00 -3.85000E-01 3.42000E-01 0.00000E+00 -2.31000E-01 3.42000E-01 7.50000E-03 GW 3 7 0.00000E+00 3.85000E-01 3.42000E-01 0.00000E+00 2.31000E-01 3.42000E-01 7.50000E-03 GW 4 6 -1.80000E-01 -2.31000E-01 3.42000E-01 0.00000E+00 -2.31000E-01 3.42000E-01 5.00000E-03 GW 5 6 -1.80000E-01 2.31000E-01 3.42000E-01 0.00000E+00 2.31000E-01 3.42000E-01 5.00000E-03 GW 6 6 0.00000E+00 -2.31000E-01 3.42000E-01 1.00000E-01 -2.31000E-01 3.42000E-01 5.00000E-03 GW 7 6 0.00000E+00 2.31000E-01 3.42000E-01 1.00000E-01 2.31000E-01 3.42000E-01 5.00000E-03 GW 8 7 -1.80000E-01 -3.87000E-01 3.42000E-01 -1.80000E-01 -2.31000E-01 3.42000E-01 3.00000E-03 GW 9 7 -1.80000E-01 -2.31000E-01 3.42000E-01 -1.80000E-01 -7.50000E-02 3.42000E-01 3.00000E-03 GW 10 7 -1.80000E-01 3.87000E-01 3.42000E-01 -1.80000E-01 2.31000E-01 3.42000E-01 3.00000E-03 GW 11 7 -1.80000E-01 2.31000E-01 3.42000E-01 -1.80000E-01 7.50000E-02 3.42000E-01 3.00000E-03 GW 12 7 1.00000E-01 -3.77000E-01 3.42000E-01 1.00000E-01 -2.31000E-01 3.42000E-01 3.00000E-03 GW 13 7 1.00000E-01 -2.31000E-01 3.42000E-01 1.00000E-01 -8.50000E-02 3.42000E-01 3.00000E-03 GW 14 7 1.00000E-01 3.77000E-01 3.42000E-01 1.00000E-01 2.31000E-01 3.42000E-01 3.00000E-03 GW 15 7 1.00000E-01 2.31000E-01 3.42000E-01 1.00000E-01 8.50000E-02 3.42000E-01 3.00000E-03 GX 15 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EK 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 11 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 16 11 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 31 0 0 4.20000E+02 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 37 73 1000 0.00000E+00 0.00000E+00 5.00000E+00 5.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/80m_zepp.nec000066400000000000000000000021151257141547200165200ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Balloon Vertical for 80m. 1/2 wave fed with 1/4 wave feeder. CE --- End Comments --- GW 1 27 0.00000E+00 0.00000E+00 2.00000E+01 0.00000E+00 0.00000E+00 6.05000E+01 1.50000E-03 GW 2 1 -2.00000E-01 0.00000E+00 5.00000E-01 2.00000E-01 0.00000E+00 5.00000E-01 1.50000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 21 0 0 3.00000E+00 5.00000E-02 4.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 0 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 TL 1 1 2 1 4.50000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 2 0 0 0 1.20000E+01 5.00000E-03 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/T12m-H24m.nec000066400000000000000000000027271257141547200163220ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM T Antenna for Medium Wave band CE --- End Comments --- GW 2 1 0.00000E+00 6.00000E+00 2.40000E+01 1.50000E+00 6.00000E+00 2.40000E+01 2.50000E-03 GX 0 100 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GM 0 2 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -6.00000E+00 0.00000E+00 2.00000E+00 GW 3 6 -1.50000E+00 0.00000E+00 2.40000E+01 -1.50000E+00 6.00000E+00 2.40000E+01 2.50000E-03 GM 0 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -6.00000E+00 0.00000E+00 3.00000E+00 GM 0 2 0.00000E+00 0.00000E+00 0.00000E+00 1.50000E+00 0.00000E+00 0.00000E+00 3.00000E+00 GW 1 12 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 2.40000E+01 2.50000E-03 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 0 16 0 0 1.20000E+01 1.00000E-02 2.00000E+01 5.00000E-03 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.00000E+00 5.00000E-02 2.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 0 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/T20m-H18m.nec000066400000000000000000000027411257141547200163200ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM T antenna for the high end of the MW band CE --- End Comments --- GW 2 1 0.00000E+00 1.00000E+01 1.80000E+01 1.50000E+00 1.00000E+01 1.80000E+01 2.50000E-03 GX 0 100 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GM 0 2 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E+01 0.00000E+00 2.00000E+00 GW 3 6 -1.50000E+00 0.00000E+00 1.80000E+01 -1.50000E+00 1.00000E+01 1.80000E+01 2.50000E-03 GM 0 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -1.00000E+01 0.00000E+00 3.00000E+00 GM 0 2 0.00000E+00 0.00000E+00 0.00000E+00 1.50000E+00 0.00000E+00 0.00000E+00 3.00000E+00 GW 1 12 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.80000E+01 2.50000E-03 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 0 16 0 0 1.20000E+01 1.00000E-02 2.00000E+01 5.00000E-03 0.00000E+00 0.00000E+00 FR 0 21 0 0 1.00000E+00 5.00000E-02 2.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 0 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/airplane.nec000066400000000000000000000663671257141547200166740ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Jet plane with trailing wire antenna CE --- End Comments --- GW 1 1 7.69703E+00 -3.05237E-01 1.51819E+00 7.69703E+00 7.00000E-06 1.51819E+00 1.00000E-02 GW 2 1 1.28670E+01 1.66028E-01 2.99715E+00 1.28695E+01 0.00000E+00 2.99701E+00 1.00000E-02 GW 3 1 1.69070E+01 0.00000E+00 2.77578E+00 1.28670E+01 1.66030E-01 2.99715E+00 1.00000E-02 GW 4 1 1.50463E+01 2.06341E-01 2.77500E+00 1.69070E+01 0.00000E+00 2.77578E+00 1.00000E-02 GW 5 1 1.69070E+01 0.00000E+00 2.77578E+00 1.28722E+01 4.47423E-01 2.41615E+00 1.00000E-02 GW 6 1 1.69070E+01 0.00000E+00 2.77578E+00 1.28473E+01 1.39100E-01 2.09967E+00 1.00000E-02 GW 7 1 1.28473E+01 1.39100E-01 2.09967E+00 1.28473E+01 -1.39100E-01 2.09967E+00 1.00000E-02 GW 8 1 1.12287E+01 2.33350E-01 3.08692E+00 1.12287E+01 -2.33350E-01 3.08692E+00 1.00000E-02 GW 9 1 1.12345E+01 1.91124E-01 1.91759E+00 1.12345E+01 -1.91124E-01 1.91759E+00 1.00000E-02 GW 10 1 9.52535E+00 3.03356E-01 3.18025E+00 9.52535E+00 -3.03356E-01 3.18025E+00 1.00000E-02 GW 11 1 7.69648E+00 3.78515E-01 3.28047E+00 7.69648E+00 -3.78515E-01 3.28047E+00 1.00000E-02 GW 12 1 9.52806E+00 -2.46171E-01 1.72492E+00 9.52806E+00 2.46171E-01 1.72492E+00 1.00000E-02 GW 13 1 6.30906E+00 -3.50010E-01 1.36149E+00 6.30906E+00 3.50010E-01 1.36149E+00 1.00000E-02 GW 14 1 6.30472E+00 3.78515E-01 3.47929E+00 6.30472E+00 -3.78515E-01 3.47929E+00 1.00000E-02 GW 15 1 5.42155E+00 -3.78515E-01 3.60546E+00 5.42155E+00 3.78515E-01 3.60546E+00 1.00000E-02 GW 16 2 4.16367E+00 -3.78510E-01 3.78515E+00 4.16367E+00 3.78510E-01 3.78515E+00 1.00000E-02 GW 17 1 5.42539E+00 3.78515E-01 1.26172E+00 5.42539E+00 -3.78515E-01 1.26172E+00 1.00000E-02 GW 18 1 4.16367E+00 -3.78515E-01 1.26172E+00 4.16367E+00 3.78515E-01 1.26172E+00 1.00000E-02 GW 19 1 2.77578E+00 -3.15430E-01 3.65898E+00 2.77578E+00 3.15430E-01 3.65898E+00 1.00000E-02 GW 20 1 3.40664E+00 3.78515E-01 1.26172E+00 3.40664E+00 -3.78515E-01 1.26172E+00 1.00000E-02 GW 21 1 2.08183E+00 2.52344E-01 1.38789E+00 2.08183E+00 -2.52344E-01 1.38789E+00 1.00000E-02 GW 22 1 7.57031E-01 1.26172E-01 1.51406E+00 7.57031E-01 -1.26172E-01 1.51406E+00 1.00000E-02 GW 23 1 1.76641E+00 -2.52344E-01 3.02812E+00 1.76641E+00 2.52344E-01 3.02812E+00 1.00000E-02 GW 24 1 7.57031E-01 1.89258E-01 2.77578E+00 7.57031E-01 -1.89258E-01 2.77578E+00 1.00000E-02 GW 25 1 0.00000E+00 1.26172E-01 2.01875E+00 0.00000E+00 -1.26172E-01 2.01875E+00 1.00000E-02 GW 26 1 1.69070E+01 0.00000E+00 2.77578E+00 1.28722E+01 -4.47423E-01 2.41615E+00 1.00000E-02 GW 27 1 1.69070E+01 0.00000E+00 2.77578E+00 1.28473E+01 -1.39100E-01 2.09967E+00 1.00000E-02 GW 28 1 1.28722E+01 -4.47423E-01 2.41615E+00 1.28795E+01 -4.46618E-01 2.77409E+00 1.00000E-02 GW 29 1 1.12180E+01 -6.30859E-01 2.26871E+00 1.12180E+01 -6.30859E-01 2.77339E+00 1.00000E-02 GW 30 1 9.52599E+00 -7.17719E-01 2.78449E+00 9.52619E+00 -7.17708E-01 2.14953E+00 1.00000E-02 GW 31 1 7.69637E+00 -8.11639E-01 2.79649E+00 7.69912E+00 -8.11498E-01 2.02082E+00 1.00000E-02 GW 32 1 6.30227E+00 -8.83203E-01 2.80563E+00 6.30227E+00 -8.83203E-01 1.92243E+00 1.00000E-02 GW 33 1 5.42575E+00 -8.83203E-01 1.90898E+00 5.42580E+00 -8.44875E-01 2.80628E+00 1.00000E-02 GW 34 1 4.15950E+00 -8.83203E-01 1.88957E+00 4.16009E+00 -8.12425E-01 2.80627E+00 1.00000E-02 GW 35 1 3.21862E+00 -8.83203E-01 2.57677E+00 3.21778E+00 -8.83203E-01 1.87512E+00 1.00000E-02 GW 36 1 6.30228E-01 -6.30859E-01 2.29931E+00 7.57031E-01 -1.89258E-01 2.77578E+00 1.00000E-02 GW 37 1 2.01673E+00 -8.83203E-01 2.48757E+00 6.30228E-01 -6.30859E-01 2.29931E+00 1.00000E-02 GW 38 1 2.01673E+00 -8.83203E-01 1.85671E+00 2.01673E+00 -8.83203E-01 2.48757E+00 1.00000E-02 GW 39 1 0.00000E+00 -1.26172E-01 2.01875E+00 7.57031E-01 -1.89258E-01 2.77578E+00 1.00000E-02 GW 40 1 4.15950E+00 -8.83203E-01 1.88957E+00 5.42575E+00 -8.83203E-01 1.90898E+00 1.00000E-02 GW 41 1 5.42539E+00 -3.78515E-01 1.26172E+00 4.16367E+00 -3.78515E-01 1.26172E+00 1.00000E-02 GW 42 1 4.16367E+00 -3.78515E-01 1.26172E+00 4.15950E+00 -8.83203E-01 1.88957E+00 1.00000E-02 GW 43 1 3.40664E+00 -3.78515E-01 1.26172E+00 3.21778E+00 -8.83203E-01 1.87512E+00 1.00000E-02 GW 44 1 2.01673E+00 -8.83203E-01 1.85671E+00 2.08183E+00 -2.52344E-01 1.38789E+00 1.00000E-02 GW 45 1 7.57031E-01 -1.26172E-01 1.51406E+00 6.30228E-01 -6.30859E-01 1.92080E+00 1.00000E-02 GW 46 1 7.57031E-01 -1.26172E-01 1.51406E+00 0.00000E+00 -1.26172E-01 2.01875E+00 1.00000E-02 GW 47 1 3.40664E+00 -3.78515E-01 1.26172E+00 2.08183E+00 -2.52344E-01 1.38789E+00 1.00000E-02 GW 48 1 3.40664E+00 -3.78515E-01 1.26172E+00 4.16367E+00 -3.78515E-01 1.26172E+00 1.00000E-02 GW 49 1 2.08183E+00 -2.52344E-01 1.38789E+00 7.57031E-01 -1.26172E-01 1.51406E+00 1.00000E-02 GW 50 1 6.30228E-01 -6.30859E-01 2.29931E+00 6.30228E-01 -6.30859E-01 1.92080E+00 1.00000E-02 GW 51 1 6.30228E-01 -6.30859E-01 1.92080E+00 0.00000E+00 -1.26172E-01 2.01875E+00 1.00000E-02 GW 52 1 6.30228E-01 -6.30859E-01 1.92080E+00 2.01673E+00 -8.83203E-01 1.85671E+00 1.00000E-02 GW 53 1 3.21778E+00 -8.83203E-01 1.87512E+00 2.01673E+00 -8.83203E-01 1.85671E+00 1.00000E-02 GW 54 1 3.21778E+00 -8.83203E-01 1.87512E+00 4.15950E+00 -8.83203E-01 1.88957E+00 1.00000E-02 GW 55 1 0.00000E+00 -1.26172E-01 2.01875E+00 6.30228E-01 -6.30859E-01 2.29931E+00 1.00000E-02 GW 56 1 7.69703E+00 -3.05237E-01 1.51819E+00 9.52806E+00 -2.46171E-01 1.72492E+00 1.00000E-02 GW 57 1 7.69912E+00 -8.11498E-01 2.02082E+00 7.69703E+00 -3.05237E-01 1.51819E+00 1.00000E-02 GW 58 1 6.30906E+00 -3.50010E-01 1.36149E+00 6.30227E+00 -8.83203E-01 1.92243E+00 1.00000E-02 GW 59 1 5.42575E+00 -8.83203E-01 1.90898E+00 5.42539E+00 -3.78515E-01 1.26172E+00 1.00000E-02 GW 60 1 5.42539E+00 -3.78515E-01 1.26172E+00 6.30906E+00 -3.50010E-01 1.36149E+00 1.00000E-02 GW 61 1 7.69703E+00 -3.05237E-01 1.51819E+00 6.30906E+00 -3.50010E-01 1.36149E+00 1.00000E-02 GW 62 1 1.12345E+01 -1.91124E-01 1.91759E+00 1.28473E+01 -1.39100E-01 2.09967E+00 1.00000E-02 GW 63 1 1.12345E+01 -1.91124E-01 1.91759E+00 1.12180E+01 -6.30859E-01 2.26871E+00 1.00000E-02 GW 64 1 9.52619E+00 -7.17708E-01 2.14953E+00 9.52806E+00 -2.46171E-01 1.72492E+00 1.00000E-02 GW 65 1 6.30227E+00 -8.83203E-01 1.92243E+00 7.69912E+00 -8.11498E-01 2.02082E+00 1.00000E-02 GW 66 1 1.12345E+01 -1.91124E-01 1.91759E+00 9.52806E+00 -2.46171E-01 1.72492E+00 1.00000E-02 GW 67 1 6.30227E+00 -8.83203E-01 1.92243E+00 5.42575E+00 -8.83203E-01 1.90898E+00 1.00000E-02 GW 68 1 9.52619E+00 -7.17708E-01 2.14953E+00 1.12180E+01 -6.30859E-01 2.26871E+00 1.00000E-02 GW 69 1 7.69912E+00 -8.11498E-01 2.02082E+00 9.52619E+00 -7.17708E-01 2.14953E+00 1.00000E-02 GW 70 1 1.28473E+01 -1.39100E-01 2.09967E+00 1.28722E+01 -4.47423E-01 2.41615E+00 1.00000E-02 GW 71 1 1.28722E+01 -4.47423E-01 2.41615E+00 1.12180E+01 -6.30859E-01 2.26871E+00 1.00000E-02 GW 72 1 1.49548E+01 0.00000E+00 4.14230E+00 1.50144E+01 0.00000E+00 5.26811E+00 1.00000E-02 GW 73 1 1.65740E+01 0.00000E+00 4.15788E+00 1.62762E+01 0.00000E+00 5.39428E+00 1.00000E-02 GW 74 1 1.39420E+01 0.00000E+00 4.13256E+00 1.50144E+01 0.00000E+00 5.26811E+00 1.00000E-02 GW 75 1 5.41486E+00 -3.08670E+00 2.80627E+00 4.16009E+00 -8.12425E-01 2.80627E+00 1.00000E-02 GW 76 1 5.42580E+00 -8.44875E-01 2.80628E+00 4.16009E+00 -8.12425E-01 2.80627E+00 1.00000E-02 GW 77 1 5.42155E+00 -3.78515E-01 3.60546E+00 4.16367E+00 -3.78515E-01 3.78515E+00 1.00000E-02 GW 78 1 4.16009E+00 -8.12425E-01 2.80627E+00 4.16367E+00 -3.78515E-01 3.78515E+00 1.00000E-02 GW 79 1 1.76641E+00 -2.52344E-01 3.02812E+00 2.77578E+00 -3.15430E-01 3.65898E+00 1.00000E-02 GW 80 1 2.01673E+00 -8.83203E-01 2.48757E+00 1.76641E+00 -2.52344E-01 3.02812E+00 1.00000E-02 GW 81 1 7.57031E-01 -1.89258E-01 2.77578E+00 1.76641E+00 -2.52344E-01 3.02812E+00 1.00000E-02 GW 82 1 3.21862E+00 -8.83203E-01 2.57677E+00 4.16009E+00 -8.12425E-01 2.80627E+00 1.00000E-02 GW 83 1 2.01673E+00 -8.83203E-01 2.48757E+00 3.21862E+00 -8.83203E-01 2.57677E+00 1.00000E-02 GW 84 1 4.16367E+00 -3.78515E-01 3.78515E+00 2.77578E+00 -3.15430E-01 3.65898E+00 1.00000E-02 GW 85 1 1.48883E+01 0.00000E+00 2.88640E+00 1.49548E+01 0.00000E+00 4.14230E+00 1.00000E-02 GW 86 1 1.65740E+01 0.00000E+00 4.15788E+00 1.69070E+01 0.00000E+00 2.77578E+00 1.00000E-02 GW 87 1 1.28695E+01 0.00000E+00 2.99701E+00 1.39420E+01 0.00000E+00 4.13256E+00 1.00000E-02 GW 88 1 7.69648E+00 -3.78515E-01 3.28047E+00 6.30472E+00 -3.78515E-01 3.47929E+00 1.00000E-02 GW 89 1 6.30227E+00 -8.83203E-01 2.80563E+00 6.30472E+00 -3.78515E-01 3.47929E+00 1.00000E-02 GW 90 1 5.42580E+00 -8.44875E-01 2.80628E+00 5.42155E+00 -3.78515E-01 3.60546E+00 1.00000E-02 GW 91 1 1.48883E+01 0.00000E+00 2.88640E+00 1.69070E+01 0.00000E+00 2.77578E+00 1.00000E-02 GW 92 1 1.50463E+01 -2.06341E-01 2.77500E+00 1.69070E+01 0.00000E+00 2.77578E+00 1.00000E-02 GW 93 1 1.69070E+01 0.00000E+00 2.77578E+00 1.28670E+01 -1.66028E-01 2.99715E+00 1.00000E-02 GW 94 1 1.28695E+01 0.00000E+00 2.99701E+00 1.48883E+01 0.00000E+00 2.88640E+00 1.00000E-02 GW 95 1 1.28795E+01 -4.46618E-01 2.77409E+00 1.28670E+01 -1.66028E-01 2.99715E+00 1.00000E-02 GW 96 1 1.12180E+01 -6.30859E-01 2.77339E+00 1.12287E+01 -2.33354E-01 3.08692E+00 1.00000E-02 GW 97 1 9.52535E+00 -3.03356E-01 3.18025E+00 9.52599E+00 -7.17719E-01 2.78449E+00 1.00000E-02 GW 98 1 7.69637E+00 -8.11639E-01 2.79649E+00 7.69648E+00 -3.78515E-01 3.28047E+00 1.00000E-02 GW 99 1 1.12180E+01 -6.30859E-01 2.77339E+00 9.52599E+00 -7.17719E-01 2.78449E+00 1.00000E-02 GW 100 1 9.06729E+00 -4.67431E+00 2.80627E+00 9.05992E+00 -7.19190E+00 2.80627E+00 1.00000E-02 GW 101 1 9.53716E+00 -7.19454E+00 2.80627E+00 9.06729E+00 -4.67431E+00 2.80627E+00 1.00000E-02 GW 102 1 7.67558E+00 -7.18425E+00 2.80627E+00 6.28484E+00 -4.66354E+00 2.80627E+00 1.00000E-02 GW 103 1 7.68384E+00 -4.65068E+00 2.80238E+00 7.67558E+00 -7.18425E+00 2.80627E+00 1.00000E-02 GW 104 1 9.05718E+00 -8.13039E+00 2.80627E+00 9.71165E+00 -8.13039E+00 2.80627E+00 1.00000E-02 GW 105 1 9.05992E+00 -7.19190E+00 2.80627E+00 9.53716E+00 -7.19454E+00 2.80627E+00 1.00000E-02 GW 106 1 9.05992E+00 -7.19190E+00 2.80627E+00 9.05718E+00 -8.13039E+00 2.80627E+00 1.00000E-02 GW 107 1 8.19758E+00 -8.13039E+00 2.80627E+00 7.67558E+00 -7.18425E+00 2.80627E+00 1.00000E-02 GW 108 1 7.67558E+00 -7.18425E+00 2.80627E+00 9.05992E+00 -7.19190E+00 2.80627E+00 1.00000E-02 GW 109 1 8.19758E+00 -8.13039E+00 2.80627E+00 9.05718E+00 -8.13039E+00 2.80627E+00 1.00000E-02 GW 110 1 9.71165E+00 -8.13039E+00 2.80627E+00 9.53716E+00 -7.19454E+00 2.80627E+00 1.00000E-02 GW 111 1 7.68384E+00 -4.65068E+00 2.80238E+00 6.28484E+00 -4.66354E+00 2.80627E+00 1.00000E-02 GW 112 1 7.68891E+00 -3.09598E+00 2.79999E+00 6.32782E+00 -3.08619E+00 2.80627E+00 1.00000E-02 GW 113 1 6.30227E+00 -8.83203E-01 2.80563E+00 7.69637E+00 -8.11639E-01 2.79649E+00 1.00000E-02 GW 114 1 6.30227E+00 -8.83203E-01 2.80563E+00 6.32782E+00 -3.08619E+00 2.80627E+00 1.00000E-02 GW 115 1 5.42580E+00 -8.44875E-01 2.80628E+00 5.41486E+00 -3.08670E+00 2.80627E+00 1.00000E-02 GW 116 1 6.32782E+00 -3.08619E+00 2.80627E+00 5.41486E+00 -3.08670E+00 2.80627E+00 1.00000E-02 GW 117 1 5.41486E+00 -3.08670E+00 2.80627E+00 6.32782E+00 -3.08619E+00 2.80627E+00 1.00000E-02 GW 118 1 6.28484E+00 -4.66354E+00 2.80627E+00 5.41486E+00 -3.08670E+00 2.80627E+00 1.00000E-02 GW 119 1 6.32782E+00 -3.08619E+00 2.80627E+00 6.28484E+00 -4.66354E+00 2.80627E+00 1.00000E-02 GW 120 1 6.30227E+00 -8.83203E-01 2.80563E+00 5.42580E+00 -8.44875E-01 2.80628E+00 1.00000E-02 GW 121 1 7.69637E+00 -8.11639E-01 2.79649E+00 7.68891E+00 -3.09598E+00 2.79999E+00 1.00000E-02 GW 122 1 8.77094E+00 -3.08481E+00 2.80627E+00 8.34240E+00 -7.86238E-01 2.80627E+00 1.00000E-02 GW 123 1 7.68384E+00 -4.65068E+00 2.80238E+00 7.68891E+00 -3.09598E+00 2.79999E+00 1.00000E-02 GW 124 1 9.06729E+00 -4.67431E+00 2.80627E+00 8.77094E+00 -3.08481E+00 2.80627E+00 1.00000E-02 GW 125 1 7.68891E+00 -3.09598E+00 2.79999E+00 8.77094E+00 -3.08481E+00 2.80627E+00 1.00000E-02 GW 126 1 7.68384E+00 -4.65068E+00 2.80238E+00 9.06729E+00 -4.67431E+00 2.80627E+00 1.00000E-02 GW 127 1 8.34240E+00 -7.86238E-01 2.80627E+00 9.52599E+00 -7.17719E-01 2.78449E+00 1.00000E-02 GW 128 1 8.34240E+00 -7.86238E-01 2.80627E+00 7.69637E+00 -8.11639E-01 2.79649E+00 1.00000E-02 GW 129 1 1.40537E+01 -3.16406E-01 2.77458E+00 1.28795E+01 -4.46618E-01 2.77409E+00 1.00000E-02 GW 130 1 1.28795E+01 -4.46618E-01 2.77409E+00 1.36790E+01 -1.64590E+00 2.77409E+00 1.00000E-02 GW 131 1 1.12180E+01 -6.30859E-01 2.77339E+00 1.28795E+01 -4.46618E-01 2.77409E+00 1.00000E-02 GW 132 1 1.53508E+01 -1.65128E+00 2.77454E+00 1.56553E+01 -3.09623E+00 2.77409E+00 1.00000E-02 GW 133 1 1.46459E+01 -3.09623E+00 2.77409E+00 1.43611E+01 -1.64810E+00 2.77428E+00 1.00000E-02 GW 134 1 1.36790E+01 -1.64590E+00 2.77409E+00 1.46459E+01 -3.09623E+00 2.77409E+00 1.00000E-02 GW 135 1 1.46459E+01 -3.09623E+00 2.77409E+00 1.56553E+01 -3.09623E+00 2.77409E+00 1.00000E-02 GW 136 1 1.53508E+01 -1.65128E+00 2.77454E+00 1.43611E+01 -1.64810E+00 2.77428E+00 1.00000E-02 GW 137 1 1.40537E+01 -3.16406E-01 2.77458E+00 1.50463E+01 -2.06341E-01 2.77500E+00 1.00000E-02 GW 138 1 1.43611E+01 -1.64810E+00 2.77428E+00 1.36790E+01 -1.64590E+00 2.77409E+00 1.00000E-02 GW 139 1 1.43611E+01 -1.64810E+00 2.77428E+00 1.40537E+01 -3.16406E-01 2.77458E+00 1.00000E-02 GW 140 1 1.53508E+01 -1.65128E+00 2.77454E+00 1.50463E+01 -2.06341E-01 2.77500E+00 1.00000E-02 GW 141 1 1.12287E+01 -2.33354E-01 3.08692E+00 9.52535E+00 -3.03356E-01 3.18025E+00 1.00000E-02 GW 142 1 9.52535E+00 -3.03356E-01 3.18025E+00 7.69648E+00 -3.78515E-01 3.28047E+00 1.00000E-02 GW 143 1 1.12287E+01 -2.33354E-01 3.08692E+00 1.28670E+01 -1.66028E-01 2.99715E+00 1.00000E-02 GW 144 1 1.28670E+01 -1.66028E-01 2.99715E+00 1.28695E+01 0.00000E+00 2.99701E+00 1.00000E-02 GW 145 1 1.49548E+01 0.00000E+00 4.14230E+00 1.65740E+01 0.00000E+00 4.15788E+00 1.00000E-02 GW 146 1 6.30472E+00 -3.78515E-01 3.47929E+00 5.42155E+00 -3.78515E-01 3.60546E+00 1.00000E-02 GW 147 1 1.49548E+01 0.00000E+00 4.14230E+00 1.39420E+01 0.00000E+00 4.13256E+00 1.00000E-02 GW 148 1 1.50144E+01 0.00000E+00 5.26811E+00 1.62762E+01 0.00000E+00 5.39428E+00 1.00000E-02 GW 149 1 1.12180E+01 6.30859E-01 2.26871E+00 1.12180E+01 6.30859E-01 2.77339E+00 1.00000E-02 GW 150 1 9.52599E+00 7.17719E-01 2.78449E+00 9.52619E+00 7.17708E-01 2.14953E+00 1.00000E-02 GW 151 1 1.28722E+01 4.47423E-01 2.41615E+00 1.28795E+01 4.46618E-01 2.77409E+00 1.00000E-02 GW 152 1 2.01673E+00 8.83203E-01 2.48757E+00 6.30228E-01 6.30859E-01 2.29931E+00 1.00000E-02 GW 153 1 3.21862E+00 8.83203E-01 2.57677E+00 3.21778E+00 8.83203E-01 1.87512E+00 1.00000E-02 GW 154 1 2.01673E+00 8.83203E-01 1.85671E+00 2.01673E+00 8.83203E-01 2.48757E+00 1.00000E-02 GW 155 1 6.30227E+00 8.83203E-01 2.80563E+00 6.30227E+00 8.83203E-01 1.92243E+00 1.00000E-02 GW 156 1 4.15950E+00 8.83203E-01 1.88957E+00 4.16009E+00 8.12425E-01 2.80627E+00 1.00000E-02 GW 157 1 5.42575E+00 8.83203E-01 1.90898E+00 5.42580E+00 8.44875E-01 2.80628E+00 1.00000E-02 GW 158 1 0.00000E+00 1.26172E-01 2.01875E+00 7.57031E-01 1.89258E-01 2.77578E+00 1.00000E-02 GW 159 1 6.30228E-01 6.30859E-01 2.29931E+00 7.57031E-01 1.89258E-01 2.77578E+00 1.00000E-02 GW 160 1 7.69637E+00 8.11639E-01 2.79649E+00 7.69912E+00 8.11498E-01 2.02082E+00 1.00000E-02 GW 161 1 4.15950E+00 8.83203E-01 1.88957E+00 5.42575E+00 8.83203E-01 1.90898E+00 1.00000E-02 GW 162 1 5.42539E+00 3.78515E-01 1.26172E+00 4.16367E+00 3.78515E-01 1.26172E+00 1.00000E-02 GW 163 1 4.16367E+00 3.78515E-01 1.26172E+00 4.15950E+00 8.83203E-01 1.88957E+00 1.00000E-02 GW 164 1 7.57031E-01 1.26172E-01 1.51406E+00 0.00000E+00 1.26172E-01 2.01875E+00 1.00000E-02 GW 165 1 3.40664E+00 3.78515E-01 1.26172E+00 3.21778E+00 8.83203E-01 1.87512E+00 1.00000E-02 GW 166 1 2.01673E+00 8.83203E-01 1.85671E+00 2.08183E+00 2.52344E-01 1.38789E+00 1.00000E-02 GW 167 1 7.57031E-01 1.26172E-01 1.51406E+00 6.30228E-01 6.30859E-01 1.92080E+00 1.00000E-02 GW 168 1 3.40664E+00 3.78515E-01 1.26172E+00 2.08183E+00 2.52344E-01 1.38789E+00 1.00000E-02 GW 169 1 3.40664E+00 3.78515E-01 1.26172E+00 4.16367E+00 3.78515E-01 1.26172E+00 1.00000E-02 GW 170 1 2.08183E+00 2.52344E-01 1.38789E+00 7.57031E-01 1.26172E-01 1.51406E+00 1.00000E-02 GW 171 1 6.30228E-01 6.30859E-01 2.29931E+00 6.30228E-01 6.30859E-01 1.92080E+00 1.00000E-02 GW 172 1 6.30228E-01 6.30859E-01 1.92080E+00 0.00000E+00 1.26172E-01 2.01875E+00 1.00000E-02 GW 173 1 6.30228E-01 6.30859E-01 1.92080E+00 2.01673E+00 8.83203E-01 1.85671E+00 1.00000E-02 GW 174 1 3.21778E+00 8.83203E-01 1.87512E+00 2.01673E+00 8.83203E-01 1.85671E+00 1.00000E-02 GW 175 1 3.21778E+00 8.83203E-01 1.87512E+00 4.15950E+00 8.83203E-01 1.88957E+00 1.00000E-02 GW 176 1 0.00000E+00 1.26172E-01 2.01875E+00 6.30228E-01 6.30859E-01 2.29931E+00 1.00000E-02 GW 177 1 7.69912E+00 8.11498E-01 2.02082E+00 7.69703E+00 3.05237E-01 1.51819E+00 1.00000E-02 GW 178 1 6.30906E+00 3.50010E-01 1.36149E+00 6.30227E+00 8.83203E-01 1.92243E+00 1.00000E-02 GW 179 1 5.42575E+00 8.83203E-01 1.90898E+00 5.42539E+00 3.78515E-01 1.26172E+00 1.00000E-02 GW 180 1 7.69703E+00 3.05237E-01 1.51819E+00 9.52806E+00 2.46171E-01 1.72492E+00 1.00000E-02 GW 181 1 5.42539E+00 3.78515E-01 1.26172E+00 6.30906E+00 3.50010E-01 1.36149E+00 1.00000E-02 GW 182 1 7.69703E+00 3.05237E-01 1.51819E+00 6.30906E+00 3.50010E-01 1.36149E+00 1.00000E-02 GW 183 1 7.69703E+00 3.05237E-01 1.51819E+00 7.69703E+00 7.00000E-06 1.51819E+00 1.00000E-02 GW 184 1 1.12345E+01 1.91124E-01 1.91759E+00 1.12180E+01 6.30859E-01 2.26871E+00 1.00000E-02 GW 185 1 1.12345E+01 1.91124E-01 1.91759E+00 1.28473E+01 1.39100E-01 2.09967E+00 1.00000E-02 GW 186 1 9.52619E+00 7.17708E-01 2.14953E+00 9.52806E+00 2.46171E-01 1.72492E+00 1.00000E-02 GW 187 1 6.30227E+00 8.83203E-01 1.92243E+00 7.69912E+00 8.11498E-01 2.02082E+00 1.00000E-02 GW 188 1 1.12345E+01 1.91124E-01 1.91759E+00 9.52806E+00 2.46171E-01 1.72492E+00 1.00000E-02 GW 189 1 6.30227E+00 8.83203E-01 1.92243E+00 5.42575E+00 8.83203E-01 1.90898E+00 1.00000E-02 GW 190 1 9.52619E+00 7.17708E-01 2.14953E+00 1.12180E+01 6.30859E-01 2.26871E+00 1.00000E-02 GW 191 1 7.69912E+00 8.11498E-01 2.02082E+00 9.52619E+00 7.17708E-01 2.14953E+00 1.00000E-02 GW 192 1 1.28473E+01 1.39100E-01 2.09967E+00 1.28722E+01 4.47423E-01 2.41615E+00 1.00000E-02 GW 193 1 1.28722E+01 4.47423E-01 2.41615E+00 1.12180E+01 6.30859E-01 2.26871E+00 1.00000E-02 GW 194 1 5.42155E+00 3.78515E-01 3.60546E+00 4.16367E+00 3.78515E-01 3.78515E+00 1.00000E-02 GW 195 1 5.42580E+00 8.44875E-01 2.80628E+00 4.16009E+00 8.12425E-01 2.80627E+00 1.00000E-02 GW 196 1 5.41486E+00 3.08670E+00 2.80627E+00 4.16009E+00 8.12425E-01 2.80627E+00 1.00000E-02 GW 197 1 4.16009E+00 8.12425E-01 2.80627E+00 4.16367E+00 3.78515E-01 3.78515E+00 1.00000E-02 GW 198 1 1.76641E+00 2.52344E-01 3.02812E+00 2.77578E+00 3.15430E-01 3.65898E+00 1.00000E-02 GW 199 1 7.57031E-01 1.89258E-01 2.77578E+00 1.76641E+00 2.52344E-01 3.02812E+00 1.00000E-02 GW 200 1 2.01673E+00 8.83203E-01 2.48757E+00 1.76641E+00 2.52344E-01 3.02812E+00 1.00000E-02 GW 201 1 3.21862E+00 8.83203E-01 2.57677E+00 4.16009E+00 8.12425E-01 2.80627E+00 1.00000E-02 GW 202 1 2.01673E+00 8.83203E-01 2.48757E+00 3.21862E+00 8.83203E-01 2.57677E+00 1.00000E-02 GW 203 1 4.16367E+00 3.78515E-01 3.78515E+00 2.77578E+00 3.15430E-01 3.65898E+00 1.00000E-02 GW 204 1 6.30227E+00 8.83203E-01 2.80563E+00 6.30472E+00 3.78515E-01 3.47929E+00 1.00000E-02 GW 205 1 5.42580E+00 8.44875E-01 2.80628E+00 5.42155E+00 3.78515E-01 3.60546E+00 1.00000E-02 GW 206 1 7.69648E+00 3.78515E-01 3.28047E+00 6.30472E+00 3.78515E-01 3.47929E+00 1.00000E-02 GW 207 1 1.28795E+01 4.46618E-01 2.77409E+00 1.28670E+01 1.66028E-01 2.99715E+00 1.00000E-02 GW 208 1 9.52535E+00 3.03356E-01 3.18025E+00 9.52599E+00 7.17719E-01 2.78449E+00 1.00000E-02 GW 209 1 1.12180E+01 6.30859E-01 2.77339E+00 1.12287E+01 2.33354E-01 3.08692E+00 1.00000E-02 GW 210 1 7.69637E+00 8.11639E-01 2.79649E+00 7.69648E+00 3.78515E-01 3.28047E+00 1.00000E-02 GW 211 1 1.12180E+01 6.30859E-01 2.77339E+00 9.52599E+00 7.17719E-01 2.78449E+00 1.00000E-02 GW 212 1 7.67607E+00 4.66893E+00 2.80627E+00 7.67558E+00 7.18425E+00 2.80627E+00 1.00000E-02 GW 213 1 7.67558E+00 7.18425E+00 2.80627E+00 6.28484E+00 4.66354E+00 2.80627E+00 1.00000E-02 GW 214 1 9.06729E+00 4.67431E+00 2.80627E+00 9.05992E+00 7.19190E+00 2.80627E+00 1.00000E-02 GW 215 1 9.53716E+00 7.19454E+00 2.80627E+00 9.06729E+00 4.67431E+00 2.80627E+00 1.00000E-02 GW 216 1 7.69180E+00 3.08542E+00 2.80627E+00 6.28996E+00 3.08621E+00 2.80627E+00 1.00000E-02 GW 217 1 6.30227E+00 8.83203E-01 2.80563E+00 7.69637E+00 8.11639E-01 2.79649E+00 1.00000E-02 GW 218 1 6.28484E+00 4.66354E+00 2.80627E+00 7.67607E+00 4.66893E+00 2.80627E+00 1.00000E-02 GW 219 1 5.42580E+00 8.44875E-01 2.80628E+00 5.41486E+00 3.08670E+00 2.80627E+00 1.00000E-02 GW 220 1 6.30227E+00 8.83203E-01 2.80563E+00 6.28996E+00 3.08621E+00 2.80627E+00 1.00000E-02 GW 221 1 6.30227E+00 8.83203E-01 2.80563E+00 5.42580E+00 8.44875E-01 2.80628E+00 1.00000E-02 GW 222 1 6.28996E+00 3.08621E+00 2.80627E+00 5.41486E+00 3.08670E+00 2.80627E+00 1.00000E-02 GW 223 1 6.28484E+00 4.66354E+00 2.80627E+00 5.41486E+00 3.08670E+00 2.80627E+00 1.00000E-02 GW 224 1 6.28996E+00 3.08621E+00 2.80627E+00 6.28484E+00 4.66354E+00 2.80627E+00 1.00000E-02 GW 225 1 7.69180E+00 3.08542E+00 2.80627E+00 7.69637E+00 8.11639E-01 2.79649E+00 1.00000E-02 GW 226 1 8.77094E+00 3.08481E+00 2.80627E+00 8.34240E+00 7.86238E-01 2.80627E+00 1.00000E-02 GW 227 1 8.34240E+00 7.86238E-01 2.80627E+00 9.52599E+00 7.17719E-01 2.78449E+00 1.00000E-02 GW 228 1 8.34240E+00 7.86238E-01 2.80627E+00 7.69637E+00 8.11639E-01 2.79649E+00 1.00000E-02 GW 229 1 7.67607E+00 4.66893E+00 2.80627E+00 9.06729E+00 4.67431E+00 2.80627E+00 1.00000E-02 GW 230 1 7.69180E+00 3.08542E+00 2.80627E+00 7.67607E+00 4.66893E+00 2.80627E+00 1.00000E-02 GW 231 1 9.06729E+00 4.67431E+00 2.80627E+00 8.77094E+00 3.08481E+00 2.80627E+00 1.00000E-02 GW 232 1 7.69180E+00 3.08542E+00 2.80627E+00 8.77094E+00 3.08481E+00 2.80627E+00 1.00000E-02 GW 233 1 9.05992E+00 7.19190E+00 2.80627E+00 9.53716E+00 7.19454E+00 2.80627E+00 1.00000E-02 GW 234 1 9.05718E+00 8.13039E+00 2.80627E+00 9.71165E+00 8.13039E+00 2.80627E+00 1.00000E-02 GW 235 1 8.19758E+00 8.13039E+00 2.80627E+00 9.05718E+00 8.13039E+00 2.80627E+00 1.00000E-02 GW 236 1 9.05992E+00 7.19190E+00 2.80627E+00 9.05718E+00 8.13039E+00 2.80627E+00 1.00000E-02 GW 237 1 8.19758E+00 8.13039E+00 2.80627E+00 7.67558E+00 7.18425E+00 2.80627E+00 1.00000E-02 GW 238 1 7.67558E+00 7.18425E+00 2.80627E+00 9.05992E+00 7.19190E+00 2.80627E+00 1.00000E-02 GW 239 1 9.71165E+00 8.13039E+00 2.80627E+00 9.53716E+00 7.19454E+00 2.80627E+00 1.00000E-02 GW 240 1 1.28795E+01 4.46618E-01 2.77409E+00 1.36790E+01 1.64590E+00 2.77409E+00 1.00000E-02 GW 241 1 1.40537E+01 3.16406E-01 2.77458E+00 1.28795E+01 4.46618E-01 2.77409E+00 1.00000E-02 GW 242 1 1.12180E+01 6.30859E-01 2.77339E+00 1.28795E+01 4.46618E-01 2.77409E+00 1.00000E-02 GW 243 1 1.36790E+01 1.64590E+00 2.77409E+00 1.46459E+01 3.09623E+00 2.77409E+00 1.00000E-02 GW 244 1 1.46459E+01 3.09623E+00 2.77409E+00 1.43611E+01 1.64810E+00 2.77428E+00 1.00000E-02 GW 245 1 1.53508E+01 1.65128E+00 2.77454E+00 1.56553E+01 3.09623E+00 2.77409E+00 1.00000E-02 GW 246 1 1.40537E+01 3.16406E-01 2.77458E+00 1.50463E+01 2.06341E-01 2.77500E+00 1.00000E-02 GW 247 1 1.53508E+01 1.65128E+00 2.77454E+00 1.43611E+01 1.64810E+00 2.77428E+00 1.00000E-02 GW 248 1 1.43611E+01 1.64810E+00 2.77428E+00 1.40537E+01 3.16406E-01 2.77458E+00 1.00000E-02 GW 249 1 1.43611E+01 1.64810E+00 2.77428E+00 1.36790E+01 1.64590E+00 2.77409E+00 1.00000E-02 GW 250 1 1.53508E+01 1.65128E+00 2.77454E+00 1.50463E+01 2.06340E-01 2.77500E+00 1.00000E-02 GW 251 1 1.46459E+01 3.09623E+00 2.77409E+00 1.56553E+01 3.09623E+00 2.77409E+00 1.00000E-02 GW 252 1 1.12287E+01 2.33354E-01 3.08692E+00 9.52535E+00 3.03356E-01 3.18025E+00 1.00000E-02 GW 253 1 9.52535E+00 3.03360E-01 3.18025E+00 7.69648E+00 3.78510E-01 3.28047E+00 1.00000E-02 GW 254 1 1.12287E+01 2.33354E-01 3.08692E+00 1.28670E+01 1.66028E-01 2.99715E+00 1.00000E-02 GW 255 1 6.30472E+00 3.78515E-01 3.47929E+00 5.42155E+00 3.78515E-01 3.60546E+00 1.00000E-02 GW 256 16 1.69070E+01 0.00000E+00 2.77578E+00 2.70000E+01 0.00000E+00 2.77578E+00 1.00000E-02 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 -1.35000E+01 0.00000E+00 -2.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 11 0 0 5.00000E+00 5.00000E-01 1.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 256 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 0 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/buoy.nec000066400000000000000000000023301257141547200160330ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Short vertical antenna over sea as ground (buoy) CM Base loaded for resonance around 13.75 MHz CE --- End Comments --- GW 1 6 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 2.20000E+00 2.00000E-02 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 11 0 0 1.00000E+01 5.00000E-01 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 0 1 1 1 0.00000E+00 3.85000E-06 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 2 0 0 0 8.00000E+01 4.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 16 1 8 -7.50000E+00 0.00000E+00 5.00000E-01 1.00000E+00 1.00000E+00 1.00000E+00 NH 0 16 1 8 -7.50000E+00 0.00000E+00 5.00000E-01 1.00000E+00 1.00000E+00 1.00000E+00 RP 0 19 37 1000 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/conductivity.txt000066400000000000000000000010331257141547200176520ustar00rootroot00000000000000 |------------------------------------------------| | Material | Ohm.m @ 20 °C | S/m @ 20 °C | |------------------------------------------------| | Silver | 1.59×10^-8 | 6.30×10^7 | | Copper | 1.68×10^-8 | 5.96×10^7 | | Gold | 2.44×10^-8 | 4.10×10^7 | | Aluminium | 2.82×10^-8 | 3.5×10^7 | | Iron | 1.00×10^-7 | 1.00×10^7 | | Titanium | 4.20×10^-7 | 2.38×10^6 | | Stainless Steel | 6.9×10^-7 | 1.45×10^6 | | Sea water | 2×10^-1 | 4.8 | |------------------------------------------------| xnec2c-3.4/examples/gray_hoverman.nec000066400000000000000000000034261257141547200177250ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM Gray-Hoverman - Patch Reflector CE --- End Comments --- GW 1 15 2.76500E-01 0.00000E+00 4.03500E-01 1.34500E-01 0.00000E+00 4.03500E-01 2.50000E-03 GW 2 20 1.34500E-01 0.00000E+00 4.03500E-01 0.00000E+00 0.00000E+00 2.69000E-01 2.50000E-03 GW 3 20 0.00000E+00 0.00000E+00 2.69000E-01 1.34500E-01 0.00000E+00 1.34500E-01 2.50000E-03 GW 4 20 1.34500E-01 0.00000E+00 1.34500E-01 0.00000E+00 0.00000E+00 0.00000E+00 2.50000E-03 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 4.00000E-03 0.00000E+00 0.00000E+00 1.00000E+00 GM 8 1 0.00000E+00 0.00000E+00 1.80000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GM 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E-01 0.00000E+00 1.00000E+00 GX 4 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GW 20 1 4.00000E-03 1.00000E-01 0.00000E+00 -4.00000E-03 1.00000E-01 0.00000E+00 2.50000E-03 SM 16 16 4.00000E-01 0.00000E+00 5.00000E-01 4.00000E-01 0.00000E+00 -5.00000E-01 0.00000E+00 SC 0 0 -4.00000E-01 0.00000E+00 -5.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 20 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 26 0 0 3.00000E+02 2.00000E+01 8.00000E+02 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 38 73 0 0.00000E+00 0.00000E+00 5.00000E+00 5.00000E+00 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/ground.txt000066400000000000000000000017101257141547200164260ustar00rootroot00000000000000 Typical values for selected ground types are given below. Typical good ground is low hills with un-forested rich soil or flat wet coastal regions; fair ground is medium hills or forested heavy soil; and typical poor ground includes rocky steep hills, sandy dry coastal regions, and city industrial areas. |-------------------------------------------------------------| | Ground type | Conductivity mhos/m3 | Dielectric Const | | ------------------------------------------------------------| | Very Dry | .0001 | 3 | | Medium Dry | .001 | 15 | | Good Ground | .01 | 10 | | Wet Ground | .01 | 30 | | Poor Ground | .001 | 4 | | Sea Ice | .001 | 4 | | Polar Ice Cap | .0001 | 1 | | Fresh Water | .002 | 80 | | Sea Water | 5.0 | 80 | |-------------------------------------------------------------| xnec2c-3.4/examples/k9ay_5b4az.nec000066400000000000000000000040601257141547200167410ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM K9AY directional small receiving loop 1.8-4.0 MHz. CM By connecting two adjacent feed points in parallel, CM the radiation pattern can be rotated 45 degrees so CM that the antenna can cover eight directions. CE --- End Comments --- GW 1 8 0.00000E+00 0.00000E+00 8.50000E+00 5.00000E+00 0.00000E+00 1.50000E+00 1.50000E-03 GW 2 8 0.00000E+00 0.00000E+00 8.50000E+00 -5.00000E+00 0.00000E+00 1.50000E+00 1.50000E-03 GW 3 5 0.00000E+00 0.00000E+00 0.00000E+00 5.00000E+00 0.00000E+00 1.50000E+00 1.50000E-03 GW 4 5 0.00000E+00 0.00000E+00 0.00000E+00 -5.00000E+00 0.00000E+00 1.50000E+00 1.50000E-03 GW 5 8 0.00000E+00 0.00000E+00 8.60000E+00 0.00000E+00 5.00000E+00 1.60000E+00 1.50000E-03 GW 6 8 0.00000E+00 0.00000E+00 8.60000E+00 0.00000E+00 -5.00000E+00 1.60000E+00 1.50000E-03 GW 7 5 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 5.00000E+00 1.60000E+00 1.50000E-03 GW 8 5 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -5.00000E+00 1.60000E+00 1.50000E-03 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 4 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 7 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 4 3 1 1 5.60000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 4 8 1 1 5.60000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 2 0 0 0 1.20000E+01 1.00000E-02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 23 0 0 1.80000E+00 1.00000E-01 4.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 0 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/k9ay_orig.nec000066400000000000000000000022541257141547200167570ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM K9AY directional small receiving loop 1.8-4.0 MHz CE --- End Comments --- GW 1 8 0.00000E+00 0.00000E+00 8.50000E+00 5.00000E+00 0.00000E+00 1.50000E+00 1.50000E-03 GW 2 5 0.00000E+00 0.00000E+00 0.00000E+00 5.00000E+00 0.00000E+00 1.50000E+00 1.50000E-03 GX 2 100 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GE 1 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 4 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 LD 4 2 1 1 4.70000E+02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 GN 2 0 0 0 1.20000E+01 1.00000E-02 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 13 0 0 1.80000E+00 5.00000E-01 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 RP 0 19 37 0 0.00000E+00 0.00000E+00 5.00000E+00 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/examples/satellite.nec000066400000000000000000000041221257141547200170440ustar00rootroot00000000000000CM --- NEC2 Input File created or edited by xnec2c 3.2 --- CM CYLINDER WITH ATTACHED WIRES CE --- End Comments --- SP 0 0 1.00000E-01 0.00000E+00 7.33300E-02 0.00000E+00 0.00000E+00 3.84000E-03 0.00000E+00 SP 0 0 1.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 3.84000E-03 0.00000E+00 SP 0 0 1.00000E-01 0.00000E+00 -7.33300E-02 0.00000E+00 0.00000E+00 3.84000E-03 0.00000E+00 GM 0 1 0.00000E+00 0.00000E+00 3.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 SP 0 0 6.89000E-02 0.00000E+00 1.10000E-01 9.00000E+01 0.00000E+00 4.48800E-03 0.00000E+00 SP 0 0 6.89000E-02 0.00000E+00 -1.10000E-01 -9.00000E+01 0.00000E+00 4.48800E-03 0.00000E+00 GR 0 6 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 SP 0 0 0.00000E+00 0.00000E+00 1.10000E-01 9.00000E+01 0.00000E+00 4.48900E-03 0.00000E+00 SP 0 0 0.00000E+00 0.00000E+00 -1.10000E-01 9.00000E+01 0.00000E+00 4.48900E-03 0.00000E+00 GW 1 11 0.00000E+00 0.00000E+00 1.10000E-01 0.00000E+00 0.00000E+00 2.60000E-01 2.00000E-03 GW 2 11 1.00000E-01 0.00000E+00 0.00000E+00 2.36000E-01 0.00000E+00 0.00000E+00 2.00000E-03 GE 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 FR 0 26 0 0 4.20000E+02 2.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 2 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 EX 0 1 1 0 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NH 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 NE 0 1 20 20 0.00000E+00 -9.50000E-01 -9.50000E-01 0.00000E+00 1.00000E-01 1.00000E-01 RP 0 19 37 1000 0.00000E+00 0.00000E+00 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 EN 0 0 0 0 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 xnec2c-3.4/install-sh000077500000000000000000000345231257141547200145650ustar00rootroot00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2013-12-25.23; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: xnec2c-3.4/intltool-extract.in000066400000000000000000000000001257141547200164040ustar00rootroot00000000000000xnec2c-3.4/intltool-merge.in000066400000000000000000000000001257141547200160310ustar00rootroot00000000000000xnec2c-3.4/intltool-update.in000066400000000000000000000000001257141547200162140ustar00rootroot00000000000000xnec2c-3.4/missing000077500000000000000000000153301257141547200141530ustar00rootroot00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # 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, 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, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: xnec2c-3.4/po/000077500000000000000000000000001257141547200131705ustar00rootroot00000000000000xnec2c-3.4/po/ChangeLog000066400000000000000000000000001257141547200147300ustar00rootroot00000000000000xnec2c-3.4/po/LINGUAS000066400000000000000000000000001257141547200142030ustar00rootroot00000000000000xnec2c-3.4/po/Makefile.in.in000066400000000000000000000157561257141547200156600ustar00rootroot00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # Copyright (C) 2004-2008 Rodney Dawes # # This file may be copied and used freely without restrictions. It may # be used in projects which are not available under a GNU Public License, # but which still want to provide support for the GNU gettext functionality. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize # # - Modified by Rodney Dawes for use with intltool # # We have the following line for use by intltoolize: # INTLTOOL_MAKEFILE GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ libdir = @libdir@ localedir = @localedir@ subdir = po install_sh = @install_sh@ # Automake >= 1.8 provides @mkdir_p@. # Until it can be supposed, use the safe fallback: mkdir_p = $(install_sh) -d INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ MSGMERGE = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist GENPOT = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot ALL_LINGUAS = @ALL_LINGUAS@ PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi) USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi) USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) DISTFILES = Makefile.in.in POTFILES.in $(POFILES) EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS POTFILES = \ # This comment gets stripped out CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) .SUFFIXES: .SUFFIXES: .po .pox .gmo .mo .msg .cat AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ INTLTOOL_V_MSGFMT = $(INTLTOOL__v_MSGFMT_$(V)) INTLTOOL__v_MSGFMT_= $(INTLTOOL__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) INTLTOOL__v_MSGFMT_0 = @echo " MSGFMT" $@; .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $* $(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(INTLTOOL_V_MSGFMT)$(MSGFMT) -o $@ $< .po.gmo: $(INTLTOOL_V_MSGFMT)file=`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && gencat $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(GETTEXT_PACKAGE).pot: $(POTFILES) $(GENPOT) install: install-data install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ dir=$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $$dir; \ if test -r $$lang.gmo; then \ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ else \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $(srcdir)/$$lang.gmo as" \ "$$dir/$(GETTEXT_PACKAGE).mo"; \ fi; \ if test -r $$lang.gmo.m; then \ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ if test -r $(srcdir)/$$lang.gmo.m ; then \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $(srcdir)/$$lang.gmo.m as" \ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ true; \ fi; \ fi; \ done # Empty stubs to satisfy archaic automake needs dvi info ctags tags CTAGS TAGS ID: # Define this as empty until I found a useful application. install-exec installcheck: uninstall: linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ done check: all $(GETTEXT_PACKAGE).pot rm -f missing notexist srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m if [ -r missing -o -r notexist ]; then \ exit 1; \ fi mostlyclean: rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp rm -f .intltool-merge-cache clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES stamp-it rm -f *.mo *.msg *.cat *.cat.m *.gmo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f Makefile.in.in distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ extra_dists="$(EXTRA_DISTFILES)"; \ for file in $$extra_dists; do \ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ done; \ for file in $$dists; do \ test -f $$file || file="$(srcdir)/$$file"; \ ln $$file $(distdir) 2> /dev/null \ || cp -p $$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ echo "$$lang:"; \ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ if $$result; then \ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.gmo failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done Makefile POTFILES: stamp-it @if test ! -f $@; then \ rm -f stamp-it; \ $(MAKE) stamp-it; \ fi stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xnec2c-3.4/po/POTFILES.in000066400000000000000000000005211257141547200147430ustar00rootroot00000000000000# List of source files containing translatable strings. src/main.c src/interface.c src/calculations.c src/callback_func.c src/callbacks.c src/cmnd_edit.c src/draw_radiation.c src/geom_edit.c src/geometry.c src/ground.c src/matrix.c src/misc.c src/nec2_model.c src/plot_freqdata.c src/radiation.c src/support.c src/xnec2c.c xnec2c.glade xnec2c-3.4/src/000077500000000000000000000000001257141547200133415ustar00rootroot00000000000000xnec2c-3.4/src/Makefile.am000066400000000000000000000023161257141547200153770ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in #AM_LDFLAGS = -Wl,--as-needed, -z,relro, -z,now AM_CFLAGS = --pedantic -Wall -std=gnu99 -O2 -D_FORTIFY_SOURCE=2 \ -fstack-protector -Wformat -Werror=format-security -fpie AM_CPPFLAGS = \ -DPROGRAMNAME_LOCALEDIR=\""$(PROGRAMNAME_LOCALEDIR)"\" \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ @PACKAGE_CFLAGS@ bin_PROGRAMS = xnec2c xnec2c_SOURCES = \ main.c main.h \ support.c support.h \ interface.c interface.h \ callbacks.c callbacks.h \ callback_func.c callback_func.h \ calculations.c calculations.h \ cmnd_edit.c cmnd_edit.h \ geom_edit.c geom_edit.h \ gnuplot.c gnuplot.h \ draw.c draw.h \ draw_structure.c draw_structure.h \ draw_radiation.c draw_radiation.h \ fields.c fields.h \ fork.c fork.h \ geometry.c geometry.h \ ground.c ground.h \ xnec2c.c xnec2c.h \ input.c input.h \ matrix.c matrix.h \ utils.c utils.h \ nec2_model.c nec2_model.h \ network.c network.h \ plot_freqdata.c plot_freqdata.h \ radiation.c radiation.h \ shared.c shared.h \ somnec.c somnec.h \ common.h editors.h xnec2c_LDADD = @PACKAGE_LIBS@ $(INTLLIBS) xnec2c-3.4/src/Makefile.in000066400000000000000000000525021257141547200154120ustar00rootroot00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ #AM_LDFLAGS = -Wl,--as-needed, -z,relro, -z,now VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = xnec2c$(EXEEXT) subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_xnec2c_OBJECTS = main.$(OBJEXT) support.$(OBJEXT) \ interface.$(OBJEXT) callbacks.$(OBJEXT) \ callback_func.$(OBJEXT) calculations.$(OBJEXT) \ cmnd_edit.$(OBJEXT) geom_edit.$(OBJEXT) gnuplot.$(OBJEXT) \ draw.$(OBJEXT) draw_structure.$(OBJEXT) \ draw_radiation.$(OBJEXT) fields.$(OBJEXT) fork.$(OBJEXT) \ geometry.$(OBJEXT) ground.$(OBJEXT) xnec2c.$(OBJEXT) \ input.$(OBJEXT) matrix.$(OBJEXT) utils.$(OBJEXT) \ nec2_model.$(OBJEXT) network.$(OBJEXT) plot_freqdata.$(OBJEXT) \ radiation.$(OBJEXT) shared.$(OBJEXT) somnec.$(OBJEXT) xnec2c_OBJECTS = $(am_xnec2c_OBJECTS) am__DEPENDENCIES_1 = xnec2c_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(xnec2c_SOURCES) DIST_SOURCES = $(xnec2c_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_CFLAGS = @PACKAGE_CFLAGS@ PACKAGE_LIBS = @PACKAGE_LIBS@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ PROGRAMNAME_LOCALEDIR = @PROGRAMNAME_LOCALEDIR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = @XGETTEXT@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = --pedantic -Wall -std=gnu99 -O2 -D_FORTIFY_SOURCE=2 \ -fstack-protector -Wformat -Werror=format-security -fpie AM_CPPFLAGS = \ -DPROGRAMNAME_LOCALEDIR=\""$(PROGRAMNAME_LOCALEDIR)"\" \ -DPACKAGE_DATA_DIR=\""$(datadir)"\" \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ @PACKAGE_CFLAGS@ xnec2c_SOURCES = \ main.c main.h \ support.c support.h \ interface.c interface.h \ callbacks.c callbacks.h \ callback_func.c callback_func.h \ calculations.c calculations.h \ cmnd_edit.c cmnd_edit.h \ geom_edit.c geom_edit.h \ gnuplot.c gnuplot.h \ draw.c draw.h \ draw_structure.c draw_structure.h \ draw_radiation.c draw_radiation.h \ fields.c fields.h \ fork.c fork.h \ geometry.c geometry.h \ ground.c ground.h \ xnec2c.c xnec2c.h \ input.c input.h \ matrix.c matrix.h \ utils.c utils.h \ nec2_model.c nec2_model.h \ network.c network.h \ plot_freqdata.c plot_freqdata.h \ radiation.c radiation.h \ shared.c shared.h \ somnec.c somnec.h \ common.h editors.h xnec2c_LDADD = @PACKAGE_LIBS@ $(INTLLIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) xnec2c$(EXEEXT): $(xnec2c_OBJECTS) $(xnec2c_DEPENDENCIES) $(EXTRA_xnec2c_DEPENDENCIES) @rm -f xnec2c$(EXEEXT) $(AM_V_CCLD)$(LINK) $(xnec2c_OBJECTS) $(xnec2c_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calculations.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callback_func.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmnd_edit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/draw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/draw_radiation.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/draw_structure.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fields.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fork.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geom_edit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/geometry.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gnuplot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ground.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interface.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/matrix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nec2_model.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/network.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plot_freqdata.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/radiation.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shared.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/somnec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/support.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xnec2c.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: xnec2c-3.4/src/calculations.c000066400000000000000000000737731257141547200162070ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /******* Translated to the C language by N. Kyriazis 20 Aug 2003 ****** * * Program NEC(input,tape5=input,output,tape11,tape12,tape13,tape14, * tape15,tape16,tape20,tape21) * * Numerical Electromagnetics Code (NEC2) developed at Lawrence * Livermore lab., Livermore, CA. (contact G. Burke at 415-422-8414 * for problems with the NEC code. For problems with the vax implem- * entation, contact J. Breakall at 415-422-8196 or E. Domning at 415 * 422-5936) * file created 4/11/80 * * ***********Notice********** * This computer code material was prepared as an account of work * sponsored by the United States government. Neither the United * States nor the United States Department Of Energy, nor any of * their employees, nor any of their contractors, subcontractors, * or their employees, makes any warranty, express or implied, or * assumes any legal liability or responsibility for the accuracy, * completeness or usefulness of any information, apparatus, product * or process disclosed, or represents that its use would not infringe * privately-owned rights. * ***********************************************************************/ #include "calculations.h" #include "shared.h" /*-------------------------------------------------------------------*/ /* fill incident field array for charge discontinuity voltage source */ void qdsrc( int is, complex double v, complex double *e ) { int i, jx, j, jp1, ipr, ij, i1; double xi, yi, zi, ai, cabi, sabi, salpi, tx, ty, tz; complex double curd, etk, ets, etc; is--; i= data.icon1[is]; data.icon1[is]=0; tbf( is+1,0); data.icon1[is]= i; dataj.s= data.si[is]*.5; curd= CCJ* v/(( log(2.0 * dataj.s/ data.bi[is])-1.0) * ( segj.bx[segj.jsno-1] * cos( TP* dataj.s) + segj.cx[segj.jsno-1] * sin( TP* dataj.s))* data.wlam); vsorc.vqds[vsorc.nqds]= v; vsorc.iqds[vsorc.nqds]= is+1; vsorc.nqds++; for( jx = 0; jx < segj.jsno; jx++ ) { j= segj.jco[jx]-1; jp1 = j+1; dataj.s= data.si[j]; dataj.b= data.bi[j]; dataj.xj= data.x[j]; dataj.yj= data.y[j]; dataj.zj= data.z[j]; dataj.cabj= data.cab[j]; dataj.sabj= data.sab[j]; dataj.salpj= data.salp[j]; if( dataj.iexk != 0) { ipr= data.icon1[j]; if (ipr > PCHCON) dataj.ind1=2; else if( ipr < 0 ) { ipr= -ipr; ipr--; if( -data.icon1[ipr-1] != jp1 ) dataj.ind1=2; else { xi= fabs( dataj.cabj* data.cab[ipr]+ dataj.sabj* data.sab[ipr]+ dataj.salpj* data.salp[ipr]); if( (xi < 0.999999) || (fabs(data.bi[ipr]/dataj.b-1.0) > 1.0e-6) ) dataj.ind1=2; else dataj.ind1=0; } } /* if( ipr < 0 ) */ else if( ipr == 0 ) dataj.ind1=1; else /* ipr > 0 */ { ipr--; if( ipr != j ) { if( data.icon2[ipr] != jp1) dataj.ind1=2; else { xi= fabs( dataj.cabj* data.cab[ipr]+ dataj.sabj* data.sab[ipr]+ dataj.salpj* data.salp[ipr]); if( (xi < 0.999999) || (fabs(data.bi[ipr]/dataj.b-1.0) > 1.0e-6) ) dataj.ind1=2; else dataj.ind1=0; } } /* if( ipr != j ) */ else { if( (dataj.cabj*dataj.cabj + dataj.sabj*dataj.sabj) > 1.0e-8) dataj.ind1=2; else dataj.ind1=0; } } /* else */ ipr= data.icon2[j]; if (ipr > PCHCON) dataj.ind2=2; else if( ipr < 0 ) { ipr = -ipr; ipr--; if( -data.icon2[ipr] != jp1 ) dataj.ind1=2; else { xi= fabs( dataj.cabj* data.cab[ipr]+ dataj.sabj * data.sab[ipr]+ dataj.salpj* data.salp[ipr]); if( (xi < 0.999999) || (fabs(data.bi[ipr]/dataj.b-1.0) > 1.0e-6) ) dataj.ind1=2; else dataj.ind1=0; } } /* if( ipr < 0 ) */ else if( ipr == 0 ) dataj.ind2=1; else /* ipr > 0 */ { ipr--; if( ipr != j ) { if( data.icon1[ipr] != jp1) dataj.ind2=2; else { xi= fabs( dataj.cabj* data.cab[ipr]+ dataj.sabj* data.sab[ipr]+ dataj.salpj* data.salp[ipr]); if( (xi < 0.9999990) || (fabs(data.bi[ipr]/dataj.b-1.0) > 1.0e-6) ) dataj.ind2=2; else dataj.ind2=0; } } /* if( ipr != j )*/ else { if( (dataj.cabj* dataj.cabj + dataj.sabj* dataj.sabj) > 1.0e-8) dataj.ind1=2; else dataj.ind1=0; } } /* else */ } /* if( dataj.iexk != 0) */ for( i = 0; i < data.n; i++ ) { ij= i- j; xi= data.x[i]; yi= data.y[i]; zi= data.z[i]; ai= data.bi[i]; efld( xi, yi, zi, ai, ij); cabi= data.cab[i]; sabi= data.sab[i]; salpi= data.salp[i]; etk= dataj.exk* cabi+ dataj.eyk* sabi+ dataj.ezk* salpi; ets= dataj.exs* cabi+ dataj.eys* sabi+ dataj.ezs* salpi; etc= dataj.exc* cabi+ dataj.eyc* sabi+ dataj.ezc* salpi; e[i]= e[i]-( etk* segj.ax[jx] + ets* segj.bx[jx]+ etc* segj.cx[jx])* curd; } if( data.m != 0) { i1= data.n-1; for( i = 0; i < data.m; i++ ) { xi= data.px[i]; yi= data.py[i]; zi= data.pz[i]; hsfld( xi, yi, zi, 0.0); i1++; tx= data.t2x[i]; ty= data.t2y[i]; tz= data.t2z[i]; etk= dataj.exk* tx+ dataj.eyk* ty+ dataj.ezk* tz; ets= dataj.exs* tx+ dataj.eys* ty+ dataj.ezs* tz; etc= dataj.exc* tx+ dataj.eyc* ty+ dataj.ezc* tz; e[i1] += ( etk* segj.ax[jx]+ ets* segj.bx[jx]+ etc* segj.cx[jx] )* curd* data.psalp[i]; i1++; tx= data.t1x[i]; ty= data.t1y[i]; tz= data.t1z[i]; etk= dataj.exk* tx+ dataj.eyk* ty+ dataj.ezk* tz; ets= dataj.exs* tx+ dataj.eys* ty+ dataj.ezs* tz; etc= dataj.exc* tx+ dataj.eyc* ty+ dataj.ezc* tz; e[i1] += ( etk* segj.ax[jx]+ ets* segj.bx[jx]+ etc* segj.cx[jx])* curd* data.psalp[i]; } } /* if( m != 0) */ if( zload.nload > 0 ) e[j] += zload.zarray[j]* curd*(segj.ax[jx]+ segj.cx[jx]); } /* for( jx = 0; jx < segj.jsno; jx++ ) */ return; } /*-----------------------------------------------------------------------*/ /* cabc computes coefficients of the constant (a), sine (b), and */ /* cosine (c) terms in the current interpolation functions for the */ /* current vector cur. */ void cabc( complex double *curx) { int i, is, j, jx, jco1, jco2; double ar, ai, sh; complex double curd, cs1, cs2; if( data.n != 0) { for( i = 0; i < data.n; i++ ) { crnt.air[i]=0.0; crnt.aii[i]=0.0; crnt.bir[i]=0.0; crnt.bii[i]=0.0; crnt.cir[i]=0.0; crnt.cii[i]=0.0; } for( i = 0; i < data.n; i++ ) { ar= creal( curx[i]); ai= cimag( curx[i]); tbf( i+1, 1 ); for( jx = 0; jx < segj.jsno; jx++ ) { j= segj.jco[jx]-1; crnt.air[j] += segj.ax[jx]* ar; crnt.aii[j] += segj.ax[jx]* ai; crnt.bir[j] += segj.bx[jx]* ar; crnt.bii[j] += segj.bx[jx]* ai; crnt.cir[j] += segj.cx[jx]* ar; crnt.cii[j] += segj.cx[jx]* ai; } } /* for( i = 0; i < n; i++ ) */ if( vsorc.nqds != 0) { for( is = 0; is < vsorc.nqds; is++ ) { i= vsorc.iqds[is]-1; jx= data.icon1[i]; data.icon1[i]=0; tbf(i+1,0); data.icon1[i]= jx; sh= data.si[i]*.5; curd= CCJ* vsorc.vqds[is]/( (log(2.0* sh/ data.bi[i])-1.0) * (segj.bx[segj.jsno-1]* cos(TP* sh)+ segj.cx[segj.jsno-1] * sin(TP* sh))* data.wlam ); ar= creal( curd); ai= cimag( curd); for( jx = 0; jx < segj.jsno; jx++ ) { j= segj.jco[jx]-1; crnt.air[j]= crnt.air[j]+ segj.ax[jx]* ar; crnt.aii[j]= crnt.aii[j]+ segj.ax[jx]* ai; crnt.bir[j]= crnt.bir[j]+ segj.bx[jx]* ar; crnt.bii[j]= crnt.bii[j]+ segj.bx[jx]* ai; crnt.cir[j]= crnt.cir[j]+ segj.cx[jx]* ar; crnt.cii[j]= crnt.cii[j]+ segj.cx[jx]* ai; } } /* for( is = 0; is < vsorc.nqds; is++ ) */ } /* if( vsorc.nqds != 0) */ for( i = 0; i < data.n; i++ ) curx[i]= cmplx( crnt.air[i]+crnt.cir[i], crnt.aii[i]+crnt.cii[i] ); } /* if( n != 0) */ if( data.m == 0) return; /* convert surface currents from */ /* t1,t2 components to x,y,z components */ jco1= data.np2m; jco2= jco1+ data.m; for( i = 1; i <= data.m; i++ ) { jco1 -= 2; jco2 -= 3; cs1= curx[jco1]; cs2= curx[jco1+1]; curx[jco2] = cs1* data.t1x[data.m-i]+ cs2* data.t2x[data.m-i]; curx[jco2+1]= cs1* data.t1y[data.m-i]+ cs2* data.t2y[data.m-i]; curx[jco2+2]= cs1* data.t1z[data.m-i]+ cs2* data.t2z[data.m-i]; } return; } /*-----------------------------------------------------------------------*/ /* function db10 returns db for magnitude (field) */ double db10( double x ) { if( x < 1.0e-20 ) return( -999.99 ); return( 10.0 * log10(x) ); } /*-----------------------------------------------------------------------*/ /* function db20 returns db for mag**2 (power) i */ double db20( double x ) { if( x < 1.0e-20 ) return( -999.99 ); return( 20.0 * log10(x) ); } /*-----------------------------------------------------------------------*/ /* intrp uses bivariate cubic interpolation to obtain */ /* the values of 4 functions at the point (x,y). */ void intrp( double x, double y, complex double *f1, complex double *f2, complex double *f3, complex double *f4 ) { static int ix, iy, ixs=-10, iys=-10, igrs=-10, ixeg=0, iyeg=0; static int nxm2, nym2, nxms, nyms, nd, ndp; static int *nda = NULL, *ndpa = NULL; int jump; static double dx = 1.0, dy = 1.0, xs = 0.0, ys = 0.0, xz, yz; double xx, yy; static complex double a[4][4], b[4][4], c[4][4], d[4][4]; complex double p1=CPLX_00, p2=CPLX_00, p3=CPLX_00, p4=CPLX_00; complex double fx1, fx2, fx3, fx4; static gboolean first_call = TRUE; if( first_call ) { first_call = FALSE; size_t mreq = 3*sizeof(int); mem_alloc( (void **)&nda, mreq, "in calculations.c"); mem_alloc( (void **)&ndpa, mreq, "in calculations.c"); nda[0] = 11; nda[1] = 17; nda[2] = 9; ndpa[0] = 110; ndpa[1] = 85; ndpa[2] = 72; } jump = FALSE; if( (x < xs) || (y < ys) ) jump = TRUE; else { ix= (int)(( x- xs)/ dx)+1; iy= (int)(( y- ys)/ dy)+1; } /* if point lies in same 4 by 4 point region */ /* as previous point, old values are reused. */ if( (ix < ixeg) || (iy < iyeg) || (abs(ix- ixs) >= 2) || (abs(iy- iys) >= 2) || jump ) { int igr, iadd, iadz, i, k; /* determine correct grid and grid region */ if( x <= ggrid.xsa[1]) igr=0; else { if( y > ggrid.ysa[2]) igr=2; else igr=1; } if( igr != igrs) { igrs= igr; dx= ggrid.dxa[igrs]; dy= ggrid.dya[igrs]; xs= ggrid.xsa[igrs]; ys= ggrid.ysa[igrs]; nxm2= ggrid.nxa[igrs]-2; nym2= ggrid.nya[igrs]-2; nxms=(( nxm2+1)/3)*3+1; nyms=(( nym2+1)/3)*3+1; nd= nda[igrs]; ndp= ndpa[igrs]; ix= (int)(( x- xs)/ dx)+1; iy= (int)(( y- ys)/ dy)+1; } /* if( igr != igrs) */ ixs=(( ix-1)/3)*3+2; if( ixs < 2) ixs=2; ixeg=-10000; if( ixs > nxm2) { ixs= nxm2; ixeg= nxms; } iys=(( iy-1)/3)*3+2; if( iys < 2) iys=2; iyeg=-10000; if( iys > nym2) { iys= nym2; iyeg= nyms; } /* compute coefficients of 4 cubic polynomials in x for */ /* the 4 grid values of y for each of the 4 functions */ iadz= ixs+( iys-3)* nd- ndp; for( k = 0; k < 4; k++ ) { iadz += ndp; iadd = iadz; for( i = 0; i < 4; i++ ) { iadd += nd; switch( igrs ) { case 0: p1= ggrid.ar1[iadd-2]; p2= ggrid.ar1[iadd-1]; p3= ggrid.ar1[iadd]; p4= ggrid.ar1[iadd+1]; break; case 1: p1= ggrid.ar2[iadd-2]; p2= ggrid.ar2[iadd-1]; p3= ggrid.ar2[iadd]; p4= ggrid.ar2[iadd+1]; break; case 2: p1= ggrid.ar3[iadd-2]; p2= ggrid.ar3[iadd-1]; p3= ggrid.ar3[iadd]; p4= ggrid.ar3[iadd+1]; } /* switch( igrs ) */ a[i][k]=( p4- p1+3.0*( p2- p3))*.1666666667; b[i][k]=( p1-2.0* p2+ p3)*.5; c[i][k]= p3-(2.0* p1+3.0* p2+ p4)*.1666666667; d[i][k]= p2; } /* for( i = 0; i < 4; i++ ) */ } /* for( k = 0; k < 4; k++ ) */ xz=( ixs-1)* dx+ xs; yz=( iys-1)* dy+ ys; } /* if( (abs(ix- ixs) >= 2) || */ /* evaluate polymomials in x and use cubic */ /* interpolation in y for each of the 4 functions. */ xx=( x- xz)/ dx; yy=( y- yz)/ dy; fx1=(( a[0][0]* xx+ b[0][0])* xx+ c[0][0])* xx+ d[0][0]; fx2=(( a[1][0]* xx+ b[1][0])* xx+ c[1][0])* xx+ d[1][0]; fx3=(( a[2][0]* xx+ b[2][0])* xx+ c[2][0])* xx+ d[2][0]; fx4=(( a[3][0]* xx+ b[3][0])* xx+ c[3][0])* xx+ d[3][0]; p1= fx4- fx1+3.0*( fx2- fx3); p2=3.0*( fx1-2.0* fx2+ fx3); p3=6.0* fx3-2.0* fx1-3.0* fx2- fx4; *f1=(( p1* yy+ p2)* yy+ p3)* yy*.1666666667+ fx2; fx1=(( a[0][1]* xx+ b[0][1])* xx+ c[0][1])* xx+ d[0][1]; fx2=(( a[1][1]* xx+ b[1][1])* xx+ c[1][1])* xx+ d[1][1]; fx3=(( a[2][1]* xx+ b[2][1])* xx+ c[2][1])* xx+ d[2][1]; fx4=(( a[3][1]* xx+ b[3][1])* xx+ c[3][1])* xx+ d[3][1]; p1= fx4- fx1+3.0*( fx2- fx3); p2=3.0*( fx1-2.0* fx2+ fx3); p3=6.0* fx3-2.0* fx1-3.0* fx2- fx4; *f2=(( p1* yy+ p2)* yy+ p3)* yy*.1666666667+ fx2; fx1=(( a[0][2]* xx+ b[0][2])* xx+ c[0][2])* xx+ d[0][2]; fx2=(( a[1][2]* xx+ b[1][2])* xx+ c[1][2])* xx+ d[1][2]; fx3=(( a[2][2]* xx+ b[2][2])* xx+ c[2][2])* xx+ d[2][2]; fx4=(( a[3][2]* xx+ b[3][2])* xx+ c[3][2])* xx+ d[3][2]; p1= fx4- fx1+3.0*( fx2- fx3); p2=3.0*( fx1-2.0* fx2+ fx3); p3=6.0* fx3-2.0* fx1-3.0* fx2- fx4; *f3=(( p1* yy+ p2)* yy+ p3)* yy*.1666666667+ fx2; fx1=(( a[0][3]* xx+ b[0][3])* xx+ c[0][3])* xx+ d[0][3]; fx2=(( a[1][3]* xx+ b[1][3])* xx+ c[1][3])* xx+ d[1][3]; fx3=(( a[2][3]* xx+ b[2][3])* xx+ c[2][3])* xx+ d[2][3]; fx4=(( a[3][3]* xx+ b[3][3])* xx+ c[3][3])* xx+ d[3][3]; p1= fx4- fx1+3.0*( fx2- fx3); p2=3.0*( fx1-2.0* fx2+ fx3); p3=6.0* fx3-2.0* fx1-3.0* fx2- fx4; *f4=(( p1* yy+ p2)* yy+ p3)* yy*.1666666667+ fx2; return; } /*-----------------------------------------------------------------------*/ /* intx performs numerical integration of exp(jkr)/r by the method of */ /* variable interval width romberg integration. the integrand value */ /* is supplied by subroutine gf. */ void intx( double el1, double el2, double b, int ij, double *sgr, double *sgi ) { int ns, nt; int nx = 1, nma = 65536, nts = 4; int flag = TRUE; double z, s, ze, fnm, ep, zend, fns, dz=0.0, zp; double t00r, g1r, g5r=0.0, t00i, g1i, g5i=0.0, t01r, g3r=0.0; double t01i, g3i=0.0, t10r, t10i, te1i, te1r, t02r; double g2r, g4r, t02i, g2i, g4i, t11r, t11i, t20r; double t20i, te2i, te2r, rx = 1.0e-4, dzot=0.0; z= el1; ze= el2; if( ij == 0) ze=0.0; s= ze- z; fnm= nma; ep= s/(10.0* fnm); zend= ze- ep; *sgr=0.0; *sgi=0.0; ns= nx; nt=0; gf( z, &g1r, &g1i); while( TRUE ) { if( flag ) { fns= ns; dz= s/ fns; zp= z+ dz; if( zp > ze) { dz= ze- z; if( fabs(dz) <= ep) { /* add contribution of near singularity for diagonal term */ if(ij == 0) { *sgr=2.0*( *sgr+ log(( sqrt( b* b+ s* s)+ s)/ b)); *sgi=2.0* *sgi; } return; } } /* if( zp > ze) */ dzot= dz*.5; zp= z+ dzot; gf( zp, &g3r, &g3i); zp= z+ dz; gf( zp, &g5r, &g5i); } /* if( flag ) */ t00r=( g1r+ g5r)* dzot; t00i=( g1i+ g5i)* dzot; t01r=( t00r+ dz* g3r)*0.5; t01i=( t00i+ dz* g3i)*0.5; t10r=(4.0* t01r- t00r)/3.0; t10i=(4.0* t01i- t00i)/3.0; /* test convergence of 3 point romberg result. */ test( t01r, t10r, &te1r, t01i, t10i, &te1i, 0.0); if( (te1i <= rx) && (te1r <= rx) ) { *sgr= *sgr+ t10r; *sgi= *sgi+ t10i; nt += 2; z += dz; if( z >= zend) { /* add contribution of near singularity for diagonal term */ if(ij == 0) { *sgr=2.0*( *sgr+ log(( sqrt( b* b+ s* s)+ s)/ b)); *sgi=2.0* *sgi; } return; } g1r= g5r; g1i= g5i; if( nt >= nts) if( ns > nx) { /* Double step size */ ns= ns/2; nt=1; } flag = TRUE; continue; } /* if( (te1i <= rx) && (te1r <= rx) ) */ zp= z+ dz*0.25; gf( zp, &g2r, &g2i); zp= z+ dz*0.75; gf( zp, &g4r, &g4i); t02r=( t01r+ dzot*( g2r+ g4r))*0.5; t02i=( t01i+ dzot*( g2i+ g4i))*0.5; t11r=(4.0* t02r- t01r)/3.0; t11i=(4.0* t02i- t01i)/3.0; t20r=(16.0* t11r- t10r)/15.0; t20i=(16.0* t11i- t10i)/15.0; /* test convergence of 5 point romberg result. */ test( t11r, t20r, &te2r, t11i, t20i, &te2i, 0.0); if( (te2i > rx) || (te2r > rx) ) { nt=0; if( ns >= nma) fprintf( stderr, "xnec2c: step size limited at z= %10.5f\n", z ); else { /* halve step size */ ns= ns*2; fns= ns; dz= s/ fns; dzot= dz*0.5; g5r= g3r; g5i= g3i; g3r= g2r; g3i= g2i; flag = FALSE; continue; } } /* if( (te2i > rx) || (te2r > rx) ) */ *sgr= *sgr+ t20r; *sgi= *sgi+ t20i; nt++; z += dz; if( z >= zend) { /* add contribution of near singularity for diagonal term */ if(ij == 0) { *sgr=2.0*( *sgr+ log(( sqrt( b* b+ s* s)+ s)/ b)); *sgi=2.0* *sgi; } return; } g1r= g5r; g1i= g5i; if( nt >= nts) if( ns > nx) { /* Double step size */ ns= ns/2; nt=1; } flag = TRUE; } /* while( TRUE ) */ } /*-----------------------------------------------------------------------*/ /* returns smallest of two arguments */ int min( int a, int b ) { if( a < b ) return(a); else return(b); } /*-----------------------------------------------------------------------*/ /* test for convergence in numerical integration */ void test( double f1r, double f2r, double *tr, double f1i, double f2i, double *ti, double dmin ) { double den; den= fabs( f2r); *tr= fabs( f2i); if( den < *tr) den= *tr; if( den < dmin) den= dmin; if( den < 1.0e-37) { *tr=0.0; *ti=0.0; return; } *tr= fabs(( f1r- f2r)/ den); *ti= fabs(( f1i- f2i)/ den); return; } /*-----------------------------------------------------------------------*/ /* compute component of basis function i on segment is. */ void sbf( int i, int is, double *aa, double *bb, double *cc ) { int ix, jsno, june, jcox, jcoxx, jend, iend, njun1=0, njun2; double d, sig, pp, sdh, cdh, sd, omc; double aj, pm=0, cd, ap, qp, qm, xxi; *aa=0.0; *bb=0.0; *cc=0.0; june=0; jsno=0; pp=0.0; ix=i-1; jcox= data.icon1[ix]; if( jcox > PCHCON) jcox= i; jend=-1; iend=-1; sig=-1.0; do { if( jcox != 0 ) { if( jcox < 0 ) jcox= -jcox; else { sig= -sig; jend= -jend; } jcoxx = jcox-1; jsno++; d= PI* data.si[jcoxx]; sdh= sin( d); cdh= cos( d); sd=2.0* sdh* cdh; if( d <= 0.015) { omc=4.0* d* d; omc=((1.3888889e-3* omc -4.1666666667e-2)* omc +.5)* omc; } else omc=1.0- cdh* cdh+ sdh* sdh; aj=1.0/( log(1.0/( PI* data.bi[jcoxx]))-.577215664); pp -= omc/ sd* aj; if( jcox == is) { *aa= aj/ sd* sig; *bb= aj/(2.0* cdh); *cc= -aj/(2.0* sdh)* sig; june= iend; } if( jcox != i ) { if( jend != 1) jcox= data.icon1[jcoxx]; else jcox= data.icon2[jcoxx]; if( abs(jcox) != i ) { if( jcox == 0 ) { fprintf( stderr, "xnec2c: sbf(): segment connection error for segment %d\n", i ); stop( _("Segment connection error in sbf()"), ERR_STOP ); } else continue; } } /* if( jcox != i ) */ else if( jcox == is) *bb= -*bb; if( iend == 1) break; } /* if( jcox != 0 ) */ pm= -pp; pp=0.0; njun1= jsno; jcox= data.icon2[ix]; if( jcox > PCHCON) jcox= i; jend=1; iend=1; sig=-1.0; } /* do */ while( jcox != 0 ); njun2= jsno- njun1; d= PI* data.si[ix]; sdh= sin( d); cdh= cos( d); sd=2.0* sdh* cdh; cd= cdh* cdh- sdh* sdh; if( d <= 0.015) { omc=4.0* d* d; omc=((1.3888889e-3* omc -4.1666666667e-2)* omc +.5)* omc; } else omc=1.0- cd; ap=1.0/( log(1.0/( PI* data.bi[ix])) -.577215664); aj= ap; if( njun1 == 0) { if( njun2 == 0) { *aa =-1.0; qp= PI* data.bi[ix]; xxi= qp* qp; xxi= qp*(1.0-.5* xxi)/(1.0- xxi); *cc=1.0/( cdh- xxi* sdh); return; } qp= PI* data.bi[ix]; xxi= qp* qp; xxi= qp*(1.0-.5* xxi)/(1.0- xxi); qp=-( omc+ xxi* sd)/( sd*( ap+ xxi* pp)+ cd*( xxi* ap- pp)); if( june == 1) { *aa= -*aa* qp; *bb= *bb* qp; *cc= -*cc* qp; if( i != is) return; } *aa -= 1.0; d = cd - xxi * sd; *bb += (sdh + ap * qp * (cdh - xxi * sdh)) / d; *cc += (cdh + ap * qp * (sdh + xxi * cdh)) / d; return; } /* if( njun1 == 0) */ if( njun2 == 0) { qm= PI* data.bi[ix]; xxi= qm* qm; xxi= qm*(1.0-.5* xxi)/(1.0- xxi); qm=( omc+ xxi* sd)/( sd*( aj- xxi* pm)+ cd*( pm+ xxi* aj)); if( june == -1) { *aa= *aa* qm; *bb= *bb* qm; *cc= *cc* qm; if( i != is) return; } *aa -= 1.0; d= cd- xxi* sd; *bb += ( aj* qm*( cdh- xxi* sdh)- sdh)/ d; *cc += ( cdh- aj* qm*( sdh+ xxi* cdh))/ d; return; } /* if( njun2 == 0) */ qp= sd*( pm* pp+ aj* ap)+ cd*( pm* ap- pp* aj); qm=( ap* omc- pp* sd)/ qp; qp=-( aj* omc+ pm* sd)/ qp; if( june != 0 ) { if( june < 0 ) { *aa= *aa* qm; *bb= *bb* qm; *cc= *cc* qm; } else { *aa= -*aa* qp; *bb= *bb* qp; *cc= -*cc* qp; } if( i != is) return; } /* if( june != 0 ) */ *aa -= 1.0; *bb += ( aj* qm+ ap* qp)* sdh/ sd; *cc += ( aj* qm- ap* qp)* cdh/ sd; return; } /*-----------------------------------------------------------------------*/ /* compute basis function i */ void tbf( int i, int icap ) { int ix, jcox, jcoxx, jend, iend, njun1=0, njun2, jsnop, jsnox; double pp, sdh, cdh, sd, omc, aj, pm=0, cd, ap, qp, qm, xxi; double d, sig; /*** also global ***/ segj.jsno=0; pp=0.0; ix = i-1; jcox= data.icon1[ix]; if( jcox > PCHCON) jcox= i; jend=-1; iend=-1; sig=-1.0; do { if( jcox != 0 ) { if( jcox < 0 ) jcox= -jcox; else { sig= -sig; jend= -jend; } jcoxx = jcox-1; segj.jsno++; jsnox = segj.jsno-1; segj.jco[jsnox]= jcox; d= PI* data.si[jcoxx]; sdh= sin( d); cdh= cos( d); sd=2.0* sdh* cdh; if( d <= 0.015) { omc=4.0* d* d; omc=((1.3888889e-3* omc-4.1666666667e-2)* omc+.5)* omc; } else omc=1.0- cdh* cdh+ sdh* sdh; aj=1.0/( log(1.0/( PI* data.bi[jcoxx]))-.577215664); pp= pp- omc/ sd* aj; segj.ax[jsnox]= aj/ sd* sig; segj.bx[jsnox]= aj/(2.0* cdh); segj.cx[jsnox]= -aj/(2.0* sdh)* sig; if( jcox != i) { if( jend == 1) jcox= data.icon2[jcoxx]; else jcox= data.icon1[jcoxx]; if( abs(jcox) != i ) { if( jcox != 0 ) continue; else { fprintf( stderr, "xnec2c: tbf(): segment connection error for segment %5d\n", i ); stop( _("Segment connection error in tbf()"), ERR_STOP ); } } } /* if( jcox != i) */ else segj.bx[jsnox] = -segj.bx[jsnox]; if( iend == 1) break; } /* if( jcox != 0 ) */ pm= -pp; pp=0.0; njun1= segj.jsno; jcox= data.icon2[ix]; if( jcox > PCHCON) jcox= i; jend=1; iend=1; sig=-1.0; } /* do */ while( jcox != 0 ); njun2= segj.jsno- njun1; jsnop= segj.jsno; segj.jco[jsnop]= i; d= PI* data.si[ix]; sdh= sin( d); cdh= cos( d); sd=2.0* sdh* cdh; cd= cdh* cdh- sdh* sdh; if( d <= 0.015) { omc=4.0* d* d; omc=((1.3888889e-3* omc-4.1666666667e-2)* omc+.5)* omc; } else omc=1.0- cd; ap=1.0/( log(1.0/( PI* data.bi[ix]))-.577215664); aj= ap; if( njun1 == 0) { if( njun2 == 0) { segj.bx[jsnop]=0.0; if( icap == 0) xxi=0.0; else { qp= PI* data.bi[ix]; xxi= qp* qp; xxi= qp*(1.0-.5* xxi)/(1.0- xxi); } segj.cx[jsnop]=1.0/( cdh- xxi* sdh); segj.jsno= jsnop+1; segj.ax[jsnop]=-1.0; return; } /* if( njun2 == 0) */ if( icap == 0) xxi=0.0; else { qp= PI* data.bi[ix]; xxi= qp* qp; xxi= qp*(1.0-.5* xxi)/(1.0- xxi); } qp=-( omc+ xxi* sd)/( sd*( ap+ xxi* pp)+ cd*( xxi* ap- pp)); d= cd- xxi* sd; segj.bx[jsnop]=( sdh+ ap* qp*( cdh- xxi* sdh))/ d; segj.cx[jsnop]=( cdh+ ap* qp*( sdh+ xxi* cdh))/ d; for( iend = 0; iend < njun2; iend++ ) { segj.ax[iend]= -segj.ax[iend]* qp; segj.bx[iend]= segj.bx[iend]* qp; segj.cx[iend]= -segj.cx[iend]* qp; } segj.jsno= jsnop+1; segj.ax[jsnop]=-1.0; return; } /* if( njun1 == 0) */ if( njun2 == 0) { if( icap == 0) xxi=0.0; else { qm= PI* data.bi[ix]; xxi= qm* qm; xxi= qm*(1.0-.5* xxi)/(1.0- xxi); } qm=( omc+ xxi* sd)/( sd*( aj- xxi* pm)+ cd*( pm+ xxi* aj)); d= cd- xxi* sd; segj.bx[jsnop]=( aj* qm*( cdh- xxi* sdh)- sdh)/ d; segj.cx[jsnop]=( cdh- aj* qm*( sdh+ xxi* cdh))/ d; for( iend = 0; iend < njun1; iend++ ) { segj.ax[iend]= segj.ax[iend]* qm; segj.bx[iend]= segj.bx[iend]* qm; segj.cx[iend]= segj.cx[iend]* qm; } segj.jsno= jsnop+1; segj.ax[jsnop]=-1.0; return; } /* if( njun2 == 0) */ qp= sd*( pm* pp+ aj* ap)+ cd*( pm* ap- pp* aj); qm=( ap* omc- pp* sd)/ qp; qp=-( aj* omc+ pm* sd)/ qp; segj.bx[jsnop]=( aj* qm+ ap* qp)* sdh/ sd; segj.cx[jsnop]=( aj* qm- ap* qp)* cdh/ sd; for( iend = 0; iend < njun1; iend++ ) { segj.ax[iend]= segj.ax[iend]* qm; segj.bx[iend]= segj.bx[iend]* qm; segj.cx[iend]= segj.cx[iend]* qm; } jend= njun1; for( iend = jend; iend < segj.jsno; iend++ ) { segj.ax[iend]= -segj.ax[iend]* qp; segj.bx[iend]= segj.bx[iend]* qp; segj.cx[iend]= -segj.cx[iend]* qp; } segj.jsno= jsnop+1; segj.ax[jsnop]=-1.0; return; } /*-----------------------------------------------------------------------*/ /* compute the components of all basis functions on segment j */ void trio( int j ) { int jcox, jcoxx, jsnox, jx, jend=0, iend=0; segj.jsno=0; jx = j-1; jcox= data.icon1[jx]; if( jcox <= PCHCON) { jend=-1; iend=-1; } if( (jcox == 0) || (jcox > PCHCON) ) { jcox= data.icon2[jx]; if( jcox <= PCHCON) { jend=1; iend=1; } if( jcox == 0 || (jcox > PCHCON) ) { jsnox = segj.jsno; segj.jsno++; /* Allocate to connections buffers */ if( segj.jsno >= segj.maxcon ) { segj.maxcon = segj.jsno +1; size_t mreq = (size_t)segj.maxcon * sizeof(int); mem_realloc( (void **)&segj.jco, mreq, "in calculations.c" ); mreq = (size_t)segj.maxcon * sizeof(double); mem_realloc( (void **) &segj.ax, mreq, "in calculations.c" ); mem_realloc( (void **) &segj.bx, mreq, "in calculations.c" ); mem_realloc( (void **) &segj.cx, mreq, "in calculations.c" ); } sbf( j, j, &segj.ax[jsnox], &segj.bx[jsnox], &segj.cx[jsnox]); segj.jco[jsnox]= j; return; } } /* if( (jcox == 0) || (jcox > PCHCON) ) */ do { if( jcox < 0 ) jcox= -jcox; else jend= -jend; jcoxx = jcox-1; if( jcox != j) { jsnox = segj.jsno; segj.jsno++; /* Allocate to connections buffers */ if( segj.jsno >= segj.maxcon ) { segj.maxcon = segj.jsno +1; size_t mreq = (size_t)segj.maxcon * sizeof(int); mem_realloc( (void **)&segj.jco, mreq, "in calculations.c" ); mreq = (size_t)segj.maxcon * sizeof(double); mem_realloc( (void **) &segj.ax, mreq, "in calculations.c" ); mem_realloc( (void **) &segj.bx, mreq, "in calculations.c" ); mem_realloc( (void **) &segj.cx, mreq, "in calculations.c" ); } sbf( jcox, j, &segj.ax[jsnox], &segj.bx[jsnox], &segj.cx[jsnox]); segj.jco[jsnox]= jcox; if( jend != 1) jcox= data.icon1[jcoxx]; else jcox= data.icon2[jcoxx]; if( jcox == 0 ) { fprintf( stderr, "xnec2c: trio(): segment connention error for segment %5d\n", j ); stop( _("Segment connention error in trio()"), ERR_STOP ); } else continue; } /* if( jcox != j) */ if( iend == 1) break; jcox= data.icon2[jx]; if( jcox > PCHCON) break; jend=1; iend=1; } /* do */ while( jcox != 0 ); jsnox = segj.jsno; segj.jsno++; /* Allocate to connections buffers */ if( segj.jsno >= segj.maxcon ) { segj.maxcon = segj.jsno +1; size_t mreq = (size_t)segj.maxcon * sizeof(int); mem_realloc( (void **)&segj.jco, mreq, "in calculations.c" ); mreq = (size_t)segj.maxcon * sizeof(double); mem_realloc( (void **) &segj.ax, mreq, "in calculations.c" ); mem_realloc( (void **) &segj.bx, mreq, "in calculations.c" ); mem_realloc( (void **) &segj.cx, mreq, "in calculations.c" ); } sbf( j, j, &segj.ax[jsnox], &segj.bx[jsnox], &segj.cx[jsnox]); segj.jco[jsnox]= j; return; } /*-----------------------------------------------------------------------*/ /* cang returns the phase angle of a complex number in degrees. */ double cang( complex double z ) { return( carg(z)*TD ); } /*-----------------------------------------------------------------------*/ /* zint computes the internal impedance of a circular wire */ void zint( double sigl, double rolam, complex double *zint ) { #define cc1 ( 6.0e-7 + I*1.9e-6) #define cc2 (-3.4e-6 + I*5.1e-6) #define cc3 (-2.52e-5 + I*0.0) #define cc4 (-9.06e-5 - I*9.01e-5) #define cc5 ( 0.0 - I*9.765e-4) #define cc6 (.0110486 - I*0.0110485) #define cc7 ( 0.0 - I*0.3926991) #define cc8 ( 1.6e-6 - I*3.2e-6) #define cc9 ( 1.17e-5 - I*2.4e-6) #define cc10 ( 3.46e-5 + I*3.38e-5) #define cc11 ( 5.0e-7 + I*2.452e-4) #define cc12 (-1.3813e-3 + I*1.3811e-3) #define cc13 (-6.25001e-2 - I*1.0e-7) #define cc14 (.7071068 + I*0.7071068) #define cn cc14 #define th(d) ( (((((cc1*(d)+cc2)*(d)+cc3)*(d)+cc4)*(d)+cc5)*(d)+cc6)*(d) + cc7 ) #define ph(d) ( (((((cc8*(d)+cc9)*(d)+cc10)*(d)+cc11)*(d)+cc12)*(d)+cc13)*(d)+cc14 ) #define f(d) ( csqrt(POT/(d))*cexp(-cn*(d)+th(-8.0/x)) ) #define g(d) ( cexp(cn*(d)+th(8.0/x))/csqrt(TP*(d)) ) double x; double tpcmu = 2.368705e+3; double cmotp = 60.0; complex double br1, br2; x= sqrt( tpcmu* sigl)* rolam; if( x <= 110.0) { if( x <= 8.0) { double y, s, ber, bei; y= x/8.0; y= y* y; s= y* y; ber=((((((-9.01e-6* s+1.22552e-3)* s-.08349609)* s+ 2.6419140)* s-32.363456)* s+113.77778)* s-64.0)* s+1.0; bei=((((((1.1346e-4* s-.01103667)* s+.52185615)* s-10.567658)* s+72.817777)* s-113.77778)* s+16.0)* y; br1= cmplx( ber, bei); ber=(((((((-3.94e-6* s+4.5957e-4)* s-.02609253)* s+ .66047849)* s-6.0681481)* s+14.222222)* s-4.0)* y)* x; bei=((((((4.609e-5* s-3.79386e-3)* s+.14677204)* s- 2.3116751)* s+11.377778)* s-10.666667)* s+.5)* x; br2= cmplx( ber, bei); br1= br1/ br2; *zint= CPLX_01* sqrt( cmotp/sigl )* br1/ rolam; } /* if( x <= 8.0) */ else { br2= CPLX_01* f(x)/ PI; br1= g( x)+ br2; br2= g( x)* ph(8.0/ x)- br2* ph(-8.0/ x); br1= br1/ br2; *zint= CPLX_01* sqrt( cmotp/ sigl)* br1/ rolam; } } /* if( x <= 110.0) */ else { br1= cmplx(.70710678,-.70710678); *zint= CPLX_01* sqrt( cmotp/ sigl)* br1/ rolam; } } /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/calculations.h000066400000000000000000000016631257141547200162010ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef CALCULATIONS_H #define CALCULATIONS_H 1 #include "common.h" #include "support.h" #define CCJ (0.0-I*0.01666666667) #endif xnec2c-3.4/src/callback_func.c000066400000000000000000000535411257141547200162640ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* callback_func.c * * Functions to handle GTK callbacks for xnec2c */ #include "callback_func.h" #include "shared.h" /*-----------------------------------------------------------------------*/ /* Save_Pixmap() * * Saves pixmaps as png files */ void Save_Pixmap( GdkPixmap *pixmap, int pixmap_width, int pixmap_height, char *filename ) { GdkPixbuf *pixbuf; GError *error = NULL; /* Get image from pixmap */ gtk_widget_grab_focus( structure_drawingarea ); pixbuf = gdk_pixbuf_get_from_drawable( NULL, pixmap, gdk_drawable_get_colormap(pixmap), 0, 0, 0, 0, pixmap_width, pixmap_height ); /* Save image as PNG file */ gdk_pixbuf_save( pixbuf, filename, "png", &error, NULL ); g_object_unref( pixbuf ); } /* Save_Pixmap() */ /*-----------------------------------------------------------------------*/ /* New_Viewer_Angle() * * Sets parameters for a new viewer angle */ void New_Viewer_Angle( double wr, double wi, GtkSpinButton *wr_spb, GtkSpinButton *wi_spb, projection_parameters_t *params ) { /* Recalculate projection paramenters */ params->Wr = wr; params->Wi = wi; /* Set new value */ Set_Spin_Button( wr_spb, (gdouble)params->Wr ); Set_Spin_Button( wi_spb, (gdouble)params->Wi ); } /* New_Viewer_Angle() */ /*-----------------------------------------------------------------------*/ /* Set_Spin_Button() * * Sets the value of a spin button */ void Set_Spin_Button( GtkSpinButton *spin, gdouble value ) { /* Save original value and set new */ gdouble sav = gtk_spin_button_get_value( spin ); gtk_spin_button_set_value( spin, value ); /* Issue a value_changed signal if needed (given same values) */ if( sav == value ) g_signal_emit_by_name( G_OBJECT(spin), "value_changed", NULL ); } /* Set_Spin_Button() */ /*-----------------------------------------------------------------------*/ /* Create_Pixmap() * * Creates or resizes a pixmap after a configure event */ void Create_Pixmap( GdkPixmap **pixmap, int *pixmap_width, int *pixmap_height, GtkWidget *widget, GdkEventConfigure *event, projection_parameters_t *params ) { /* Create or resize pixmap */ if( *pixmap != NULL ) { g_object_unref( *pixmap ); *pixmap = NULL; } *pixmap = gdk_pixmap_new( widget->window, event->width, event->height, -1 ); *pixmap_width = event->width; *pixmap_height = event->height; /* Calculate new projection parameters */ if( params != NULL ) New_Projection_Parameters( *pixmap_width, *pixmap_height, params ); } /* Create_Pixmap() */ /*-----------------------------------------------------------------------*/ /* Motion_Event() * * Handles pointer motion event on drawingareas */ void Motion_Event( GdkEventMotion *event, projection_parameters_t *params ) { /* Save previous pointer position */ static gdouble x_old = 0.0, y_old = 0.0; gdouble x = event->x; gdouble y = event->y; gdouble dx, dy; gchar value[6]; size_t s = sizeof( value ); /* Initialize saved x,y */ if( params->reset ) { x_old = x; y_old = y; params->reset = FALSE; } /* Recalculate projection parameters * according to pointer motion */ dx = x - x_old; dy = y - y_old; x_old = x; y_old = y; /* Other buttons are used for moving axes on screen */ if( event->state & GDK_BUTTON1_MASK ) { /* Set the structure rotate/incline spinbuttons */ if( isFlagSet(COMMON_PROJECTION) || (params->type == STRUCTURE_DRAWINGAREA) ) { structure_proj_params.Wr -= dx / (gdouble)MOTION_EVENTS_COUNT; structure_proj_params.Wi += dy / (gdouble)MOTION_EVENTS_COUNT; snprintf( value, s, "%d", (int)structure_proj_params.Wr ); gtk_entry_set_text( GTK_ENTRY(rotate_structure), value ); snprintf( value, s, "%d", (int)structure_proj_params.Wi ); gtk_entry_set_text( GTK_ENTRY(incline_structure), value ); } /* Set the rdpattern rotate/incline spinbuttons */ if( (isFlagSet(DRAW_ENABLED) && isFlagSet(COMMON_PROJECTION)) || (params->type == RDPATTERN_DRAWINGAREA) ) { rdpattern_proj_params.Wr -= dx / (gdouble)MOTION_EVENTS_COUNT; rdpattern_proj_params.Wi += dy / (gdouble)MOTION_EVENTS_COUNT; snprintf( value, s, "%d", (int)rdpattern_proj_params.Wr ); gtk_entry_set_text( GTK_ENTRY(rotate_rdpattern), value ); snprintf( value, s, "%d", (int)rdpattern_proj_params.Wi ); gtk_entry_set_text( GTK_ENTRY(incline_rdpattern), value ); } /* Rotate/incline structure */ if( params->type == STRUCTURE_DRAWINGAREA ) { New_Structure_Projection_Angle(); if( isFlagSet(DRAW_ENABLED) && isFlagSet(COMMON_PROJECTION) ) New_Radiation_Projection_Angle(); } else if( params->type == RDPATTERN_DRAWINGAREA ) { /* Rotate/incline rdpattern */ New_Radiation_Projection_Angle(); if( isFlagSet(COMMON_PROJECTION) ) New_Structure_Projection_Angle(); } } /* if( event->state & GDK_BUTTON1_MASK ) */ else { /* Move structure or rdpattern axes on screen */ params->x_center += dx; params->y_center -= dy; if( params->type == STRUCTURE_DRAWINGAREA ) Draw_Structure( structure_drawingarea ); if( params->type == RDPATTERN_DRAWINGAREA ) Draw_Radiation( rdpattern_drawingarea ); } } /* Motion_Event() */ /*-----------------------------------------------------------------------*/ /* Plot_Select() * * Sets up plotting of requested freq data */ void Plot_Select( GtkToggleButton *togglebutton, unsigned long long int flag ) { if( gtk_toggle_button_get_active(togglebutton) ) { SetFlag( flag | PLOT_SELECT ); calc_data.ngraph++; } else { ClearFlag( flag ); calc_data.ngraph--; } /* Trigger a redraw of frequency plots drawingarea */ if( isFlagSet(PLOT_ENABLED) && isFlagSet(FREQ_LOOP_DONE) ) Plot_Frequency_Data(); } /* Plot_Select() */ /*-----------------------------------------------------------------------*/ /* Delete_Event() * * Handles user request to delete a window */ void Delete_Event( gchar *mesg ) { quit_dialog = create_quit_dialog(); gtk_widget_show( quit_dialog ); if( isFlagSet(FREQ_LOOP_RUNNING) ) { if( isFlagSet(MAIN_QUIT) ) gtk_label_set_text( GTK_LABEL(lookup_widget( quit_dialog, "quit_label")), _("The frequency loop is running\n"\ "Really end operation?") ); else gtk_label_set_text( GTK_LABEL(lookup_widget( quit_dialog, "quit_label")), _("The frequency loop is running\n"\ "Really close this window?") ); } else gtk_label_set_text( GTK_LABEL(lookup_widget( quit_dialog, "quit_label")), mesg ); } /* Delete_Event() */ /*-----------------------------------------------------------------------*/ /* Set_Pol_Menuitem() * * Sets the polarization type menuitem to current setting */ void Set_Pol_Menuitem( GtkMenuItem *menuitem ) { gchar *pol_menu[NUM_POL] = { "rdpattern_total", "rdpattern_horizontal", "rdpattern_vertical", "rdpattern_right_hand", "rdpattern_left_hand", }; gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(lookup_widget( GTK_WIDGET(menuitem), pol_menu[calc_data.pol_type])), TRUE ); } /* Set_Pol_Menuitem() */ /*-----------------------------------------------------------------------*/ /* Close_Windows() * * Closes some open windows */ void Close_Windows( void ) { if( isFlagSet(PLOT_ENABLED) ) { gtk_widget_destroy( freqplots_window ); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(lookup_widget( main_window, "main_freqplots")), FALSE ); } if( isFlagSet(DRAW_ENABLED) ) { gtk_widget_destroy( rdpattern_window ); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(lookup_widget( main_window, "main_rdpattern")), FALSE ); } } /* Close_Windows() */ /*-----------------------------------------------------------------------*/ /* Open_Editor() * * Pops up a Editor window on user * right-click on a NEC2 Editor treeview */ gboolean Open_Editor( GtkTreeView *view ) { GtkTreeSelection *selection; GtkTreeIter iter; GtkTreeModel *model; gchar *card; GtkWidget *button; /* Find the selected treeview row */ selection = gtk_tree_view_get_selection( view ); if( !gtk_tree_selection_get_selected(selection, &model, &iter) ) return( FALSE ); /* Get the "card" name from first column */ gtk_tree_model_get( model, &iter, 0, &card, -1); size_t s = strlen( card ); /* Some "cards" have common editors */ if( strcmp(card, "GC") == 0 ) Strlcpy( card, "GW", s ); else if( strcmp(card, "SC") == 0 ) Strlcpy( card, "SP", s ); else if( strcmp(card, "SM") == 0 ) Strlcpy( card, "SP", s ); else if( strcmp(card, "NH") == 0 ) Strlcpy( card, "NE", s ); else if( strcmp(card, "GE") == 0 ) { Gend_Editor( EDITOR_EDIT ); return( TRUE ); } /* EN Not editable */ else if( strcmp(card, "EN") == 0 ) return( TRUE ); /* Send a "clicked" signal to the appropriate editor button */ card[0] = (gchar)tolower((int)card[0]); card[1] = (gchar)tolower((int)card[1]); button = lookup_widget( GTK_WIDGET(view), card ); g_free(card); if( button != NULL ) g_signal_emit_by_name( button, "clicked" ); else return( FALSE ); return( TRUE ); } /* Open_Editor() */ /*-----------------------------------------------------------------------*/ /* Main_Rdpattern_Activate() * * Callback function for the Radiation Pattern draw button */ void Main_Rdpattern_Activate( gboolean from_menu ) { /* Set E field check menu item */ if( fpat.nfeh & NEAR_EFIELD ) { gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(rdpattern_window, "rdpattern_e_field")), TRUE ); SetFlag( DRAW_EFIELD ); } else { gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(rdpattern_window, "rdpattern_e_field")), FALSE ); ClearFlag( DRAW_EFIELD ); } /* Set H field check menu item */ if( fpat.nfeh & NEAR_HFIELD ) { gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(rdpattern_window, "rdpattern_h_field")), TRUE ); SetFlag( DRAW_HFIELD ); } else { gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(rdpattern_window, "rdpattern_h_field")), FALSE ); ClearFlag( DRAW_HFIELD ); } /* Set Poynting vector check menu item */ if( (fpat.nfeh & NEAR_EHFIELD) == NEAR_EHFIELD ) { gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(rdpattern_window, "rdpattern_poynting_vector")), TRUE ); SetFlag( DRAW_POYNTING ); } else { gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(rdpattern_window, "rdpattern_poynting_vector")), FALSE ); ClearFlag( DRAW_POYNTING ); } /* Set structure overlay in Rad Pattern window */ if( isFlagClear(OVERLAY_STRUCT) ) gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(rdpattern_window, "rdpattern_overlay_structure")), FALSE ); else gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(rdpattern_window, "rdpattern_overlay_structure")), TRUE ); /* Sync common projection spinbuttons */ if( isFlagSet(COMMON_PROJECTION) ) { gchar value[6]; size_t s = sizeof( value ) - 1; rdpattern_proj_params.Wr = structure_proj_params.Wr; rdpattern_proj_params.Wi = structure_proj_params.Wi; snprintf( value, s, "%d", (int)rdpattern_proj_params.Wr ); value[s] = '\0'; gtk_entry_set_text( GTK_ENTRY(rotate_rdpattern), value ); snprintf( value, s, "%d", (int)rdpattern_proj_params.Wi ); value[s] = '\0'; gtk_entry_set_text( GTK_ENTRY(incline_rdpattern), value ); } else /* Initialize radiation pattern projection angles */ { rdpattern_proj_params.Wr = gtk_spin_button_get_value(rotate_rdpattern); rdpattern_proj_params.Wi = gtk_spin_button_get_value(incline_rdpattern); } New_Radiation_Projection_Angle(); /* Redo currents if not reaching this function * from the menu callback (e.g. not user action) */ if( !crnt.valid && !from_menu ) Redo_Currents( NULL ); /* Display frequency in freq spinbutton */ if( from_menu ) { char value[9]; size_t s = sizeof( value ); snprintf( value, s, "%.3f", calc_data.fmhz ); value[s - 1] = '\0'; gtk_entry_set_text( GTK_ENTRY(rdpattern_frequency), value ); } /* Enable Gain or E/H field drawing */ SetFlag( DRAW_ENABLED ); } /* Main_Rdpattern_Activate() */ /*-----------------------------------------------------------------------*/ /* Main_Freqplots_Activate() * * Callback function for for the main Frequency Plots button */ gboolean Main_Freqplots_Activate( void ) { /* No plots for Incident Field and * Elementary Current Source Excitation */ if( (fpat.ixtyp != 0) && (fpat.ixtyp != 5) ) { stop( _("Not available for Incident Field or\n"\ "Elementary Current Source Excitation.\n"\ "(Excitation Types 1 to 4)"), ERR_OK ); return( FALSE ); } /* Enable freq data graph plotting */ SetFlag( PLOT_ENABLED ); return( TRUE ); } /* Main_Freqplots_Activate() */ /*-----------------------------------------------------------------------*/ /* Rdpattern_Gain_Togglebutton_Toggled() * * Callback function for Rad Pattern window Gain button */ void Rdpattern_Gain_Togglebutton_Toggled( gboolean flag ) { /* If radiation pattern data do not * allow drawing of radiation pattern */ if( isFlagClear(ENABLE_RDPAT) ) return; /* Enable or not gain (radiation) pattern plotting */ if( flag ) { SetFlag( DRAW_GAIN ); ClearFlag( DRAW_EHFIELD ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(lookup_widget( rdpattern_window, "rdpattern_eh_togglebutton")), FALSE ); /* Redraw radiation pattern drawingarea */ if( isFlagSet(DRAW_ENABLED) && isFlagClear(FREQ_LOOP_RUNNING) ) { if( !crnt.valid ) Redo_Currents( NULL ); SetFlag( DRAW_NEW_RDPAT ); Draw_Radiation( rdpattern_drawingarea ); } Set_Window_Labels(); } else { ClearFlag( DRAW_GAIN ); /* Clear radiation pattern drawingarea */ if( isFlagClear(DRAW_EHFIELD) && isFlagSet(DRAW_ENABLED) ) Draw_Radiation( rdpattern_drawingarea ); Free_Draw_Buffers(); } return; } /* Rdpattern_Gain_Togglebutton_Toggled() */ /*-----------------------------------------------------------------------*/ /* Rdpattern_EH_Togglebutton_Toggled() * * Callback function for Rad Pattern window E/H field button */ void Rdpattern_EH_Togglebutton_Toggled( gboolean flag ) { /* If no near EH data */ if( !fpat.nfeh ) return; /* Enable or not E/H fields plotting */ if( flag ) { SetFlag( DRAW_EHFIELD ); ClearFlag( DRAW_GAIN ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(lookup_widget( rdpattern_window, "rdpattern_gain_togglebutton")), FALSE ); /* Delegate near field calcuations to child * processes if forked and near field data valid */ if( FORKED ) { Alloc_Nearfield_Buffers(fpat.nrx, fpat.nry, fpat.nrz); Pass_EH_Flags(); } /* Redraw radiation pattern drawingarea */ if( isFlagSet(DRAW_ENABLED) && isFlagClear(FREQ_LOOP_RUNNING) ) { if( !near_field.valid ) Redo_Currents(NULL); Near_Field_Pattern(); SetFlag( DRAW_NEW_EHFIELD ); Draw_Radiation( rdpattern_drawingarea ); } Set_Window_Labels(); } else { ClearFlag( NEAREH_ANIMATE ); ClearFlag( DRAW_EHFIELD ); /* Clear radiation pattern drawingarea */ if( isFlagClear(DRAW_GAIN) && isFlagSet(DRAW_ENABLED) ) Draw_Radiation( rdpattern_drawingarea ); /* Disable near field calcuations * by child processes if forked */ Pass_EH_Flags(); } } /* Rdpattern_EH_Togglebutton_Toggled() */ /*-----------------------------------------------------------------------*/ /* Main_Currents_Togglebutton_Toggled() * * Callback function for Main Currents toggle button */ void Main_Currents_Togglebutton_Toggled( gboolean flag ) { /* Enable calculation and rendering of structure curents */ if( flag ) { SetFlag( DRAW_CURRENTS ); ClearFlag( DRAW_CHARGES ); crnt.newer = 1; Alloc_Crnt_Buffs(); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(lookup_widget(main_window, "main_charges_togglebutton")), FALSE ); gtk_label_set_text( GTK_LABEL(lookup_widget(main_window, "struct_label")), _("View Currents") ); if( !crnt.valid && isFlagClear(FREQ_LOOP_RUNNING) ) Redo_Currents( NULL ); else if( crnt.valid ) Draw_Structure( structure_drawingarea ); if( isFlagSet(OVERLAY_STRUCT) ) Draw_Radiation( rdpattern_drawingarea ); } else { ClearFlag( DRAW_CURRENTS ); if( isFlagClear(DRAW_CHARGES) ) { /* Redraw structure on screen if frequency loop is not running */ gtk_label_set_text( GTK_LABEL(lookup_widget(main_window, "struct_label")), _("View Geometry") ); if( isFlagClear(FREQ_LOOP_RUNNING) ) Draw_Structure( structure_drawingarea ); Free_Crnt_Buffs(); } if( isFlagSet(OVERLAY_STRUCT) ) Draw_Radiation( rdpattern_drawingarea ); } } /* Main_Currents_Togglebutton_Toggled() */ /*-----------------------------------------------------------------------*/ /* Main_Charges_Togglebutton_Toggled() * * Callback function for Main Charges toggle button */ void Main_Charges_Togglebutton_Toggled( gboolean flag ) { if( flag ) { SetFlag( DRAW_CHARGES ); ClearFlag( DRAW_CURRENTS ); crnt.newer = 1; Alloc_Crnt_Buffs(); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(lookup_widget(main_window, "main_currents_togglebutton")), FALSE ); gtk_label_set_text( GTK_LABEL(lookup_widget(main_window, "struct_label")), _("View Charges") ); if( !crnt.valid && isFlagClear(FREQ_LOOP_RUNNING) ) Redo_Currents( NULL ); else if( crnt.valid ) Draw_Structure( structure_drawingarea ); if( isFlagSet(OVERLAY_STRUCT) ) Draw_Radiation( rdpattern_drawingarea ); } else { ClearFlag( DRAW_CHARGES ); if( isFlagClear(DRAW_CURRENTS) ) { /* Redraw structure on screen if frequency loop is not running */ gtk_label_set_text( GTK_LABEL(lookup_widget(main_window, "struct_label")), _("View Geometry") ); if( isFlagClear(FREQ_LOOP_RUNNING) ) Draw_Structure( structure_drawingarea ); Free_Crnt_Buffs(); } if( isFlagSet(OVERLAY_STRUCT) ) Draw_Radiation( rdpattern_drawingarea ); } } /* Main_Charges_Togglebutton_Toggled() */ /*-----------------------------------------------------------------------*/ /* Open_Nec2_Editor() * * Opens NEC2 editor window and fills * tree view according to action flag */ void Open_Nec2_Editor( int action ) { nec2_edit_window = create_nec2_editor(); gtk_widget_show( nec2_edit_window ); geom_treeview = GTK_TREE_VIEW( lookup_widget(nec2_edit_window, "nec2_geom_treeview") ); cmnd_treeview = GTK_TREE_VIEW( lookup_widget(nec2_edit_window, "nec2_cmnd_treeview") ); Nec2_Input_File_Treeview( action ); geom_adjustment = gtk_scrolled_window_get_vadjustment( GTK_SCROLLED_WINDOW(lookup_widget(nec2_edit_window, "scrolledwindow4")) ); cmnd_adjustment = gtk_scrolled_window_get_vadjustment( GTK_SCROLLED_WINDOW(lookup_widget(nec2_edit_window, "scrolledwindow3")) ); } /* Open_Nec2_Editor() */ /*-----------------------------------------------------------------------*/ /* Nec2_Apply_Checkbuton() * * Checks whether the NEC2 editor's "Apply" check button is active */ gboolean Nec2_Apply_Checkbutton( void ) { return( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( lookup_widget(nec2_edit_window, "nec2_apply_checkbutton" ))) ); } /*-----------------------------------------------------------------------*/ /* Gtk_Quit() * * Quits gtk main */ void Gtk_Quit( void ) { int i, k; Close_File( &input_fp ); SetFlag( MAIN_QUIT ); /* Kill child processes */ if( FORKED && !CHILD ) while( num_child_procs ) { num_child_procs--; kill( forked_proc_data[num_child_procs]->child_pid, SIGKILL ); } /* Kill possibly nested loops */ k = (int)gtk_main_level(); for( i = 0; i < k; i++ ) gtk_main_quit(); } /* Gtk_Quit() */ /*-----------------------------------------------------------------------*/ /* Pass_EH_Flags * * Passes near field related flags to child processes */ void Pass_EH_Flags( void ) { char flag; size_t cnt; int idx; /* Abort if not forked */ if( !FORKED ) return; /* Tell child process to calculate near field data */ cnt = strlen( fork_commands[EHFIELD] ); for( idx = 0; idx < calc_data.num_jobs; idx++ ) Write_Pipe( idx, fork_commands[EHFIELD], (ssize_t)cnt, TRUE ); /* Tell child to set near field flags */ flag = 0; if( isFlagSet(DRAW_EHFIELD) ) flag |= 0x01; if( isFlagSet(NEAREH_SNAPSHOT) ) flag |= 0x02; if( isFlagSet(DRAW_EFIELD) ) flag |= 0x04; if( isFlagSet(DRAW_HFIELD) ) flag |= 0x08; cnt = sizeof( flag ); for( idx = 0; idx < calc_data.num_jobs; idx++ ) Write_Pipe( idx, &flag, (ssize_t)cnt, TRUE ); } /* Pass_EH_Flags */ /*-----------------------------------------------------------------------*/ /* Alloc_Crnt_Buffs() * * Allocates memory for current/charge draw buffers */ void Alloc_Crnt_Buffs( void ) { /* Patch currents buffer */ if( data.m > 0 ) { size_t mreq = (size_t)data.m * sizeof( double ); mem_realloc( (void **)&ct1m, mreq, "in callback_func.c" ); mem_realloc( (void **)&ct2m, mreq, "in callback_func.c" ); } /* Segment currents buffer */ if( data.n > 0 ) { size_t mreq = (size_t)data.n * sizeof( double ); mem_realloc( (void **)&cmag, mreq, "in callback_func.c" ); } } /* Alloc_Crnt_Buffs() */ /*-----------------------------------------------------------------------*/ /* Free_Crnt_Buffs() * * Frees current/charge draw buffers */ void Free_Crnt_Buffs( void ) { free_ptr( (void **)&ct1m ); free_ptr( (void **)&ct2m ); free_ptr( (void **)&cmag ); } /* Free_Crnt_Buffs() */ /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/callback_func.h000066400000000000000000000017721257141547200162700ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef CALLBACK_FUNC_H #define CALLBACK_FUNC_H 1 #include #include "callbacks.h" #include "interface.h" #include "support.h" #include "editors.h" #include "fork.h" #include "common.h" #endif xnec2c-3.4/src/callbacks.c000066400000000000000000002713211257141547200154320ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #include "callbacks.h" #include "interface.h" #include "support.h" #include "fork.h" #include "xnec2c.h" #include "editors.h" #include "nec2_model.h" #include "shared.h" #include /* File chooser/select widgets */ static GtkWidget *file_chooser = NULL; static GtkWidget *file_selection = NULL; /* Tree view clicked on by user */ static GtkTreeView *selected_treeview = NULL; /* Pixmap for saving drawable images */ static GdkPixmap *saveas_pixmap = NULL; static int saveas_pixmap_width, saveas_pixmap_height; /* Action flag for NEC2 "card" editors */ static int action = EDITOR_NEW; /*-----------------------------------------------------------------------*/ void on_main_window_destroy (GtkObject *object, gpointer user_data) { Gtk_Quit(); } gboolean on_main_window_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { kill_window = main_window; SetFlag( MAIN_QUIT ); Delete_Event( _("Really quit xnec2c?") ); return TRUE; } void on_new_activate (GtkMenuItem *menuitem, gpointer user_data) { /* No save/open file while freq loop is running */ if( !Nec2_Save_Warn( _("A new NEC2 input file may not be created\n"\ "while the Frequency Loop is running") ) ) return; /* Save open file, if any */ if( (input_fp != NULL) && (nec2_edit_window != NULL) ) { stop( _("Saving already open NEC2 file\n"\ "before opening new default file"), ERR_OK ); Save_Nec2_Input_File( nec2_edit_window, infile ); infile[0] = '\0'; } /* Open editor window if needed */ if( nec2_edit_window == NULL ) { Close_File( &input_fp ); infile[0] = '\0'; Open_Nec2_Editor( NEC2_EDITOR_NEW ); } else Nec2_Input_File_Treeview( NEC2_EDITOR_NEW ); } void on_open_input_activate (GtkMenuItem *menuitem, gpointer user_data) { /* No save/open file while freq loop is running */ if( !Nec2_Save_Warn( _("A new NEC2 input file may not be opened\n"\ "while the Frequency Loop is running")) ) return; /* Open file chooser to select a NEC2 input file */ file_chooser = create_filechooserdialog(); gtk_widget_show( file_chooser ); /* Set filechooser file name to previously selected, if any */ if( (strlen(infile) != 0) && (infile[0] == '/') ) gtk_file_chooser_set_filename( GTK_FILE_CHOOSER(file_chooser), infile ); } void on_main_save_activate (GtkMenuItem *menuitem, gpointer user_data) { char saveas[96]; size_t s = sizeof( saveas ); /* Count number of structure image files saved of geometry, * currents or charges, to avoid over-writing saved files */ static int cgm = 0, ccr = 0, cch = 0; if( strlen(infile) == 0 ) return; /* Make the structure image save file name from input file * name. The count of each image type saved is incremented */ if( isFlagSet(DRAW_CURRENTS) ) snprintf( saveas, s, "%s-%s_%03d.%s", infile, "current", ++ccr, "png" ); else if( isFlagSet(DRAW_CHARGES) ) snprintf( saveas, s, "%s-%s_%03d.%s", infile, "charge", ++cch, "png" ); else snprintf( saveas, s, "%s-%s_%03d.%s", infile, "geometry", ++cgm, "png" ); saveas_pixmap = structure_pixmap; saveas_pixmap_width = structure_pixmap_width; saveas_pixmap_height = structure_pixmap_height; ClearFlag( ALL_SAVE_FLAGS ); SetFlag( IMAGE_SAVE ); /* Open file selector to specify file */ /* name for saving the structure image */ file_selection = create_fileselection(); gtk_file_selection_set_filename( GTK_FILE_SELECTION(file_selection), saveas ); gtk_widget_show( file_selection ); } void on_main_save_as_activate (GtkMenuItem *menuitem, gpointer user_data) { saveas_pixmap = structure_pixmap; saveas_pixmap_width = structure_pixmap_width; saveas_pixmap_height = structure_pixmap_height; ClearFlag( ALL_SAVE_FLAGS ); SetFlag( IMAGE_SAVE ); /* Open file selector to specify file */ /* name for saving the structure image */ file_selection = create_fileselection(); gtk_widget_show( file_selection ); } void on_struct_save_as_gnuplot_activate (GtkMenuItem *menuitem, gpointer user_data) { /* Open file selector to specify a file * name for saving the rad pattern image */ ClearFlag( ALL_SAVE_FLAGS ); SetFlag( STRCT_GNUPLOT_SAVE ); file_selection = create_fileselection(); gtk_widget_show( file_selection ); } void on_quit_activate (GtkMenuItem *menuitem, gpointer user_data) { kill_window = main_window; SetFlag( MAIN_QUIT ); Delete_Event( _("Really quit xnec2c?") ); } void on_main_rdpattern_activate (GtkMenuItem *menuitem, gpointer user_data) { /* Open radiation pattern rendering window */ if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) { rdpattern_window = create_rdpattern_window(); gtk_widget_show( rdpattern_window ); rdpattern_drawingarea = lookup_widget( rdpattern_window, "rdpattern_drawingarea" ); rdpattern_motion_handler = g_signal_connect ( (gpointer) rdpattern_drawingarea, "motion_notify_event", G_CALLBACK (on_rdpattern_drawingarea_motion_notify_event), NULL); gtk_widget_add_events( GTK_WIDGET(rdpattern_drawingarea), GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK ); rotate_rdpattern = GTK_SPIN_BUTTON(lookup_widget( rdpattern_window, "rdpattern_rotate_spinbutton")); incline_rdpattern = GTK_SPIN_BUTTON(lookup_widget( rdpattern_window, "rdpattern_incline_spinbutton")); rdpattern_frequency = GTK_SPIN_BUTTON(lookup_widget( rdpattern_window, "rdpattern_freq_spinbutton")); rdpattern_zoom = GTK_SPIN_BUTTON(lookup_widget( rdpattern_window, "rdpattern_zoom_spinbutton")); rdpattern_fstep_entry = GTK_ENTRY(lookup_widget( rdpattern_window, "rdpattern_fstep_entry")) ; Main_Rdpattern_Activate( TRUE ); } else if( isFlagSet(DRAW_ENABLED) ) gtk_widget_destroy( rdpattern_window ); } void on_main_freqplots_activate (GtkMenuItem *menuitem, gpointer user_data) { /* Open window for plotting frequency * related data (gain, vswr etc) */ if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) { if( Main_Freqplots_Activate() ) { freqplots_window = create_freqplots_window(); gtk_widget_show( freqplots_window ); freqplots_drawingarea = lookup_widget( freqplots_window, "freqplots_drawingarea" ); Set_Window_Labels(); calc_data.ngraph = 0; } /* if( Main_Freqplots_Activate() */ else gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(menuitem), FALSE ); } else if( isFlagSet(PLOT_ENABLED) ) gtk_widget_destroy( freqplots_window ); } void on_rdpattern_total_activate (GtkMenuItem *menuitem, gpointer user_data) { Set_Polarization( POL_TOTAL ); } void on_rdpattern_horizontal_activate (GtkMenuItem *menuitem, gpointer user_data) { Set_Polarization( POL_HORIZ ); } void on_rdpattern_vertical_activate (GtkMenuItem *menuitem, gpointer user_data) { Set_Polarization( POL_VERT ); } void on_rdpattern_right_hand_activate (GtkMenuItem *menuitem, gpointer user_data) { Set_Polarization( POL_RHCP ); } void on_rdpattern_left_hand_activate (GtkMenuItem *menuitem, gpointer user_data) { Set_Polarization( POL_LHCP ); } void on_common_projection_activate (GtkMenuItem *menuitem, gpointer user_data) { /* Enable syncing of projection params * for structure and rad pattern drawing */ if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) { if( isFlagSet(DRAW_ENABLED) ) { rdpattern_proj_params.Wr = structure_proj_params.Wr; rdpattern_proj_params.Wi = structure_proj_params.Wi; New_Viewer_Angle( rdpattern_proj_params.Wr, rdpattern_proj_params.Wi, rotate_rdpattern, incline_rdpattern, &rdpattern_proj_params ); } SetFlag( COMMON_PROJECTION ); } else ClearFlag( COMMON_PROJECTION ); } void on_common_freq_activate (GtkMenuItem *menuitem, gpointer user_data) { /* Enable syncing of frequency spinbuttons * between main and rad pattern windows */ if( gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM(menuitem)) ) SetFlag( COMMON_FREQUENCY ); else ClearFlag( COMMON_FREQUENCY ); } void on_main_x_axis_clicked (GtkButton *button, gpointer user_data) { /* Recalculate projection paramenters */ New_Viewer_Angle( 0.0, 0.0, rotate_structure, incline_structure, &structure_proj_params ); if( isFlagSet(DRAW_ENABLED) && isFlagSet(COMMON_PROJECTION) ) New_Viewer_Angle( 0.0, 0.0, rotate_rdpattern, incline_rdpattern, &rdpattern_proj_params ); } void on_main_y_axis_clicked (GtkButton *button, gpointer user_data) { /* Recalculate projection paramenters */ New_Viewer_Angle( 90.0, 0.0, rotate_structure, incline_structure, &structure_proj_params ); if( isFlagSet(DRAW_ENABLED) && isFlagSet(COMMON_PROJECTION) ) New_Viewer_Angle( 90.0, 0.0, rotate_rdpattern, incline_rdpattern, &rdpattern_proj_params ); } void on_main_z_axis_clicked (GtkButton *button, gpointer user_data) { /* Recalculate projection paramenters */ New_Viewer_Angle( 0.0, 90.0, rotate_structure, incline_structure, &structure_proj_params ); if( isFlagSet(DRAW_ENABLED) && isFlagSet(COMMON_PROJECTION) ) New_Viewer_Angle( 0.0, 90.0, rotate_rdpattern, incline_rdpattern, &rdpattern_proj_params ); } void on_main_default_view_clicked (GtkButton *button, gpointer user_data) { /* Projection at 45 deg rotation and inclination */ New_Viewer_Angle( 45.0, 45.0, rotate_structure, incline_structure, &structure_proj_params ); if( isFlagSet(DRAW_ENABLED) && isFlagSet(COMMON_PROJECTION) ) New_Viewer_Angle( 45.0, 45.0, rotate_rdpattern, incline_rdpattern, &rdpattern_proj_params ); } void on_main_rotate_spinbutton_value_changed( GtkSpinButton *spinbutton, gpointer user_data) { /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return; /* Get new "rotate" structure angle from spinbutton */ structure_proj_params.Wr = gtk_spin_button_get_value(spinbutton); /* Sync rad pattrern window spinbutton if enabled */ if( isFlagSet(DRAW_ENABLED) && isFlagSet(COMMON_PROJECTION) ) gtk_spin_button_set_value( rotate_rdpattern, (gdouble)structure_proj_params.Wr ); New_Structure_Projection_Angle(); gtk_spin_button_update( spinbutton ); } void on_main_incline_spinbutton_value_changed( GtkSpinButton *spinbutton, gpointer user_data) { /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return; /* Get new "incline" structure angle from spinbutton */ structure_proj_params.Wi = gtk_spin_button_get_value(spinbutton); /* Sync rad pattrern window spinbutton if enabled */ if( isFlagSet(DRAW_ENABLED) && isFlagSet(COMMON_PROJECTION) ) gtk_spin_button_set_value( incline_rdpattern, (gdouble)structure_proj_params.Wi ); New_Structure_Projection_Angle(); gtk_spin_button_update( spinbutton ); } void on_main_currents_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { /* Enable calculation and rendering of structure curents */ Main_Currents_Togglebutton_Toggled( gtk_toggle_button_get_active(togglebutton) ); } void on_main_charges_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { /* Enable calculation and rendering of structure charge density */ Main_Charges_Togglebutton_Toggled( gtk_toggle_button_get_active(togglebutton) ); } gboolean on_main_colorcode_drawingarea_expose_event( GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { double red = 0.0, grn = 0.0, blu = 0.0; int idx; /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return FALSE; cairo_t *cr = gdk_cairo_create( widget-> window ); /* Draw color-code bar in main window */ for( idx = 0; idx < 160; idx++ ) { Value_to_Color( &red, &grn, &blu, (double) (8*idx), 1280.0 ); cairo_set_source_rgb( cr, red, grn, blu ); Cairo_Draw_Line( cr, idx, 0, idx, 28 ); } cairo_destroy( cr ); return TRUE; } void on_main_freq_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { static gdouble fmhz_save = 0.0; /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return; /* Frequency spinbutton value changed by frequency loop */ if( isFlagSet(FREQ_LOOP_RUNNING) ) Draw_Structure( structure_drawingarea ); else /* by user */ { /* Get freq from spin button, avoid double signal by GTK */ gdouble fmhz = (gdouble)gtk_spin_button_get_value(spinbutton); if( (fmhz == fmhz_save) && isFlagClear(PLOT_FREQ_LINE) ) return; /* to avoid double signal by GTK */ fmhz_save = fmhz; /* If new freq calculations are enabled by * checkbutton next to freq spinbutton or * freq line plotting enabled, redo currents */ if( isFlagSet(PLOT_FREQ_LINE) || (isFlagSet(MAIN_NEW_FREQ) && (isFlagSet(DRAW_CURRENTS) || isFlagSet(DRAW_CHARGES))) ) { /* Recalc currents in structure */ calc_data.fmhz = (double)fmhz; g_idle_add( Redo_Currents, NULL ); } /* Sync rad pattern frequency spinbutton */ if( isFlagSet(DRAW_ENABLED) && isFlagSet(COMMON_FREQUENCY) && isFlagSet(MAIN_NEW_FREQ) ) /* Show current frequency */ gtk_spin_button_set_value( rdpattern_frequency, fmhz ); } /* else */ gtk_spin_button_update( spinbutton ); } void on_main_freq_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if( gtk_toggle_button_get_active(togglebutton) ) SetFlag(MAIN_NEW_FREQ); else ClearFlag(MAIN_NEW_FREQ); } void on_main_new_freq_clicked (GtkButton *button, gpointer user_data) { /* Recalculate (and redraw) currents on user command */ if( isFlagClear(FREQ_LOOP_RUNNING) ) { calc_data.fmhz = (double)gtk_spin_button_get_value( mainwin_frequency ); g_idle_add( Redo_Currents, NULL ); } } gboolean on_structure_drawingarea_configure_event( GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { /* Create or resize structure drawing pixmap */ Create_Pixmap( &structure_pixmap, &structure_pixmap_width, &structure_pixmap_height, widget, event, &structure_proj_params ); return TRUE; } gboolean on_structure_drawingarea_motion_notify_event( GtkWidget *widget, GdkEventMotion *event, gpointer user_data) { /* Use only 1 in MOTION_EVENTS_COUNT event */ static int cnt = 0; if( cnt++ < MOTION_EVENTS_COUNT ) return FALSE; cnt = 0; /* Block motion events */ g_signal_handler_block ( (gpointer)structure_drawingarea, structure_motion_handler ); /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return FALSE; /* Handle motion events */ Motion_Event( event, &structure_proj_params ); /* Unblock motion events */ g_signal_handler_unblock( (gpointer)structure_drawingarea, structure_motion_handler ); return TRUE; } gboolean on_structure_drawingarea_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return FALSE; Draw_Structure( widget ); return TRUE; } void on_filechooserdialog_response (GtkDialog *dialog, gint response_id, gpointer user_data) { if( response_id == GTK_RESPONSE_OK ) { gchar *filename; gboolean new = TRUE; /* Save any changes to an open file */ Save_Nec2_Input_File( nec2_edit_window, infile ); /* Get filename of NEC2 input file */ filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog) ); Strlcpy( infile, filename, sizeof(infile) ); g_free( filename ); gtk_widget_destroy( file_chooser ); /* Open new file */ Open_Input_File( (gpointer)&new ); } } void on_fileselection_response( GtkDialog *dialog, gint response_id, gpointer user_data) { gchar filename[81]; size_t s = sizeof( filename ); char *str; gboolean new = FALSE; /* User selects a file name to save a pixmap to file */ if( response_id == GTK_RESPONSE_OK ) { /* Get the "save as" file name */ Strlcpy( filename, gtk_file_selection_get_filename( GTK_FILE_SELECTION(dialog)), s ); if( isFlagSet(IMAGE_SAVE) ) { /* cat a file extension if not already there */ str = strstr( filename, ".png" ); if( (str == NULL) || (str[4] != '\0') ) Strlcat( filename, ".png", s ); Save_Pixmap( saveas_pixmap, saveas_pixmap_width, saveas_pixmap_height, filename ); } else if( isFlagSet(NEC2_SAVE) ) { /* cat a file extension if not already there */ str = strstr( filename, ".nec" ); if( (str == NULL) || (str[4] != '\0') ) Strlcat( filename, ".nec", s ); /* Use new file name as input file */ Strlcpy( infile, filename, sizeof(infile) ); Save_Nec2_Input_File( nec2_edit_window, filename ); /* Re-open NEC2 input file */ if( Nec2_Apply_Checkbutton() ) Open_Input_File( (gpointer)&new ); } else if( isFlagSet(RDPAT_GNUPLOT_SAVE) ) { /* cat a file extension if not already there */ str = strstr( filename, ".gplot" ); if( (str == NULL) || (str[6] != '\0') ) Strlcat( filename, ".gplot", s ); Save_RadPattern_Gnuplot_Data( filename ); } else if( isFlagSet(PLOTS_GNUPLOT_SAVE) ) { /* cat a file extension if not already there */ str = strstr( filename, ".gplot" ); if( (str == NULL) || (str[6] != '\0') ) Strlcat( filename, ".gplot", s ); Save_FreqPlots_Gnuplot_Data( filename ); } else if( isFlagSet(STRCT_GNUPLOT_SAVE) ) { /* cat a file extension if not already there */ str = strstr( filename, ".gplot" ); if( (str == NULL) || (str[6] != '\0') ) Strlcat( filename, ".gplot", s ); Save_Struct_Gnuplot_Data( filename ); } gtk_widget_destroy( file_selection ); if( (kill_window == nec2_edit_window) && (kill_window != NULL) ) gtk_widget_destroy( nec2_edit_window ); } /* if( response_id == GTK_RESPONSE_OK ) */ } gboolean on_freqplots_window_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { kill_window = freqplots_window; Delete_Event( _("Really close window?") ); return TRUE; } void on_freqplots_window_destroy (GtkObject *object, gpointer user_data) { Plots_Window_Killed(); } void on_freqplots_save_activate (GtkMenuItem *menuitem, gpointer user_data) { char saveas[96]; size_t s = sizeof( saveas ); static int cnt = 0; if( (strlen(infile) == 0) || isFlagClear(PLOT_SELECT) ) return; /* Make file name from input file name, * to save frequency plots drawing */ snprintf( saveas, s, "%s-%s_%03d.%s", infile, "plots", ++cnt, "png" ); saveas_pixmap = freqplots_pixmap; saveas_pixmap_width = freqplots_pixmap_width; saveas_pixmap_height = freqplots_pixmap_height; ClearFlag( ALL_SAVE_FLAGS ); SetFlag( IMAGE_SAVE ); /* Open file selector to specify file */ /* name for saving the structure image */ file_selection = create_fileselection(); gtk_file_selection_set_filename( GTK_FILE_SELECTION(file_selection), saveas ); gtk_widget_show( file_selection ); } void on_freqplots_save_as_activate (GtkMenuItem *menuitem, gpointer user_data) { saveas_pixmap = freqplots_pixmap; saveas_pixmap_width = freqplots_pixmap_width; saveas_pixmap_height = freqplots_pixmap_height; ClearFlag( ALL_SAVE_FLAGS ); SetFlag( IMAGE_SAVE ); /* Open file selector to specify a file * name for saving the freq plots image */ file_selection = create_fileselection(); gtk_widget_show( file_selection ); } void on_freqplots_save_as_gnuplot_activate (GtkMenuItem *menuitem, gpointer user_data) { /* Open file selector to specify a file * name for saving the rad pattern image */ ClearFlag( ALL_SAVE_FLAGS ); SetFlag( PLOTS_GNUPLOT_SAVE ); file_selection = create_fileselection(); gtk_widget_show( file_selection ); } void on_freqplots_gmax_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { /* Enable or not max gain plotting */ Plot_Select( togglebutton, PLOT_GMAX ); } void on_freqplots_gdir_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { /* Enable or not gain direction plotting */ Plot_Select( togglebutton, PLOT_GAIN_DIR ); } void on_freqplots_gviewer_togglebutton_toggled(GtkToggleButton *togglebutton, gpointer user_data) { /* Enable or not "gain toward user" plotting */ Plot_Select( togglebutton, PLOT_GVIEWER ); } void on_freqplots_vswr_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { /* Enable or not VSWR plotting */ Plot_Select( togglebutton, PLOT_VSWR ); } void on_freqplots_zo_spinbutton_value_changed( GtkSpinButton *spinbutton, gpointer user_data) { /* Set the value of Z0 used for VSWR calculations */ calc_data.zo = gtk_spin_button_get_value(spinbutton); if( isFlagSet(PLOT_ENABLED) ) Plot_Frequency_Data(); gtk_spin_button_update( spinbutton ); } void on_freqplots_zrlzim_togglebutton_toggled( GtkToggleButton *togglebutton, gpointer user_data) { /* Enable or not Z-real/Z-imag plotting */ Plot_Select( togglebutton, PLOT_ZREAL_ZIMAG ); } void on_freqplots_zmgzph_togglebutton_toggled( GtkToggleButton *togglebutton, gpointer user_data) { /* Enable or not Z-mag/Z-phase plotting */ Plot_Select( togglebutton, PLOT_ZMAG_ZPHASE ); } gboolean on_freqplots_drawingarea_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return FALSE; /* Enable drawing of freq line */ Plot_Frequency_Data(); return TRUE; } gboolean on_freqplots_drawingarea_configure_event( GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { /* Create or resize pixmap for frequency plots */ Create_Pixmap( &freqplots_pixmap, &freqplots_pixmap_width, &freqplots_pixmap_height, widget, event, NULL ); return TRUE; } gboolean on_freqplots_drawingarea_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return FALSE; Set_Frequency_On_Click( event ); return TRUE; } void on_rdpattern_window_destroy (GtkObject *object, gpointer user_data) { Rdpattern_Window_Killed(); } gboolean on_rdpattern_window_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { kill_window = rdpattern_window; Delete_Event( _("Really close window?") ); return TRUE; } void on_rdpattern_save_activate (GtkMenuItem *menuitem, gpointer user_data) { char saveas[96]; size_t s = sizeof( saveas ); static int cgn = 0, ceh = 0;; if( strlen(infile) == 0 ) return; /* Make the rad pattern save * file name from input name */ if( isFlagSet(DRAW_GAIN) ) snprintf( saveas, s, "%s-%s_%03d.%s", infile, "gain", ++cgn, "png" ); else if( isFlagSet(DRAW_EHFIELD) ) snprintf( saveas, s, "%s-%s_%03d.%s", infile, "fields", ++ceh, "png" ); else return; saveas_pixmap = rdpattern_pixmap; saveas_pixmap_width = rdpattern_pixmap_width; saveas_pixmap_height = rdpattern_pixmap_height; ClearFlag( ALL_SAVE_FLAGS ); SetFlag( IMAGE_SAVE ); /* Open file selector to specify file */ /* name for saving the pattern image */ file_selection = create_fileselection(); gtk_file_selection_set_filename( GTK_FILE_SELECTION(file_selection), saveas ); gtk_widget_show( file_selection ); } void on_rdpattern_save_as_activate (GtkMenuItem *menuitem, gpointer user_data) { saveas_pixmap = rdpattern_pixmap; saveas_pixmap_width = rdpattern_pixmap_width; saveas_pixmap_height = rdpattern_pixmap_height; ClearFlag( ALL_SAVE_FLAGS ); SetFlag( IMAGE_SAVE ); /* Open file selector to specify a file * name for saving the rad pattern image */ file_selection = create_fileselection(); gtk_widget_show( file_selection ); } void on_rdpattern_save_as_gnuplot_activate (GtkMenuItem *menuitem, gpointer user_data) { /* Open file selector to specify a file * name for saving the rad pattern image */ ClearFlag( ALL_SAVE_FLAGS ); SetFlag( RDPAT_GNUPLOT_SAVE ); file_selection = create_fileselection(); gtk_widget_show( file_selection ); } void on_rdpattern_linear_power_activate (GtkMenuItem *menuitem, gpointer user_data) { if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) Set_Gain_Style( GS_LINP ); } void on_rdpattern_linear_voltage_activate (GtkMenuItem *menuitem, gpointer user_data) { if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) Set_Gain_Style( GS_LINV ); } void on_rdpattern_arrl_style_activate (GtkMenuItem *menuitem, gpointer user_data) { if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) Set_Gain_Style( GS_ARRL ); } void on_rdpattern_logarithmic_activate (GtkMenuItem *menuitem, gpointer user_data) { if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) Set_Gain_Style( GS_LOG ); } void on_rdpattern_e_field_activate (GtkMenuItem *menuitem, gpointer user_data) { if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) SetFlag( DRAW_EFIELD ); else ClearFlag( DRAW_EFIELD ); Set_Window_Labels(); if( isFlagSet(DRAW_EHFIELD) ) Draw_Radiation( rdpattern_drawingarea ); } void on_rdpattern_h_field_activate (GtkMenuItem *menuitem, gpointer user_data) { if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) SetFlag( DRAW_HFIELD ); else ClearFlag( DRAW_HFIELD ); Set_Window_Labels(); if( isFlagSet(DRAW_EHFIELD) ) Draw_Radiation( rdpattern_drawingarea ); } void on_rdpattern_poynting_vector_activate (GtkMenuItem *menuitem, gpointer user_data) { if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) SetFlag( DRAW_POYNTING ); else ClearFlag( DRAW_POYNTING ); Set_Window_Labels(); if( isFlagSet(DRAW_EHFIELD) ) Draw_Radiation( rdpattern_drawingarea ); } void on_rdpattern_overlay_structure_activate (GtkMenuItem *menuitem, gpointer user_data) { if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) SetFlag( OVERLAY_STRUCT ); else ClearFlag( OVERLAY_STRUCT ); Draw_Radiation( rdpattern_drawingarea ); } void on_rdpattern_x_axis_clicked (GtkButton *button, gpointer user_data) { /* Recalculate projection paramenters */ New_Viewer_Angle( 0.0, 0.0, rotate_rdpattern, incline_rdpattern, &rdpattern_proj_params ); if( isFlagSet(COMMON_PROJECTION) ) New_Viewer_Angle( 0.0, 0.0, rotate_structure, incline_structure, &structure_proj_params ); } void on_rdpattern_y_axis_clicked (GtkButton *button, gpointer user_data) { /* Recalculate projection paramenters */ New_Viewer_Angle( 90.0, 0.0, rotate_rdpattern, incline_rdpattern, &rdpattern_proj_params ); if( isFlagSet(COMMON_PROJECTION) ) New_Viewer_Angle( 90.0, 0.0, rotate_structure, incline_structure, &structure_proj_params ); } void on_rdpattern_z_axis_clicked (GtkButton *button, gpointer user_data) { /* Recalculate projection paramenters */ New_Viewer_Angle( 0.0, 90.0, rotate_rdpattern, incline_rdpattern, &rdpattern_proj_params ); if( isFlagSet(COMMON_PROJECTION) ) New_Viewer_Angle( 0.0, 90.0, rotate_structure, incline_structure, &structure_proj_params ); } void on_rdpattern_default_view_clicked (GtkButton *button, gpointer user_data) { /* Projection at 45 deg rotation and inclination */ New_Viewer_Angle( 45.0, 45.0, rotate_rdpattern, incline_rdpattern, &rdpattern_proj_params ); if( isFlagSet(COMMON_PROJECTION) ) New_Viewer_Angle( 45.0, 45.0, rotate_structure, incline_structure, &structure_proj_params ); } void on_rdpattern_rotate_spinbutton_value_changed( GtkSpinButton *spinbutton, gpointer user_data) { /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return; /* Get new value of "rotate pattern" angle from spinbutton */ rdpattern_proj_params.Wr = gtk_spin_button_get_value(spinbutton); /* Sync main window rotate spinbutton */ if( isFlagSet(COMMON_PROJECTION) ) gtk_spin_button_set_value( rotate_structure, (gdouble)rdpattern_proj_params.Wr ); New_Radiation_Projection_Angle(); gtk_spin_button_update( spinbutton ); } void on_rdpattern_incline_spinbutton_value_changed( GtkSpinButton *spinbutton, gpointer user_data) { /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return; /* Get new value of "incline pattern" angle from spinbutton */ rdpattern_proj_params.Wi = gtk_spin_button_get_value(spinbutton); /* Sync main window incline spinbutton */ if( isFlagSet(COMMON_PROJECTION) ) gtk_spin_button_set_value( incline_structure, (gdouble)rdpattern_proj_params.Wi ); New_Radiation_Projection_Angle(); gtk_spin_button_update( spinbutton ); } void on_rdpattern_gain_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Rdpattern_Gain_Togglebutton_Toggled( gtk_toggle_button_get_active(togglebutton) ); } void on_rdpattern_eh_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Rdpattern_EH_Togglebutton_Toggled( gtk_toggle_button_get_active(togglebutton) ); } gboolean on_rdpattern_colorcode_drawingarea_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { double red = 0.0, grn = 0.0, blu = 0.0; int idx; /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return FALSE; cairo_t *cr = gdk_cairo_create( widget-> window ); /* Draw color code bar in rad pattern window */ for( idx = 0; idx < 160; idx++ ) { Value_to_Color( &red, &grn, &blu, (double) (8*idx), 1280.0 ); cairo_set_source_rgb( cr, red, grn, blu ); Cairo_Draw_Line( cr, idx, 0, idx, 28 ); } cairo_destroy( cr ); return TRUE; } void on_rdpattern_freq_spinbutton_value_changed( GtkSpinButton *spinbutton, gpointer user_data) { static gdouble fmhz_save = 0.0; /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return; /* Frequency spinbutton value changed by frequency loop */ if( isFlagSet(FREQ_LOOP_RUNNING) && isFlagSet(DRAW_ENABLED) ) Draw_Radiation( rdpattern_drawingarea ); else { /* Get freq from spin button, avoid double signal by GTK */ gdouble fmhz = (gdouble)gtk_spin_button_get_value(spinbutton); if( fmhz == fmhz_save ) return; /* to avoid double signal by GTK */ fmhz_save = fmhz; /* If new freq calculations are enabled * by checkbutton next to freq spinbutton */ if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( lookup_widget(rdpattern_window, "rdpattern_freq_checkbutton"))) && (isFlagSet(DRAW_GAIN) || isFlagSet(DRAW_EHFIELD)) ) { /* Recalc currents in structure and rad pattern */ calc_data.fmhz = (double)fmhz; g_idle_add( Redo_Radiation_Pattern, NULL ); } /* Sync main window frequency spinbutton */ if( isFlagSet(COMMON_FREQUENCY) ) gtk_spin_button_set_value( mainwin_frequency, fmhz ); } /* else */ gtk_spin_button_update( spinbutton ); } void on_rdpattern_new_freq_clicked (GtkButton *button, gpointer user_data) { /* Recalculate and draw rad pattern after user command */ if( isFlagClear(FREQ_LOOP_RUNNING) ) { calc_data.fmhz = (double)gtk_spin_button_get_value( rdpattern_frequency ); Redo_Radiation_Pattern( NULL ); } } gboolean on_rdpattern_drawingarea_configure_event( GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { /* Create or resize rad pattern pixmap */ Create_Pixmap( &rdpattern_pixmap, &rdpattern_pixmap_width, &rdpattern_pixmap_height, widget, event, &rdpattern_proj_params ); return TRUE; } gboolean on_rdpattern_drawingarea_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return FALSE; Draw_Radiation( widget ); return TRUE; } gboolean on_rdpattern_drawingarea_motion_notify_event( GtkWidget *widget, GdkEventMotion *event, gpointer user_data) { /* Use only 1 in MOTION_EVENTS_COUNT event */ static int cnt = 0; if( cnt++ < MOTION_EVENTS_COUNT ) return FALSE; cnt = 0; /* Block motion events */ g_signal_handler_block( (gpointer)rdpattern_drawingarea, rdpattern_motion_handler ); /* No redraws if new input pending */ if( isFlagSet(INPUT_PENDING) ) return FALSE; /* Handle motion events */ Motion_Event( event, &rdpattern_proj_params ); /* Unblock motion events */ g_signal_handler_unblock( (gpointer)rdpattern_drawingarea, rdpattern_motion_handler ); return TRUE; } void on_quit_cancelbutton_clicked (GtkButton *button, gpointer user_data) { gtk_widget_destroy( quit_dialog ); ClearFlag( MAIN_QUIT ); } void on_quit_okbutton_clicked (GtkButton *button, gpointer user_data) { if( isFlagSet(FREQ_LOOP_RUNNING) ) { if( isFlagSet(MAIN_QUIT) ) { Stop_Frequency_Loop(); gtk_label_set_text( GTK_LABEL( lookup_widget( quit_dialog, "quit_label")), _("Really quit Xnec2c?") ); ClearFlag( MAIN_QUIT ); return; } /* Stop freq loop if only one of plots * or radiation pattern windows is open */ if( (isFlagSet(DRAW_ENABLED) && isFlagClear(PLOT_ENABLED)) || (isFlagClear(DRAW_ENABLED) && isFlagSet(PLOT_ENABLED)) ) Stop_Frequency_Loop(); } /* if( isFlagSet(FREQ_LOOP_RUNNING) ) */ gtk_widget_destroy( quit_dialog ); gtk_widget_destroy( kill_window ); } void main_view_menuitem_activate (GtkMenuItem *menuitem, gpointer user_data) { /* Sync common projection checkbuttons */ if( isFlagSet(COMMON_PROJECTION) ) gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(main_window, "common_projection")), TRUE ); else gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(main_window, "common_projection")), FALSE ); /* Sync common frequency checkbuttons */ if( isFlagSet(COMMON_FREQUENCY) ) gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(main_window, "common_freq")), TRUE ); else gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(main_window, "common_freq")), FALSE ); } void main_pol_menu_activate (GtkMenuItem *menuitem, gpointer user_data) { Set_Pol_Menuitem( menuitem ); } void freqplots_pol_menu_activate (GtkMenuItem *menuitem, gpointer user_data) { Set_Pol_Menuitem( menuitem ); } void rdpattern_view_menuitem_activate (GtkMenuItem *menuitem, gpointer user_data) { /* Sync common projection checkbuttons */ if( isFlagSet(COMMON_PROJECTION) ) gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(rdpattern_window, "common_projection")), TRUE ); else gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(rdpattern_window, "common_projection")), FALSE ); /* Sync common frequency checkbuttons */ if( isFlagSet(COMMON_FREQUENCY) ) gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(rdpattern_window, "common_freq")), TRUE ); else gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM( lookup_widget(rdpattern_window, "common_freq")), FALSE ); } void rdpattern_pol_menu_activate (GtkMenuItem *menuitem, gpointer user_data) { Set_Pol_Menuitem( menuitem ); } void on_filechoser_cancel_clicked (GtkButton *button, gpointer user_data) { gtk_widget_destroy( file_chooser ); } void on_fileselection_cancel_clicked (GtkButton *button, gpointer user_data) { gtk_widget_destroy( file_selection ); } void on_near_peak_value_activate (GtkMenuItem *menuitem, gpointer user_data) { if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) { ClearFlag( NEAREH_SNAPSHOT ); /* Redraw radiation pattern drawingarea */ if( isFlagSet(DRAW_EHFIELD) ) { near_field.valid = 0; Near_Field_Pattern(); Draw_Radiation( rdpattern_drawingarea ); } } else SetFlag( NEAREH_SNAPSHOT ); /* Reset child near field flags */ Pass_EH_Flags(); } void on_near_snapshot_activate (GtkMenuItem *menuitem, gpointer user_data) { if( gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM(menuitem)) ) { SetFlag( NEAREH_SNAPSHOT ); /* Redraw radiation pattern drawingarea */ if( isFlagSet(DRAW_EHFIELD) ) { near_field.valid = 0; Near_Field_Pattern(); Draw_Radiation( rdpattern_drawingarea ); } } else ClearFlag( NEAREH_SNAPSHOT ); /* Reset child near field flags */ Pass_EH_Flags(); } void on_rdpattern_animate_activate (GtkMenuItem *menuitem, gpointer user_data) { if( isFlagClear(DRAW_EHFIELD) ) return; if( animate_dialog == NULL ) animate_dialog = create_animate_dialog(); gtk_widget_show( animate_dialog ); } void on_animation_applybutton_clicked (GtkButton *button, gpointer user_data) { GtkSpinButton *spinbutton; guint intval; gdouble freq, steps; spinbutton = GTK_SPIN_BUTTON( lookup_widget(animate_dialog, "animate_freq_spinbutton") ); freq = gtk_spin_button_get_value( spinbutton ); spinbutton = GTK_SPIN_BUTTON( lookup_widget(animate_dialog, "animate_steps_spinbutton") ); steps = gtk_spin_button_get_value( spinbutton ); intval = (guint)(1000.0 / steps / freq); near_field.anim_step = (double)TP / steps; SetFlag( NEAREH_ANIMATE ); if( anim_tag > 0 ) g_source_remove( anim_tag ); anim_tag = g_timeout_add( intval, Animate_Near_Field, NULL ); } void on_animation_cancelbutton_clicked (GtkButton *button, gpointer user_data) { ClearFlag( NEAREH_ANIMATE ); g_source_remove( anim_tag ); anim_tag = 0; } void on_animation_okbutton_clicked (GtkButton *button, gpointer user_data) { GtkSpinButton *spinbutton; guint intval; gdouble freq, steps; spinbutton = GTK_SPIN_BUTTON( lookup_widget(animate_dialog, "animate_freq_spinbutton") ); freq = gtk_spin_button_get_value( spinbutton ); spinbutton = GTK_SPIN_BUTTON( lookup_widget(animate_dialog, "animate_steps_spinbutton") ); steps = gtk_spin_button_get_value( spinbutton ); intval = (guint)(1000.0 / steps / freq); near_field.anim_step = (double)TP / steps; SetFlag( NEAREH_ANIMATE ); if( anim_tag > 0 ) g_source_remove( anim_tag ); anim_tag = g_timeout_add( intval, Animate_Near_Field, NULL ); gtk_widget_hide( animate_dialog ); } void on_animate_dialog_destroy (GtkObject *object, gpointer user_data) { animate_dialog = NULL; } void on_quit_dialog_destroy (GtkObject *object, gpointer user_data) { quit_dialog = NULL; } gboolean on_error_dialog_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { return TRUE; } void on_nec2_edit_activate (GtkMenuItem *menuitem, gpointer user_data) { /* Abort if no open input file */ if( input_fp == NULL ) { stop( _("No open NEC2 input file"), ERR_OK ); return; } if( nec2_edit_window == NULL ) Open_Nec2_Editor( NEC2_EDITOR_RELOAD ); } gboolean on_nec2_editor_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { if( isFlagSet(NEC2_EDIT_SAVE) ) { /* Open file selector to specify file */ /* name for saving a new NEC2 input file */ if( strlen(infile) == 0 ) { file_selection = create_fileselection(); gtk_file_selection_set_filename( GTK_FILE_SELECTION(file_selection), _("untitled") ); gtk_widget_show( file_selection ); ClearFlag( ALL_SAVE_FLAGS ); ClearFlag( NEC2_EDIT_SAVE ); SetFlag( NEC2_SAVE ); kill_window = nec2_edit_window; return TRUE; } Save_Nec2_Input_File( nec2_edit_window, infile ); } kill_window = nec2_edit_window; Delete_Event( _("Really close NEC2 Editor?") ); return TRUE; } void on_nec2_editor_destroy (GtkObject *object, gpointer user_data) { cmnt_store = NULL, geom_store = NULL, cmnd_store = NULL; nec2_edit_window = NULL; kill_window = NULL; } void on_nec2_save_clicked( GtkButton *button, gpointer user_data) { gboolean new = FALSE; /* No save/open file while freq loop is running */ if( !Nec2_Save_Warn( _("NEC2 Editor's data may not be saved\n"\ "while the Frequency Loop is running")) ) return; /* Open file selector to specify file */ /* name for saving a new NEC2 input file */ if( strlen(infile) == 0 ) { file_selection = create_fileselection(); gtk_file_selection_set_filename( GTK_FILE_SELECTION(file_selection), _("untitled") ); gtk_widget_show( file_selection ); ClearFlag( ALL_SAVE_FLAGS ); SetFlag( NEC2_SAVE ); return; } /* Save NEC2 editor data */ Save_Nec2_Input_File( nec2_edit_window, infile ); if( Nec2_Apply_Checkbutton() ) Open_Input_File( (gpointer)&new ); } void on_nec2_save_as_clicked (GtkButton *button, gpointer user_data) { /* No save/open file while freq loop is running */ if( !Nec2_Save_Warn( _("NEC2 Editor's data may not be saved\n"\ "while the Frequency Loop is running")) ) return; /* Open file selector to specify file */ /* name for saving the edited NEC2 file */ file_selection = create_fileselection(); gtk_file_selection_set_filename( GTK_FILE_SELECTION(file_selection), _("untitled") ); gtk_widget_show( file_selection ); ClearFlag( ALL_SAVE_FLAGS ); SetFlag( NEC2_SAVE ); } void on_nec2_row_add_clicked (GtkButton *button, gpointer user_data) { GtkTreeModel *model; GtkTreeSelection *selection; GtkTreeIter iter, sibling; int ncols; if( selected_treeview == NULL ) return; /* Find selected row and add new after */ selection = gtk_tree_view_get_selection( selected_treeview ); if( ! gtk_tree_selection_get_selected(selection, &model, &sibling) ) { /* Empty tree view case */ model = gtk_tree_view_get_model( selected_treeview ); gtk_list_store_insert( GTK_LIST_STORE(model), &iter, 0 ); } else gtk_list_store_insert_after( GTK_LIST_STORE(model), &iter, &sibling); /* Prime columns of new row */ ncols = gtk_tree_model_get_n_columns( model ); if( ncols == 2 ) /* Comments treeview */ gtk_list_store_set( GTK_LIST_STORE(model), &iter, 0, "CM", -1 ); else { int idx; for( idx = 0; idx < ncols; idx++ ) gtk_list_store_set( GTK_LIST_STORE(model), &iter, idx, "--", -1 ); } } void on_nec2_row_remv_clicked (GtkButton *button, gpointer user_data) { GtkTreeModel *model; GtkTreeIter iter; GtkTreeSelection *selection; if( selected_treeview == NULL ) return; selection = gtk_tree_view_get_selection( selected_treeview ); gtk_tree_selection_get_selected( selection, &model, &iter); gtk_list_store_remove( GTK_LIST_STORE(model), &iter ); selected_treeview = NULL; } void on_nec2_treeview_clear_clicked (GtkButton *button, gpointer user_data) { if( selected_treeview != NULL ) gtk_list_store_clear( GTK_LIST_STORE( gtk_tree_view_get_model(selected_treeview)) ); } gboolean on_nec2_cmnt_treeview_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { selected_treeview = GTK_TREE_VIEW(widget); if( event->button == 3 ) Open_Editor(selected_treeview); return FALSE; } gboolean on_nec2_geom_treeview_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { selected_treeview = GTK_TREE_VIEW(widget); if( event->button == 3 ) { action = EDITOR_EDIT; Open_Editor(selected_treeview); action = EDITOR_NEW; } return FALSE; } gboolean on_nec2_cmnd_treeview_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { selected_treeview = GTK_TREE_VIEW(widget); if( event->button == 3 ) { action = EDITOR_EDIT; Open_Editor( selected_treeview ); action = EDITOR_NEW; } return FALSE; } void on_nec2_revert_clicked (GtkButton *button, gpointer user_data) { /* Open NEC2 input file */ Open_File( &input_fp, infile, "r" ); Nec2_Input_File_Treeview( NEC2_EDITOR_REVERT ); } void on_error_stopbutton_clicked( GtkButton *button, gpointer user_data) __attribute__ ((noreturn)); void on_error_stopbutton_clicked (GtkButton *button, gpointer user_data) { ClearFlag( ERROR_CONDX ); gtk_widget_destroy( error_dialog ); gtk_main(); exit(0); } void on_error_okbutton_clicked (GtkButton *button, gpointer user_data) { ClearFlag( ERROR_CONDX ); gtk_widget_destroy( error_dialog ); } void on_error_quitbutton_clicked (GtkButton *button, gpointer user_data) { gtk_widget_destroy( error_dialog ); gtk_widget_destroy( main_window ); } void on_wire_editor_destroy (GtkObject *object, gpointer user_data) { wire_editor = NULL; } void on_wire_pcl_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Wire_Editor( EDITOR_SEGPC ); } void on_wire_data_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Wire_Editor( EDITOR_DATA ); } void on_wire_tagnum_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Wire_Editor( EDITOR_TAGNUM ); } void on_wire_len_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Wire_Editor( WIRE_EDITOR_WLEN ); } void on_wire_taper_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Wire_Editor( WIRE_EDITOR_TAPR ); } void on_wire_rlen_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Wire_Editor( WIRE_EDITOR_RLEN ); } void on_wire_rdia_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Wire_Editor( WIRE_EDITOR_RDIA ); } void on_wire_new_button_clicked (GtkButton *button, gpointer user_data) { Wire_Editor( EDITOR_NEW ); } void on_wire_res_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Wire_Editor( EDITOR_LOAD ); } void on_wire_cancel_button_clicked (GtkButton *button, gpointer user_data) { Wire_Editor( EDITOR_CANCEL ); gtk_widget_destroy( wire_editor ); } void on_wire_apply_button_clicked (GtkButton *button, gpointer user_data) { Wire_Editor( EDITOR_APPLY ); } void on_wire_ok_button_clicked (GtkButton *button, gpointer user_data) { Wire_Editor( EDITOR_APPLY ); gtk_widget_destroy( wire_editor ); } void on_gw_clicked (GtkButton *button, gpointer user_data) { if( wire_editor == NULL ) { wire_editor = create_wire_editor(); gtk_widget_hide( lookup_widget(wire_editor, "wire_taperframe") ); gtk_widget_show( wire_editor ); } Wire_Editor( action ); action = EDITOR_NEW; } void on_ga_clicked (GtkButton *button, gpointer user_data) { if( arc_editor == NULL ) { arc_editor = create_arc_editor(); gtk_widget_show( arc_editor ); } Arc_Editor( action ); action = EDITOR_NEW; } void on_gh_clicked (GtkButton *button, gpointer user_data) { if( helix_editor == NULL ) { helix_editor = create_helix_editor(); gtk_widget_show( helix_editor ); } Helix_Editor( action ); action = EDITOR_NEW; } void on_sp_clicked (GtkButton *button, gpointer user_data) { if( patch_editor == NULL ) { patch_editor = create_patch_editor(); gtk_widget_show( patch_editor ); } Patch_Editor( action ); action = EDITOR_NEW; } void on_gr_clicked (GtkButton *button, gpointer user_data) { if( cylinder_editor == NULL ) { cylinder_editor = create_cylinder_editor(); gtk_widget_show( cylinder_editor ); } Cylinder_Editor( action ); action = EDITOR_NEW; } void on_gm_clicked (GtkButton *button, gpointer user_data) { if( transform_editor == NULL ) { transform_editor = create_transform_editor(); gtk_widget_show( transform_editor ); } Transform_Editor( action ); action = EDITOR_NEW; } void on_gx_clicked (GtkButton *button, gpointer user_data) { if( reflect_editor == NULL ) { reflect_editor = create_reflect_editor(); gtk_widget_show( reflect_editor ); } Reflect_Editor( action ); action = EDITOR_NEW; } void on_gs_clicked (GtkButton *button, gpointer user_data) { if( scale_editor == NULL ) { scale_editor = create_scale_editor(); gtk_widget_show( scale_editor ); } Scale_Editor( action ); action = EDITOR_NEW; } void on_ex_clicked (GtkButton *button, gpointer user_data) { if( excitation_command == NULL ) { excitation_command = create_excitation_command(); gtk_widget_show( excitation_command ); } Excitation_Command( action ); action = EDITOR_NEW; } void on_fr_clicked (GtkButton *button, gpointer user_data) { if( frequency_command == NULL ) { frequency_command = create_frequency_command(); gtk_widget_show( frequency_command ); } Frequency_Command( action ); action = EDITOR_NEW; } void on_gn_clicked (GtkButton *button, gpointer user_data) { if( ground_command == NULL ) { ground_command = create_ground_command(); gtk_widget_show( ground_command ); } Ground_Command( action ); action = EDITOR_NEW; } void on_gd_clicked (GtkButton *button, gpointer user_data) { if( ground2_command == NULL ) { ground2_command = create_ground2_command(); gtk_widget_show( ground2_command ); } Ground2_Command( action ); action = EDITOR_NEW; } void on_rp_clicked (GtkButton *button, gpointer user_data) { if( radiation_command == NULL ) { radiation_command = create_radiation_command(); gtk_widget_show( radiation_command ); } Radiation_Command( action ); action = EDITOR_NEW; } void on_ld_clicked (GtkButton *button, gpointer user_data) { if( loading_command == NULL ) { loading_command = create_loading_command(); gtk_widget_show( loading_command ); } Loading_Command( action ); action = EDITOR_NEW; } void on_nt_clicked (GtkButton *button, gpointer user_data) { if( network_command == NULL ) { network_command = create_network_command(); gtk_widget_show( network_command ); } Network_Command( action ); action = EDITOR_NEW; } void on_tl_clicked (GtkButton *button, gpointer user_data) { if( txline_command == NULL ) { txline_command = create_txline_command(); gtk_widget_show( txline_command ); } Txline_Command( action ); action = EDITOR_NEW; } void on_ne_clicked (GtkButton *button, gpointer user_data) { if( nearfield_command == NULL ) { nearfield_command = create_nearfield_command(); gtk_widget_show( nearfield_command ); } Nearfield_Command( action ); action = EDITOR_NEW; } void on_ek_clicked (GtkButton *button, gpointer user_data) { if( kernel_command == NULL ) { kernel_command = create_kernel_command(); gtk_widget_show( kernel_command ); } Kernel_Command( action ); action = EDITOR_NEW; } void on_kh_clicked (GtkButton *button, gpointer user_data) { if( intrange_command == NULL ) { intrange_command = create_intrange_command(); gtk_widget_show( intrange_command ); } Intrange_Command( action ); action = EDITOR_NEW; } void on_xq_clicked (GtkButton *button, gpointer user_data) { if( execute_command == NULL ) { execute_command = create_execute_command(); gtk_widget_show( execute_command ); } Execute_Command( action ); action = EDITOR_NEW; } void on_patch_data_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Patch_Editor( EDITOR_DATA ); } void on_patch_new_button_clicked (GtkButton *button, gpointer user_data) { Patch_Editor( EDITOR_NEW ); } void on_patch_cancel_button_clicked (GtkButton *button, gpointer user_data) { Patch_Editor( EDITOR_CANCEL ); gtk_widget_destroy( patch_editor ); } void on_patch_apply_button_clicked (GtkButton *button, gpointer user_data) { Patch_Editor( EDITOR_APPLY ); } void on_patch_ok_button_clicked (GtkButton *button, gpointer user_data) { Patch_Editor( EDITOR_APPLY ); gtk_widget_destroy( patch_editor ); } void on_patch_editor_destroy (GtkObject *object, gpointer user_data) { patch_editor = NULL; } void on_patch_arbitrary_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if( gtk_toggle_button_get_active(togglebutton) ) Patch_Editor( PATCH_EDITOR_ARBT ); else Patch_Editor( PATCH_EDITOR_SCCD ); } void on_patch_rectangular_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if( gtk_toggle_button_get_active(togglebutton) ) Patch_Editor( PATCH_EDITOR_RECT ); } void on_patch_triangular_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if( gtk_toggle_button_get_active(togglebutton) ) Patch_Editor( PATCH_EDITOR_TRIA ); } void on_patch_quadrilateral_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if( gtk_toggle_button_get_active(togglebutton) ) Patch_Editor( PATCH_EDITOR_QUAD ); } void on_patch_surface_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if( gtk_toggle_button_get_active(togglebutton) ) Patch_Editor( PATCH_EDITOR_SURF ); } void on_arc_data_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Arc_Editor( EDITOR_DATA ); } void on_arc_tagnum_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Arc_Editor( EDITOR_TAGNUM ); } void on_arc_res_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Arc_Editor( EDITOR_LOAD ); } void on_arc_new_button_clicked (GtkButton *button, gpointer user_data) { Arc_Editor( EDITOR_NEW ); } void on_arc_cancel_button_clicked (GtkButton *button, gpointer user_data) { Arc_Editor( EDITOR_CANCEL ); gtk_widget_destroy( arc_editor ); } void on_arc_apply_button_clicked (GtkButton *button, gpointer user_data) { Arc_Editor( EDITOR_APPLY ); } void on_arc_ok_button_clicked (GtkButton *button, gpointer user_data) { Arc_Editor( EDITOR_APPLY ); gtk_widget_destroy( arc_editor ); } void on_arc_editor_destroy (GtkObject *object, gpointer user_data) { arc_editor = NULL; } void on_arc_pcl_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Arc_Editor( EDITOR_SEGPC ); } void on_helix_tagnum_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Helix_Editor( EDITOR_TAGNUM ); } void on_helix_pcl_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Helix_Editor( EDITOR_SEGPC ); } void on_helix_nturns_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Helix_Editor( HELIX_EDITOR_NTURN ); } void on_helix_res_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Helix_Editor( EDITOR_LOAD ); } void on_helix_lh_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if( gtk_toggle_button_get_active(togglebutton) ) Helix_Editor( HELIX_EDITOR_LH ); else Helix_Editor( HELIX_EDITOR_RH ); } void on_helix_data_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Helix_Editor( EDITOR_DATA ); } void on_helix_new_button_clicked (GtkButton *button, gpointer user_data) { Helix_Editor( EDITOR_NEW ); } void on_helix_cancel_button_clicked (GtkButton *button, gpointer user_data) { Helix_Editor( EDITOR_CANCEL ); gtk_widget_destroy( helix_editor ); } void on_helix_apply_button_clicked (GtkButton *button, gpointer user_data) { Helix_Editor( EDITOR_APPLY ); } void on_helix_ok_button_clicked (GtkButton *button, gpointer user_data) { Helix_Editor( EDITOR_APPLY ); gtk_widget_destroy( helix_editor ); } void on_helix_editor_destroy (GtkObject *object, gpointer user_data) { helix_editor = NULL; } void on_helix_linkall_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if( gtk_toggle_button_get_active(togglebutton) ) Helix_Editor( HELIX_EDITOR_LINKALL ); } void on_helix_linkzo_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if( gtk_toggle_button_get_active(togglebutton) ) Helix_Editor( HELIX_EDITOR_LINKZO ); } void on_helix_linkzhl_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { if( gtk_toggle_button_get_active(togglebutton) ) Helix_Editor( HELIX_EDITOR_LINKZHL ); } void on_reflect_taginc_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Reflect_Editor( EDITOR_DATA ); } void on_reflect_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Reflect_Editor( REFLECT_EDITOR_TOGGLE ); } void on_reflect_new_button_clicked (GtkButton *button, gpointer user_data) { Reflect_Editor( EDITOR_NEW ); } void on_reflect_cancel_button_clicked (GtkButton *button, gpointer user_data) { Reflect_Editor( EDITOR_CANCEL ); gtk_widget_destroy( reflect_editor ); } void on_reflect_apply_button_clicked (GtkButton *button, gpointer user_data) { Reflect_Editor( EDITOR_APPLY ); } void on_reflect_ok_button_clicked (GtkButton *button, gpointer user_data) { Reflect_Editor( EDITOR_APPLY ); gtk_widget_destroy( reflect_editor ); } void on_reflect_editor_destroy (GtkObject *object, gpointer user_data) { reflect_editor = NULL; } void on_scale_editor_destroy (GtkObject *object, gpointer user_data) { scale_editor = NULL; } void on_scale_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Scale_Editor( EDITOR_DATA ); } void on_scale_new_button_clicked (GtkButton *button, gpointer user_data) { Scale_Editor( EDITOR_NEW ); } void on_scale_cancel_button_clicked (GtkButton *button, gpointer user_data) { Scale_Editor( EDITOR_CANCEL ); gtk_widget_destroy( scale_editor ); } void on_scale_apply_button_clicked (GtkButton *button, gpointer user_data) { Scale_Editor( EDITOR_APPLY ); } void on_scale_ok_button_clicked (GtkButton *button, gpointer user_data) { Scale_Editor( EDITOR_APPLY ); gtk_widget_destroy( scale_editor ); } void on_cylinder_taginc_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Cylinder_Editor( EDITOR_DATA ); } void on_cylinder_total_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Cylinder_Editor( EDITOR_DATA ); } void on_cylinder_new_button_clicked (GtkButton *button, gpointer user_data) { Cylinder_Editor( EDITOR_NEW ); } void on_cylinder_cancel_button_clicked (GtkButton *button, gpointer user_data) { Cylinder_Editor( EDITOR_CANCEL ); gtk_widget_destroy( cylinder_editor ); } void on_cylinder_apply_button_clicked (GtkButton *button, gpointer user_data) { Cylinder_Editor( EDITOR_APPLY ); } void on_cylinder_ok_button_clicked (GtkButton *button, gpointer user_data) { Cylinder_Editor( EDITOR_APPLY ); gtk_widget_destroy( cylinder_editor ); } void on_cylinder_editor_destroy (GtkObject *object, gpointer user_data) { cylinder_editor = NULL; } void on_transform_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Transform_Editor( EDITOR_DATA ); } void on_transform_new_button_clicked (GtkButton *button, gpointer user_data) { Transform_Editor( EDITOR_NEW ); } void on_transform_cancel_button_clicked (GtkButton *button, gpointer user_data) { Transform_Editor( EDITOR_CANCEL ); gtk_widget_destroy( transform_editor ); } void on_transform_apply_button_clicked (GtkButton *button, gpointer user_data) { Transform_Editor( EDITOR_APPLY ); } void on_transform_ok_button_clicked (GtkButton *button, gpointer user_data) { Transform_Editor( EDITOR_APPLY ); gtk_widget_destroy( transform_editor ); } void on_transform_editor_destroy (GtkObject *object, gpointer user_data) { transform_editor = NULL; } void on_gend_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Gend_Editor( EDITOR_RDBUTTON ); } void on_gend_cancel_button_clicked (GtkButton *button, gpointer user_data) { Gend_Editor( EDITOR_CANCEL ); gtk_widget_destroy( gend_editor ); } void on_gend_apply_button_clicked (GtkButton *button, gpointer user_data) { Gend_Editor( EDITOR_APPLY ); } void on_gend_ok_button_clicked (GtkButton *button, gpointer user_data) { Gend_Editor( EDITOR_APPLY ); gtk_widget_destroy( gend_editor ); } void on_gend_editor_destroy (GtkObject *object, gpointer user_data) { gend_editor = NULL; } void on_kernel_command_destroy (GtkObject *object, gpointer user_data) { kernel_command = NULL; } void on_kernel_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Kernel_Command( COMMAND_CKBUTTON ); } void on_kernel_new_button_clicked (GtkButton *button, gpointer user_data) { Kernel_Command( EDITOR_NEW ); } void on_kernel_cancel_button_clicked (GtkButton *button, gpointer user_data) { Kernel_Command( EDITOR_CANCEL ); gtk_widget_destroy( kernel_command ); } void on_kernel_apply_button_clicked (GtkButton *button, gpointer user_data) { Kernel_Command( EDITOR_APPLY ); } void on_kernel_ok_button_clicked (GtkButton *button, gpointer user_data) { Kernel_Command( EDITOR_APPLY ); gtk_widget_destroy( kernel_command ); } void on_execute_command_destroy (GtkObject *object, gpointer user_data) { execute_command = NULL; } void on_execute_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Execute_Command( COMMAND_RDBUTTON ); } void on_execute_new_button_clicked (GtkButton *button, gpointer user_data) { Execute_Command( EDITOR_NEW ); } void on_execute_cancel_button_clicked (GtkButton *button, gpointer user_data) { Execute_Command( EDITOR_CANCEL ); gtk_widget_destroy( execute_command ); } void on_execute_apply_button_clicked (GtkButton *button, gpointer user_data) { Execute_Command( EDITOR_APPLY ); } void on_execute_ok_button_clicked (GtkButton *button, gpointer user_data) { Execute_Command( EDITOR_APPLY ); gtk_widget_destroy( execute_command ); } void on_intrange_command_destroy (GtkObject *object, gpointer user_data) { intrange_command = NULL; } void on_intrange_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Intrange_Command( EDITOR_DATA ); } void on_intrange_new_button_clicked (GtkButton *button, gpointer user_data) { Intrange_Command( EDITOR_NEW ); } void on_intrange_cancel_button_clicked (GtkButton *button, gpointer user_data) { Intrange_Command( EDITOR_CANCEL ); gtk_widget_destroy( intrange_command ); } void on_intrange_apply_button_clicked (GtkButton *button, gpointer user_data) { Intrange_Command( EDITOR_APPLY ); } void on_intrange_ok_button_clicked (GtkButton *button, gpointer user_data) { Intrange_Command( EDITOR_APPLY ); gtk_widget_destroy( intrange_command ); } void on_ground_command_destroy (GtkObject *object, gpointer user_data) { ground_command = NULL; } void on_ground_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Ground_Command( COMMAND_RDBUTTON ); } void on_ground_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Ground_Command( COMMAND_CKBUTTON ); } void on_ground_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Ground_Command( EDITOR_DATA ); } void on_ground_new_button_clicked (GtkButton *button, gpointer user_data) { Ground_Command( EDITOR_NEW ); } void on_ground_cancel_button_clicked (GtkButton *button, gpointer user_data) { Ground_Command( EDITOR_CANCEL ); gtk_widget_destroy( ground_command ); } void on_ground_apply_button_clicked (GtkButton *button, gpointer user_data) { Ground_Command( EDITOR_APPLY ); } void on_ground_ok_button_clicked (GtkButton *button, gpointer user_data) { Ground_Command( EDITOR_APPLY ); gtk_widget_destroy( ground_command ); } void on_nearfield_command_destroy (GtkObject *object, gpointer user_data) { nearfield_command = NULL; } void on_nearfield_nh_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Nearfield_Command( NEARFIELD_NH_CKBUTTON ); } void on_nearfield_ne_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Nearfield_Command( NEARFIELD_NE_CKBUTTON ); } void on_nearfield_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Nearfield_Command( COMMAND_RDBUTTON ); } void on_nearfield_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Nearfield_Command( EDITOR_DATA ); } void on_nearfield_new_button_clicked (GtkButton *button, gpointer user_data) { Nearfield_Command( EDITOR_NEW ); } void on_nearfield_cancel_button_clicked (GtkButton *button, gpointer user_data) { Nearfield_Command( EDITOR_CANCEL ); gtk_widget_destroy( nearfield_command ); } void on_nearfield_apply_button_clicked (GtkButton *button, gpointer user_data) { Nearfield_Command( EDITOR_APPLY ); } void on_nearfield_ok_button_clicked (GtkButton *button, gpointer user_data) { Nearfield_Command( EDITOR_APPLY ); gtk_widget_destroy( nearfield_command ); } void on_radiation_command_destroy (GtkObject *object, gpointer user_data) { radiation_command = NULL; } void on_radiation_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Radiation_Command( COMMAND_RDBUTTON ); } void on_radiation_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Radiation_Command( EDITOR_DATA ); } void on_radiation_new_button_clicked (GtkButton *button, gpointer user_data) { Radiation_Command( EDITOR_NEW ); } void on_radiation_cancel_button_clicked (GtkButton *button, gpointer user_data) { Radiation_Command( EDITOR_CANCEL ); gtk_widget_destroy( radiation_command ); } void on_radiation_apply_button_clicked (GtkButton *button, gpointer user_data) { Radiation_Command( EDITOR_APPLY ); } void on_radiation_ok_button_clicked (GtkButton *button, gpointer user_data) { Radiation_Command( EDITOR_APPLY ); gtk_widget_destroy( radiation_command ); } void on_excitation_command_destroy (GtkObject *object, gpointer user_data) { excitation_command = NULL; } void on_excitation_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Excitation_Command( COMMAND_RDBUTTON ); } void on_excitation_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Excitation_Command( COMMAND_CKBUTTON ); } void on_excitation_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Excitation_Command( EDITOR_DATA ); } void on_excitation_new_button_clicked (GtkButton *button, gpointer user_data) { Excitation_Command( EDITOR_NEW ); } void on_excitation_cancel_button_clicked (GtkButton *button, gpointer user_data) { Excitation_Command( EDITOR_CANCEL ); gtk_widget_destroy( excitation_command ); } void on_excitation_apply_button_clicked (GtkButton *button, gpointer user_data) { Excitation_Command( EDITOR_APPLY ); } void on_excitation_ok_button_clicked (GtkButton *button, gpointer user_data) { Excitation_Command( EDITOR_APPLY ); gtk_widget_destroy( excitation_command ); } void on_frequency_command_destroy (GtkObject *object, gpointer user_data) { frequency_command = NULL; } void on_frequency_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Frequency_Command( COMMAND_RDBUTTON ); } void on_frequency_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Frequency_Command( EDITOR_DATA ); } void on_frequency_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Frequency_Command( FREQUENCY_EDITOR_FSTEP ); } void on_frequency_new_button_clicked (GtkButton *button, gpointer user_data) { Frequency_Command( EDITOR_NEW ); } void on_frequency_cancel_button_clicked (GtkButton *button, gpointer user_data) { Frequency_Command( EDITOR_CANCEL ); gtk_widget_destroy( frequency_command ); } void on_frequency_apply_button_clicked (GtkButton *button, gpointer user_data) { Frequency_Command( EDITOR_APPLY ); } void on_frequency_ok_button_clicked (GtkButton *button, gpointer user_data) { Frequency_Command( EDITOR_APPLY ); gtk_widget_destroy( frequency_command ); } void on_loading_command_destroy (GtkObject *object, gpointer user_data) { loading_command = NULL; } void on_loading_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Loading_Command( COMMAND_RDBUTTON ); } void on_loading_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Loading_Command( EDITOR_DATA ); } void on_loading_new_button_clicked (GtkButton *button, gpointer user_data) { Loading_Command( EDITOR_NEW ); } void on_loading_cancel_button_clicked (GtkButton *button, gpointer user_data) { Loading_Command( EDITOR_CANCEL ); gtk_widget_destroy( loading_command ); } void on_loading_apply_button_clicked (GtkButton *button, gpointer user_data) { Loading_Command( EDITOR_APPLY ); } void on_loading_ok_button_clicked (GtkButton *button, gpointer user_data) { Loading_Command( EDITOR_APPLY ); gtk_widget_destroy( loading_command ); } void on_network_command_destroy (GtkObject *object, gpointer user_data) { network_command = NULL; } void on_network_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Network_Command( EDITOR_DATA ); } void on_network_new_button_clicked (GtkButton *button, gpointer user_data) { Network_Command( EDITOR_NEW ); } void on_network_cancel_button_clicked (GtkButton *button, gpointer user_data) { Network_Command( EDITOR_CANCEL ); gtk_widget_destroy( network_command ); } void on_network_apply_button_clicked (GtkButton *button, gpointer user_data) { Network_Command( EDITOR_APPLY ); } void on_network_ok_button_clicked (GtkButton *button, gpointer user_data) { Network_Command( EDITOR_APPLY ); gtk_widget_destroy( network_command ); } void on_txline_command_destroy (GtkObject *object, gpointer user_data) { txline_command = NULL; } void on_txline_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Txline_Command( EDITOR_DATA ); } void on_txline_new_button_clicked (GtkButton *button, gpointer user_data) { Txline_Command( EDITOR_NEW ); } void on_txline_cancel_button_clicked (GtkButton *button, gpointer user_data) { Txline_Command( EDITOR_CANCEL ); gtk_widget_destroy( txline_command ); } void on_txline_apply_button_clicked (GtkButton *button, gpointer user_data) { Txline_Command( EDITOR_APPLY ); } void on_txline_ok_button_clicked (GtkButton *button, gpointer user_data) { Txline_Command( EDITOR_APPLY ); gtk_widget_destroy( txline_command ); } void on_txline_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data) { Txline_Command( COMMAND_CKBUTTON ); } void on_ground2_command_destroy (GtkObject *object, gpointer user_data) { ground2_command = NULL; } void on_ground2_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { gtk_spin_button_update( spinbutton ); Ground2_Command( EDITOR_DATA ); } void on_ground2_new_button_clicked (GtkButton *button, gpointer user_data) { Ground2_Command( EDITOR_NEW ); } void on_ground2_cancel_button_clicked (GtkButton *button, gpointer user_data) { Ground2_Command( EDITOR_CANCEL ); gtk_widget_destroy( ground2_command ); } void on_ground2_apply_button_clicked (GtkButton *button, gpointer user_data) { Ground2_Command( EDITOR_APPLY ); } void on_ground2_ok_button_clicked (GtkButton *button, gpointer user_data) { Ground2_Command( EDITOR_APPLY ); gtk_widget_destroy( ground2_command ); } void on_loop_start_clicked (GtkButton *button, gpointer user_data) { Start_Frequency_Loop(); } void on_loop_pause_clicked (GtkButton *button, gpointer user_data) { if( isFlagSet(FREQ_LOOP_RUNNING) ) SetFlag( FREQ_LOOP_STOP ); } void on_loop_reset_clicked (GtkButton *button, gpointer user_data) { if( isFlagClear(FREQ_LOOP_RUNNING) ) { SetFlag( FREQ_LOOP_INIT ); ClearFlag( FREQ_LOOP_RUNNING ); } } static GtkWidget *aboutdialog = NULL; void on_about_activate (GtkMenuItem *menuitem, gpointer user_data) { if( aboutdialog == NULL ) { aboutdialog = create_aboutdialog(); gtk_widget_show( aboutdialog ); gtk_about_dialog_set_program_name( GTK_ABOUT_DIALOG(aboutdialog), PACKAGE ); gtk_about_dialog_set_version( GTK_ABOUT_DIALOG(aboutdialog), VERSION ); } } void on_aboutdialog_close (GtkDialog *dialog, gpointer user_data) { gtk_widget_destroy( aboutdialog ); aboutdialog = NULL; } void on_aboutdialog_response (GtkDialog *dialog, gint response_id, gpointer user_data) { gtk_widget_destroy( aboutdialog ); aboutdialog = NULL; } void on_net_gain_activate (GtkMenuItem *menuitem, gpointer user_data) { if( gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem)) ) SetFlag( PLOT_NETGAIN ); else ClearFlag( PLOT_NETGAIN ); /* Trigger a redraw of frequency plots drawingarea */ if( isFlagSet(PLOT_ENABLED) && isFlagSet(FREQ_LOOP_DONE) ) Plot_Frequency_Data(); } gboolean on_structure_drawingarea_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { structure_proj_params.reset = TRUE; return FALSE; } void on_structure_zoom_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { structure_proj_params.xy_zoom = gtk_spin_button_get_value( spinbutton ); structure_proj_params.xy_zoom /= 100.0; structure_proj_params.xy_scale = structure_proj_params.xy_scale1 * structure_proj_params.xy_zoom; /* Trigger a redraw of structure drawingarea */ Draw_Structure( structure_drawingarea ); } void on_structure_plus_button_clicked (GtkButton *button, gpointer user_data) { structure_proj_params.xy_zoom = gtk_spin_button_get_value( structure_zoom ); structure_proj_params.xy_zoom *= 1.1; gtk_spin_button_set_value( structure_zoom, structure_proj_params.xy_zoom ); } void on_structure_minus_button_clicked (GtkButton *button, gpointer user_data) { structure_proj_params.xy_zoom = gtk_spin_button_get_value( structure_zoom ); structure_proj_params.xy_zoom /= 1.1; gtk_spin_button_set_value( structure_zoom, structure_proj_params.xy_zoom ); } void on_structure_one_button_clicked (GtkButton *button, gpointer user_data) { gtk_spin_button_set_value( structure_zoom, 100.0 ); structure_proj_params.reset = TRUE; New_Projection_Parameters( structure_pixmap_width, structure_pixmap_height, &structure_proj_params ); Draw_Structure( structure_drawingarea ); } gboolean on_rdpattern_drawingarea_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data) { rdpattern_proj_params.reset = TRUE; return FALSE; } void on_rdpattern_zoom_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data) { rdpattern_proj_params.xy_zoom = gtk_spin_button_get_value( spinbutton ); rdpattern_proj_params.xy_zoom /= 100.0; rdpattern_proj_params.xy_scale = rdpattern_proj_params.xy_scale1 * rdpattern_proj_params.xy_zoom; /* Trigger a redraw of structure drawingarea */ Draw_Radiation( rdpattern_drawingarea ); } void on_rdpattern_plus_button_clicked (GtkButton *button, gpointer user_data) { rdpattern_proj_params.xy_zoom = gtk_spin_button_get_value( rdpattern_zoom ); rdpattern_proj_params.xy_zoom *= 1.1; gtk_spin_button_set_value( rdpattern_zoom, rdpattern_proj_params.xy_zoom ); } void on_rdpattern_minus_button_clicked (GtkButton *button, gpointer user_data) { rdpattern_proj_params.xy_zoom = gtk_spin_button_get_value( rdpattern_zoom ); rdpattern_proj_params.xy_zoom /= 1.1; gtk_spin_button_set_value( rdpattern_zoom, rdpattern_proj_params.xy_zoom ); } void on_rdpattern_one_button_clicked (GtkButton *button, gpointer user_data) { gtk_spin_button_set_value( rdpattern_zoom, 100.0 ); rdpattern_proj_params.reset = TRUE; New_Projection_Parameters( rdpattern_pixmap_width, rdpattern_pixmap_height, &rdpattern_proj_params ); Draw_Radiation( rdpattern_drawingarea ); } gboolean on_structure_drawingarea_scroll_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { structure_proj_params.xy_zoom = gtk_spin_button_get_value( structure_zoom ); if( event->scroll.direction == GDK_SCROLL_UP ) structure_proj_params.xy_zoom *= 1.1; else if( event->scroll.direction == GDK_SCROLL_DOWN ) structure_proj_params.xy_zoom /= 1.1; gtk_spin_button_set_value( structure_zoom, structure_proj_params.xy_zoom ); return FALSE; } gboolean on_rdpattern_drawingarea_scroll_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { rdpattern_proj_params.xy_zoom = gtk_spin_button_get_value( rdpattern_zoom ); if( event->scroll.direction == GDK_SCROLL_UP ) rdpattern_proj_params.xy_zoom *= 1.1; else if( event->scroll.direction == GDK_SCROLL_DOWN ) rdpattern_proj_params.xy_zoom /= 1.1; gtk_spin_button_set_value( rdpattern_zoom, rdpattern_proj_params.xy_zoom ); return FALSE; } xnec2c-3.4/src/callbacks.h000066400000000000000000001340321257141547200154340ustar00rootroot00000000000000#include void on_main_window_destroy (GtkObject *object, gpointer user_data); gboolean on_main_window_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_new_activate (GtkMenuItem *menuitem, gpointer user_data); void on_open_input_activate (GtkMenuItem *menuitem, gpointer user_data); void on_nec2_edit_activate (GtkMenuItem *menuitem, gpointer user_data); void on_main_save_activate (GtkMenuItem *menuitem, gpointer user_data); void on_main_save_as_activate (GtkMenuItem *menuitem, gpointer user_data); void on_quit_activate (GtkMenuItem *menuitem, gpointer user_data); void main_view_menuitem_activate (GtkMenuItem *menuitem, gpointer user_data); void on_main_rdpattern_activate (GtkMenuItem *menuitem, gpointer user_data); void on_main_freqplots_activate (GtkMenuItem *menuitem, gpointer user_data); void main_pol_menu_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_total_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_horizontal_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_vertical_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_right_hand_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_left_hand_activate (GtkMenuItem *menuitem, gpointer user_data); void on_common_projection_activate (GtkMenuItem *menuitem, gpointer user_data); void on_common_freq_activate (GtkMenuItem *menuitem, gpointer user_data); void on_about_activate (GtkMenuItem *menuitem, gpointer user_data); void on_main_currents_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_main_charges_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_loop_start_clicked (GtkButton *button, gpointer user_data); void on_loop_pause_clicked (GtkButton *button, gpointer user_data); void on_loop_reset_clicked (GtkButton *button, gpointer user_data); gboolean on_main_colorcode_drawingarea_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data); void on_main_freq_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_main_freq_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_main_new_freq_clicked (GtkButton *button, gpointer user_data); gboolean on_structure_drawingarea_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data); gboolean on_structure_drawingarea_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data); gboolean on_structure_drawingarea_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data); gboolean on_structure_drawingarea_motion_notify_event( GtkWidget *widget, GdkEventMotion *event, gpointer user_data); void on_main_x_axis_clicked (GtkButton *button, gpointer user_data); void on_main_y_axis_clicked (GtkButton *button, gpointer user_data); void on_main_z_axis_clicked (GtkButton *button, gpointer user_data); void on_main_default_view_clicked (GtkButton *button, gpointer user_data); void on_main_rotate_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_main_incline_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_structure_zoom_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_structure_plus_button_clicked (GtkButton *button, gpointer user_data); void on_structure_minus_button_clicked (GtkButton *button, gpointer user_data); void on_structure_one_button_clicked (GtkButton *button, gpointer user_data); void on_filechooserdialog_response (GtkDialog *dialog, gint response_id, gpointer user_data); void on_filechoser_cancel_clicked (GtkButton *button, gpointer user_data); void on_fileselection_response (GtkDialog *dialog, gint response_id, gpointer user_data); void on_fileselection_cancel_clicked (GtkButton *button, gpointer user_data); gboolean on_freqplots_window_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_freqplots_window_destroy (GtkObject *object, gpointer user_data); void on_freqplots_save_activate (GtkMenuItem *menuitem, gpointer user_data); void on_freqplots_save_as_activate (GtkMenuItem *menuitem, gpointer user_data); void freqplots_pol_menu_activate (GtkMenuItem *menuitem, gpointer user_data); void on_net_gain_activate (GtkMenuItem *menuitem, gpointer user_data); void on_freqplots_gmax_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_freqplots_gdir_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_freqplots_gviewer_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_freqplots_vswr_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_freqplots_zrlzim_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_freqplots_zmgzph_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_freqplots_zo_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); gboolean on_freqplots_drawingarea_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data); gboolean on_freqplots_drawingarea_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data); gboolean on_freqplots_drawingarea_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data); gboolean on_rdpattern_window_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_rdpattern_window_destroy (GtkObject *object, gpointer user_data); void on_rdpattern_save_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_save_as_activate (GtkMenuItem *menuitem, gpointer user_data); void rdpattern_view_menuitem_activate (GtkMenuItem *menuitem, gpointer user_data); void rdpattern_pol_menu_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_linear_power_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_linear_voltage_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_arrl_style_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_logarithmic_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_e_field_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_h_field_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_poynting_vector_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_animate_activate (GtkMenuItem *menuitem, gpointer user_data); void on_near_peak_value_activate (GtkMenuItem *menuitem, gpointer user_data); void on_near_snapshot_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_gain_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_rdpattern_eh_togglebutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); gboolean on_rdpattern_colorcode_drawingarea_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data); void on_rdpattern_freq_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_rdpattern_new_freq_clicked (GtkButton *button, gpointer user_data); gboolean on_rdpattern_drawingarea_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data); gboolean on_rdpattern_drawingarea_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data); gboolean on_rdpattern_drawingarea_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data); gboolean on_rdpattern_drawingarea_motion_notify_event( GtkWidget *widget, GdkEventMotion *event, gpointer user_data); void on_rdpattern_x_axis_clicked (GtkButton *button, gpointer user_data); void on_rdpattern_y_axis_clicked (GtkButton *button, gpointer user_data); void on_rdpattern_z_axis_clicked (GtkButton *button, gpointer user_data); void on_rdpattern_default_view_clicked (GtkButton *button, gpointer user_data); void on_rdpattern_rotate_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_rdpattern_incline_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_rdpattern_zoom_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_rdpattern_plus_button_clicked (GtkButton *button, gpointer user_data); void on_rdpattern_minus_button_clicked (GtkButton *button, gpointer user_data); void on_rdpattern_one_button_clicked (GtkButton *button, gpointer user_data); void on_quit_dialog_destroy (GtkObject *object, gpointer user_data); void on_quit_cancelbutton_clicked (GtkButton *button, gpointer user_data); void on_quit_okbutton_clicked (GtkButton *button, gpointer user_data); gboolean on_error_dialog_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_error_quitbutton_clicked (GtkButton *button, gpointer user_data); void on_error_okbutton_clicked (GtkButton *button, gpointer user_data); void on_error_stopbutton_clicked (GtkButton *button, gpointer user_data); void on_animate_dialog_destroy (GtkObject *object, gpointer user_data); void on_animation_applybutton_clicked (GtkButton *button, gpointer user_data); void on_animation_cancelbutton_clicked (GtkButton *button, gpointer user_data); void on_animation_okbutton_clicked (GtkButton *button, gpointer user_data); gboolean on_nec2_editor_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_nec2_editor_destroy (GtkObject *object, gpointer user_data); void on_nec2_row_add_clicked (GtkButton *button, gpointer user_data); void on_nec2_row_remv_clicked (GtkButton *button, gpointer user_data); void on_nec2_treeview_clear_clicked (GtkButton *button, gpointer user_data); void on_nec2_save_as_clicked (GtkButton *button, gpointer user_data); void on_nec2_save_clicked (GtkButton *button, gpointer user_data); void on_nec2_revert_clicked (GtkButton *button, gpointer user_data); gboolean on_nec2_cmnt_treeview_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data); void on_gw_clicked (GtkButton *button, gpointer user_data); void on_ga_clicked (GtkButton *button, gpointer user_data); void on_gh_clicked (GtkButton *button, gpointer user_data); void on_sp_clicked (GtkButton *button, gpointer user_data); void on_gr_clicked (GtkButton *button, gpointer user_data); void on_gm_clicked (GtkButton *button, gpointer user_data); void on_gx_clicked (GtkButton *button, gpointer user_data); void on_gs_clicked (GtkButton *button, gpointer user_data); gboolean on_nec2_geom_treeview_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data); void on_ex_clicked (GtkButton *button, gpointer user_data); void on_fr_clicked (GtkButton *button, gpointer user_data); void on_gn_clicked (GtkButton *button, gpointer user_data); void on_rp_clicked (GtkButton *button, gpointer user_data); void on_ld_clicked (GtkButton *button, gpointer user_data); void on_nt_clicked (GtkButton *button, gpointer user_data); void on_tl_clicked (GtkButton *button, gpointer user_data); void on_ne_clicked (GtkButton *button, gpointer user_data); void on_xq_clicked (GtkButton *button, gpointer user_data); void on_kh_clicked (GtkButton *button, gpointer user_data); void on_ek_clicked (GtkButton *button, gpointer user_data); void on_gd_clicked (GtkButton *button, gpointer user_data); gboolean on_nec2_cmnd_treeview_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer user_data); void on_wire_editor_destroy (GtkObject *object, gpointer user_data); void on_wire_tagnum_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_wire_data_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_wire_pcl_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_wire_len_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_wire_res_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_wire_taper_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_wire_rdia_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_wire_rlen_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_wire_new_button_clicked (GtkButton *button, gpointer user_data); void on_wire_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_wire_apply_button_clicked (GtkButton *button, gpointer user_data); void on_wire_ok_button_clicked (GtkButton *button, gpointer user_data); void on_patch_editor_destroy (GtkObject *object, gpointer user_data); void on_patch_arbitrary_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_patch_rectangular_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_patch_triangular_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_patch_quadrilateral_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_patch_surface_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_patch_data_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_patch_new_button_clicked (GtkButton *button, gpointer user_data); void on_patch_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_patch_apply_button_clicked (GtkButton *button, gpointer user_data); void on_patch_ok_button_clicked (GtkButton *button, gpointer user_data); void on_arc_editor_destroy (GtkObject *object, gpointer user_data); void on_arc_data_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_arc_tagnum_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_arc_pcl_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_arc_res_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_arc_new_button_clicked (GtkButton *button, gpointer user_data); void on_arc_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_arc_apply_button_clicked (GtkButton *button, gpointer user_data); void on_arc_ok_button_clicked (GtkButton *button, gpointer user_data); void on_transform_editor_destroy (GtkObject *object, gpointer user_data); void on_transform_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_transform_new_button_clicked (GtkButton *button, gpointer user_data); void on_transform_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_transform_apply_button_clicked (GtkButton *button, gpointer user_data); void on_transform_ok_button_clicked (GtkButton *button, gpointer user_data); void on_helix_editor_destroy (GtkObject *object, gpointer user_data); void on_helix_tagnum_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_helix_data_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_helix_pcl_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_helix_nturns_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_helix_res_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_helix_linkzo_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_helix_linkzhl_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_helix_linkall_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_helix_lh_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_helix_new_button_clicked (GtkButton *button, gpointer user_data); void on_helix_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_helix_apply_button_clicked (GtkButton *button, gpointer user_data); void on_helix_ok_button_clicked (GtkButton *button, gpointer user_data); void on_reflect_editor_destroy (GtkObject *object, gpointer user_data); void on_reflect_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_reflect_taginc_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_reflect_new_button_clicked (GtkButton *button, gpointer user_data); void on_reflect_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_reflect_apply_button_clicked (GtkButton *button, gpointer user_data); void on_reflect_ok_button_clicked (GtkButton *button, gpointer user_data); void on_scale_editor_destroy (GtkObject *object, gpointer user_data); void on_scale_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_scale_new_button_clicked (GtkButton *button, gpointer user_data); void on_scale_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_scale_apply_button_clicked (GtkButton *button, gpointer user_data); void on_scale_ok_button_clicked (GtkButton *button, gpointer user_data); void on_cylinder_editor_destroy (GtkObject *object, gpointer user_data); void on_cylinder_taginc_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_cylinder_total_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_cylinder_new_button_clicked (GtkButton *button, gpointer user_data); void on_cylinder_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_cylinder_apply_button_clicked (GtkButton *button, gpointer user_data); void on_cylinder_ok_button_clicked (GtkButton *button, gpointer user_data); void on_kernel_command_destroy (GtkObject *object, gpointer user_data); void on_kernel_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_kernel_new_button_clicked (GtkButton *button, gpointer user_data); void on_kernel_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_kernel_apply_button_clicked (GtkButton *button, gpointer user_data); void on_kernel_ok_button_clicked (GtkButton *button, gpointer user_data); void on_execute_command_destroy (GtkObject *object, gpointer user_data); void on_execute_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_execute_new_button_clicked (GtkButton *button, gpointer user_data); void on_execute_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_execute_apply_button_clicked (GtkButton *button, gpointer user_data); void on_execute_ok_button_clicked (GtkButton *button, gpointer user_data); void on_intrange_command_destroy (GtkObject *object, gpointer user_data); void on_intrange_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_intrange_new_button_clicked (GtkButton *button, gpointer user_data); void on_intrange_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_intrange_apply_button_clicked (GtkButton *button, gpointer user_data); void on_intrange_ok_button_clicked (GtkButton *button, gpointer user_data); void on_ground_command_destroy (GtkObject *object, gpointer user_data); void on_ground_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_ground_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_ground_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_ground_new_button_clicked (GtkButton *button, gpointer user_data); void on_ground_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_ground_apply_button_clicked (GtkButton *button, gpointer user_data); void on_ground_ok_button_clicked (GtkButton *button, gpointer user_data); void on_nearfield_command_destroy (GtkObject *object, gpointer user_data); void on_nearfield_nh_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_nearfield_ne_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_nearfield_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_nearfield_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_nearfield_new_button_clicked (GtkButton *button, gpointer user_data); void on_nearfield_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_nearfield_apply_button_clicked (GtkButton *button, gpointer user_data); void on_nearfield_ok_button_clicked (GtkButton *button, gpointer user_data); void on_radiation_command_destroy (GtkObject *object, gpointer user_data); void on_radiation_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_radiation_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_radiation_new_button_clicked (GtkButton *button, gpointer user_data); void on_radiation_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_radiation_apply_button_clicked (GtkButton *button, gpointer user_data); void on_radiation_ok_button_clicked (GtkButton *button, gpointer user_data); void on_excitation_command_destroy (GtkObject *object, gpointer user_data); void on_excitation_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_excitation_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_excitation_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_excitation_new_button_clicked (GtkButton *button, gpointer user_data); void on_excitation_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_excitation_apply_button_clicked (GtkButton *button, gpointer user_data); void on_excitation_ok_button_clicked (GtkButton *button, gpointer user_data); void on_frequency_command_destroy (GtkObject *object, gpointer user_data); void on_frequency_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_frequency_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_frequency_step_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_frequency_new_button_clicked (GtkButton *button, gpointer user_data); void on_frequency_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_frequency_apply_button_clicked (GtkButton *button, gpointer user_data); void on_frequency_ok_button_clicked (GtkButton *button, gpointer user_data); void on_loading_command_destroy (GtkObject *object, gpointer user_data); void on_loading_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_loading_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_loading_new_button_clicked (GtkButton *button, gpointer user_data); void on_loading_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_loading_apply_button_clicked (GtkButton *button, gpointer user_data); void on_loading_ok_button_clicked (GtkButton *button, gpointer user_data); void on_network_command_destroy (GtkObject *object, gpointer user_data); void on_network_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_network_new_button_clicked (GtkButton *button, gpointer user_data); void on_network_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_network_apply_button_clicked (GtkButton *button, gpointer user_data); void on_network_ok_button_clicked (GtkButton *button, gpointer user_data); void on_txline_command_destroy (GtkObject *object, gpointer user_data); void on_txline_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_txline_checkbutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_txline_new_button_clicked (GtkButton *button, gpointer user_data); void on_txline_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_txline_apply_button_clicked (GtkButton *button, gpointer user_data); void on_txline_ok_button_clicked (GtkButton *button, gpointer user_data); void on_ground2_command_destroy (GtkObject *object, gpointer user_data); void on_ground2_spinbutton_value_changed (GtkSpinButton *spinbutton, gpointer user_data); void on_ground2_new_button_clicked (GtkButton *button, gpointer user_data); void on_ground2_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_ground2_apply_button_clicked (GtkButton *button, gpointer user_data); void on_ground2_ok_button_clicked (GtkButton *button, gpointer user_data); void on_gend_editor_destroy (GtkObject *object, gpointer user_data); void on_gend_radiobutton_toggled (GtkToggleButton *togglebutton, gpointer user_data); void on_gend_cancel_button_clicked (GtkButton *button, gpointer user_data); void on_gend_apply_button_clicked (GtkButton *button, gpointer user_data); void on_gend_ok_button_clicked (GtkButton *button, gpointer user_data); void on_aboutdialog_close (GtkDialog *dialog, gpointer user_data); void on_aboutdialog_response (GtkDialog *dialog, gint response_id, gpointer user_data); gboolean on_structure_drawingarea_scroll_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); gboolean on_rdpattern_drawingarea_scroll_event (GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_rdpattern_overlay_structure_activate (GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_save_as_gnuplot_activate (GtkMenuItem *menuitem, gpointer user_data); void on_freqplots_save_as_gnuplot_activate (GtkMenuItem *menuitem, gpointer user_data); void on_struct_save_as_gnuplot_activate (GtkMenuItem *menuitem, gpointer user_data); xnec2c-3.4/src/cmnd_edit.c000066400000000000000000002172441257141547200154450ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* comnd_edit.c * * NEC2 command editing functions for xnec2c */ #include "cmnd_edit.h" #include "shared.h" /*------------------------------------------------------------------------*/ /* Excitation_Command() * * Edits the Excitation command (EX card) parameters */ void Excitation_Command( int action ) { /* For looking up spinbuttons/toggles */ GtkSpinButton *spin; GtkToggleButton *toggle; /* Spinbutton labels */ #define EX_LABELS 8 static gchar *labels[EX_LABELS] = { "excitation_i2_label", "excitation_i3_label", "excitation_f1_label", "excitation_f2_label", "excitation_f3_label", "excitation_f4_label", "excitation_f5_label", "excitation_f6_label" }; /* For reading/writing to EX row */ static GtkTreeIter iter_ex; int idx, idi, idf; /* Integer data (I1-I4) */ static gint iv[4] = { 0, 0, 0, 0 }; /* Float data (F1-F6) */ static gdouble fv[6] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; /* Command radio buttons */ #define EX_TYPRDBTN 6 /* Excitation type */ static gchar *typrdbtn[EX_TYPRDBTN] = { "excitation_i10_radiobutton", "excitation_i11_radiobutton", "excitation_i12_radiobutton", "excitation_i13_radiobutton", "excitation_i14_radiobutton", "excitation_i15_radiobutton" }; /* Command data spinbuttons */ static gchar *ispin[2] = { "excitation_i2_spinbutton", "excitation_i3_spinbutton" }; static gchar *fspin[6] = { "excitation_f1_spinbutton", "excitation_f2_spinbutton", "excitation_f3_spinbutton", "excitation_f4_spinbutton", "excitation_f5_spinbutton", "excitation_f6_spinbutton" }; /* Card (row) name */ gchar name[3]; static gboolean label = TRUE, /* Enable setting of spinbutton labels */ save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, excitation_command) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { Set_Command_Data( cmnd_store, &iter_ex, iv, fv ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New excitation row to create */ /* Insert a default EN card if list is empty */ Insert_EN_Card( cmnd_store, &iter_ex ); /* Insert a new blank EX row after a selected row, * if any, otherwise before the last (EN) row */ Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_ex, "EX" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); break; case EDITOR_EDIT: /* Edit a command row (EX card) */ /* Get selected row */ Get_Selected_Row( cmnd_treeview, cmnd_store, &iter_ex, name ); /* Get data from command editor */ Get_Command_Data( cmnd_store, &iter_ex, iv, fv ); /* Write int data to the command editor */ for( idi = SPIN_COL_I2; idi <= SPIN_COL_I3; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( excitation_command, ispin[idi - SPIN_COL_I2]) ); gtk_spin_button_set_value( spin, iv[idi] ); } /* Write float data to the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( excitation_command, fspin[idf]) ); gtk_spin_button_set_value( spin, fv[idf] ); } /* Set radio buttons */ toggle = GTK_TOGGLE_BUTTON( lookup_widget(excitation_command, typrdbtn[iv[SPIN_COL_I1]]) ); gtk_toggle_button_set_active( toggle, TRUE ); /* Set check buttons */ toggle = GTK_TOGGLE_BUTTON( lookup_widget(excitation_command, "excitation_i419_checkbutton") ); if( iv[SPIN_COL_I4] & 0x0a ) gtk_toggle_button_set_active( toggle, TRUE ); else gtk_toggle_button_set_active( toggle, FALSE ); toggle = GTK_TOGGLE_BUTTON( lookup_widget(excitation_command, "excitation_i420_checkbutton") ); if( iv[SPIN_COL_I4] & 0x01 ) gtk_toggle_button_set_active( toggle, TRUE ); else gtk_toggle_button_set_active( toggle, FALSE ); label = TRUE; break; case EDITOR_CANCEL: /* Cancel excitation editor */ /* Remove card(s) */ Remove_Row( cmnd_store, &iter_ex ); save = busy = FALSE; return; case COMMAND_RDBUTTON: /* Radio button toggled in editor window */ /* Find active excitation type radio button */ for( idx = 0; idx < EX_TYPRDBTN; idx++ ) { toggle = GTK_TOGGLE_BUTTON( lookup_widget(excitation_command, typrdbtn[idx]) ); if( gtk_toggle_button_get_active(toggle) ) break; } iv[SPIN_COL_I1] = idx; label = save = TRUE; break; case COMMAND_CKBUTTON: /* Check button toggled in editor window */ /* Find active print control check button * (matrix asymmetry and segment impedance) */ toggle = GTK_TOGGLE_BUTTON( lookup_widget(excitation_command, "excitation_i419_checkbutton") ); if( gtk_toggle_button_get_active(toggle) ) iv[SPIN_COL_I4] = 10; else iv[SPIN_COL_I4] = 0; toggle = GTK_TOGGLE_BUTTON( lookup_widget(excitation_command, "excitation_i420_checkbutton") ); if( gtk_toggle_button_get_active(toggle) ) iv[SPIN_COL_I4] += 1; save = TRUE; break; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; } /* switch( action ) */ /* Read int data from the command editor */ for( idi = SPIN_COL_I2; idi <= SPIN_COL_I3; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( excitation_command, ispin[idi - SPIN_COL_I2]) ); iv[idi] = gtk_spin_button_get_value_as_int( spin ); } /* Read float data from the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( excitation_command, fspin[idf]) ); fv[idf] = gtk_spin_button_get_value( spin ); } /* Set spin button labels */ if( label ) { switch( iv[SPIN_COL_I1] ) /* Excitation type */ { case 0: case 5: /* Voltage source */ { gchar *text[EX_LABELS] = { _("Tag Number"), _("Segment Number"), _("Voltage Real Part"), _("Voltage Imaginary Part"), _("Normalization Factor"), _(" ** NOT USED **"), _(" ** NOT USED **"), _(" ** NOT USED **"), }; /* Clear unused spin buttons */ for( idf = SPIN_COL_F4; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(excitation_command, fspin[idf]) ); gtk_spin_button_set_value( spin, 0 ); } Set_Labels( excitation_command, labels, text, EX_LABELS ); } break; case 1: case 2: case 3: /* Incident wave */ { gchar *text[EX_LABELS] = { _("Num of Theta Angles"), _("Num of Phi Angles"), _("Theta Angle (deg)"), _("Phi Angle (deg)"), _("Eta Angle (deg)"), _("Theta Increment (deg)"), _("Phi Increment (deg)"), _("Minor/Major Axis") }; Set_Labels( excitation_command, labels, text, EX_LABELS ); } break; case 4: /* Current source */ { gchar *text[EX_LABELS] = { _(" ** NOT USED **"), _(" ** NOT USED **"), _("X Position (m)"), _("Y Position (m)"), _("Z Position (m)"), _("alpha Angle (deg)"), _("beta Angle (deg)"), _("Current Moment (A.m)") }; /* Clear unused spin buttons */ for( idx = 0; idx < 2; idx++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(excitation_command, ispin[idx]) ); gtk_spin_button_set_value( spin, 0 ); } Set_Labels( excitation_command, labels, text, EX_LABELS ); } label = FALSE; } /* switch( iv[SPIN_COL_I1] ) */ } /* if( label ) */ /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Excitation_Command() */ /*------------------------------------------------------------------------*/ /* Frequency_Command() * * Edits the Frequency command (FR card) parameters */ void Frequency_Command( int action ) { /* For looking up spinbuttons */ GtkSpinButton *spin; /* For reading/writing to FR row */ static GtkTreeIter iter_fr; int idf; /* Integer data (I1-I4) */ static gint iv[4] = { 0, 0, 0, 0 }; /* Float data (F1-F6) */ static gdouble fv[6] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; /* Command data spinbuttons */ static gchar *fspin[3] = { "frequency_start_spinbutton", "frequency_step_spinbutton", "frequency_end_spinbutton" }; /* Card (row) name */ gchar name[3]; static gboolean save = FALSE, /* Enable saving of editor data */ fstep = FALSE, /* Set frequency step to editor */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, frequency_command) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { Set_Command_Data( cmnd_store, &iter_fr, iv, fv ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Read int data from the command editor */ spin = GTK_SPIN_BUTTON( lookup_widget( frequency_command, "frequency_num_spinbutton") ); iv[SPIN_COL_I2] = gtk_spin_button_get_value_as_int( spin ); /* Read float data from the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F3; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( frequency_command, fspin[idf]) ); fv[idf] = gtk_spin_button_get_value( spin ); } /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New frequency row to create */ /* Insert a default EN card if list is empty */ Insert_EN_Card( cmnd_store, &iter_fr ); /* Insert a new blank FR row after a selected row, * if any, otherwise before the last (EN) row */ Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_fr, "FR" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); break; case EDITOR_EDIT: /* Edit a command row (FR card) */ /* Get selected row */ Get_Selected_Row( cmnd_treeview, cmnd_store, &iter_fr, name ); /* Get data from command editor */ Get_Command_Data( cmnd_store, &iter_fr, iv, fv ); /* Write int data to the command editor */ spin = GTK_SPIN_BUTTON( lookup_widget( frequency_command, "frequency_num_spinbutton") ); gtk_spin_button_set_value( spin, iv[SPIN_COL_I2] ); /* Write float data to the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F2; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(frequency_command, fspin[idf]) ); gtk_spin_button_set_value( spin, fv[idf] ); } /* Calculate and set end freq to editor */ if( iv[SPIN_COL_I2] > 1 ) { if( iv[SPIN_COL_I1] == 0 ) /* Additive stepping */ fv[SPIN_COL_F3] = fv[SPIN_COL_F1] + fv[SPIN_COL_F2]*(gdouble)(iv[SPIN_COL_I2]-1); else /* Multiplicative stepping */ fv[SPIN_COL_F3] = fv[SPIN_COL_F1]*pow( fv[SPIN_COL_F2], (gdouble)(iv[SPIN_COL_I2]-1) ); spin = GTK_SPIN_BUTTON( lookup_widget(frequency_command, fspin[SPIN_COL_F3]) ); gtk_spin_button_set_value( spin, fv[SPIN_COL_F3] ); } /* if( iv[SPIN_COL_I2] > 1 ) */ /* Set stepping type radio button */ if( iv[SPIN_COL_I1] == 0 ) gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(lookup_widget( frequency_command, "frequency_add_radiobutton")), TRUE ); else gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(lookup_widget( frequency_command, "frequency_mul_radiobutton")), TRUE ); break; case EDITOR_CANCEL: /* Cancel frequency editor */ /* Remove card(s) */ Remove_Row( cmnd_store, &iter_fr ); save = busy = FALSE; return; case COMMAND_RDBUTTON: /* Radio button toggled in editor window */ /* Set frequency stepping type */ if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(lookup_widget( frequency_command, "frequency_add_radiobutton"))) ) iv[SPIN_COL_I1] = 0; else iv[SPIN_COL_I1] = 1; save = TRUE; break; case FREQUENCY_EDITOR_FSTEP: /* Frequency step changed */ fstep = FALSE; if( iv[SPIN_COL_I1] == 0 ) /* Additive stepping */ iv[SPIN_COL_I2] = (gint)((fv[SPIN_COL_F3] - fv[SPIN_COL_F1])/fv[SPIN_COL_F2]) + 1; else /* Multiplicative stepping */ iv[SPIN_COL_I2] = (gint)(log(fv[SPIN_COL_F3] / fv[SPIN_COL_F1])/log(fv[SPIN_COL_F2])) + 1; spin = GTK_SPIN_BUTTON( lookup_widget( frequency_command, "frequency_num_spinbutton") ); gtk_spin_button_set_value( spin, iv[SPIN_COL_I2] ); save = TRUE; break; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; } /* switch( action ) */ /* Calculate and set freq step to editor */ if( fstep && (iv[SPIN_COL_I2] > 1 )) { if( iv[SPIN_COL_I1] == 0 ) /* Additive stepping */ fv[SPIN_COL_F2] = (fv[SPIN_COL_F3]-fv[SPIN_COL_F1]) / (gdouble)(iv[SPIN_COL_I2]-1); else /* Multiplicative stepping */ fv[SPIN_COL_F2] = pow(fv[SPIN_COL_F3]/fv[SPIN_COL_F1], 1.0/(gdouble)(iv[SPIN_COL_I2]-1)); spin = GTK_SPIN_BUTTON( lookup_widget(frequency_command, fspin[SPIN_COL_F2]) ); gtk_spin_button_set_value( spin, fv[SPIN_COL_F2] ); } /* if( fstep ) */ else fstep = TRUE; /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Frequency_Command() */ /*------------------------------------------------------------------------*/ /* Ground_Command() * * Edits the Ground command (GN card) parameters */ void Ground_Command( int action ) { /* For looking up spinbuttons/togglebuttons */ GtkSpinButton *spin; GtkToggleButton *toggle; /* For showing/hiding frames */ GtkFrame *frame; /* For reading/writing to GN/GD row */ static GtkTreeIter iter_gn, iter_gd; int idx, idf; /* Integer data (I1-I4) */ static gint iv[8] = { 1, 0, 0, 0, 0, 0, 0, 0 }; /* Float data (F1-F6) */ static gdouble fv[12]; /* Command radio buttons */ #define GN_RDBTN 4 static gchar *rdbutton[GN_RDBTN] = { "ground_null_radiobutton", "ground_refl_radiobutton", "ground_perf_radiobutton", "ground_smfld_radiobutton" }; /* Command data spinbuttons */ static gchar *fspin[8] = { "ground_diel1_spinbutton", "ground_res1_spinbutton", "ground_diel2_spinbutton", "ground_res2_spinbutton", "ground_dist2_spinbutton", "ground_below_spinbutton", "ground_scrnrd_spinbutton", "ground_diam_spinbutton" }; /* Card (row) name */ gchar name[3]; static gboolean radl = FALSE, /* Radial ground screen present */ scmd = FALSE, /* Second medium present (cliff) */ both = FALSE, /* Both above selected */ save = FALSE, /* Enable saving of editor data */ show = TRUE, /* Show/hide frames according to ground type */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, ground_command) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { Set_Command_Data( cmnd_store, &iter_gn, iv, fv ); if( both ) Set_Command_Data( cmnd_store, &iter_gd, &iv[CMND_NUM_ICOLS], &fv[CMND_NUM_FCOLS] ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New ground row to create */ /* Reset to perfect ground */ radl = scmd = both = FALSE; show = TRUE; iv[SPIN_COL_I1] = 1; iv[SPIN_COL_I2] = 0; toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_perf_radiobutton") ); gtk_toggle_button_set_active( toggle, TRUE ); /* Insert a default EN card if list is empty */ Insert_EN_Card( cmnd_store, &iter_gn ); /* Insert a new blank GN row after a selected row, * if any, otherwise before the last (EN) row */ Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_gn, "GN" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); save = TRUE; break; case EDITOR_EDIT: /* Edit a command row (GN) selected in treeview */ /* Reset flags and check buttons */ radl = scmd = both = FALSE; show = TRUE; toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_radl_checkbutton") ); gtk_toggle_button_set_active( toggle, FALSE ); toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_secmd_checkbutton") ); gtk_toggle_button_set_active( toggle, FALSE ); /* Get selected row */ Get_Selected_Row( cmnd_treeview, cmnd_store, &iter_gn, name ); /* Get data from command editor */ Get_Command_Data( cmnd_store, &iter_gn, iv, fv ); /* Set ground type radio buttons */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, rdbutton[iv[SPIN_COL_I1]+1]) ); gtk_toggle_button_set_active( toggle, TRUE ); /* Write 1st ground data to the command editor */ if( (iv[SPIN_COL_I1] != 1) && (iv[SPIN_COL_I1] != -1) ) for( idf = SPIN_COL_F1; idf <= SPIN_COL_F2; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(ground_command, fspin[idf]) ); gtk_spin_button_set_value( spin, fv[idf] ); } /* Radial ground screen specified */ if( iv[SPIN_COL_I2] > 0 ) { radl = TRUE; /* Radial ground screen check button */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_radl_checkbutton") ); gtk_toggle_button_set_active( toggle, TRUE ); /* Write num of radials to the command editor */ spin = GTK_SPIN_BUTTON( lookup_widget( ground_command, "ground_nrad_spinbutton") ); gtk_spin_button_set_value( spin, iv[SPIN_COL_I2] ); /* Write radial data to the command editor */ for( idf = SPIN_COL_F3; idf <= SPIN_COL_F4; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( ground_command, fspin[idf+4]) ); gtk_spin_button_set_value( spin, fv[idf] ); } /* Check for a following GD card, read data */ iter_gd = iter_gn; if( Check_Card_Name(cmnd_store, &iter_gd, NEXT, "GD") ) { scmd = both = TRUE; /* Write radial data to the command editor */ Get_Command_Data( cmnd_store, &iter_gd, &iv[CMND_NUM_ICOLS], &fv[CMND_NUM_FCOLS] ); for( idf = SPIN_COL_F1; idf <= SPIN_COL_F4; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( ground_command, fspin[idf+2]) ); gtk_spin_button_set_value( spin, fv[idf+CMND_NUM_FCOLS] ); } /* Set 2nd medium check button */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_secmd_checkbutton") ); gtk_toggle_button_set_active( toggle, TRUE ); } /* if( Check_Card_Name(cmnd_store, &iter_gd, NEXT, "GD") ) */ } /* if( iv[SPIN_COL_I2] > 0 ) */ /* 2nd medium data specified */ else if( (fv[SPIN_COL_F3] > 0) && (fv[SPIN_COL_F4] > 0) ) { scmd = TRUE; /* Set 2nd medium check button */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_secmd_checkbutton") ); gtk_toggle_button_set_active( toggle, TRUE ); /* Write 2nd medium data to command editor */ for( idf = SPIN_COL_F3; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( ground_command, fspin[idf]) ); gtk_spin_button_set_value( spin, fv[idf] ); } } /* if( (fv[SPIN_COL_F3] > 0) && (fv[SPIN_COL_F4] > 0) ) */ break; case EDITOR_CANCEL: /* Cancel ground editor */ /* Remove card(s) */ Remove_Row( cmnd_store, &iter_gn ); if( both ) Remove_Row( cmnd_store, &iter_gd ); save = busy = FALSE; return; case COMMAND_RDBUTTON: /* Radio button toggled */ /* Find active radio button */ for( idx = 0; idx < GN_RDBTN; idx++ ) { toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, rdbutton[idx]) ); if( gtk_toggle_button_get_active(toggle) ) break; } iv[SPIN_COL_I1] = idx-1; /* Remove GD card if it exists for perfect or null ground */ if( (iv[SPIN_COL_I1] == 1) || (iv[SPIN_COL_I1] == -1) ) { if( both ) Remove_Row( cmnd_store, &iter_gd ); /* Set toggle buttons as needed */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_radl_checkbutton") ); gtk_toggle_button_set_active( toggle, FALSE ); toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_secmd_checkbutton") ); gtk_toggle_button_set_active( toggle, FALSE ); both = radl = scmd = FALSE; iv[SPIN_COL_I2] = 0; } save = show = TRUE; break; case COMMAND_CKBUTTON: /* Check button toggled */ /* Get number of radial wires if enabled */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_radl_checkbutton") ); if( gtk_toggle_button_get_active(toggle) ) radl = TRUE; else radl = FALSE; /* Set 2nd medium flag if enabled */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_secmd_checkbutton") ); if( gtk_toggle_button_get_active(toggle) ) scmd = TRUE; else scmd = FALSE; /* If both radials & 2nd medium, insert gd card */ if( radl && scmd ) { Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_gd, "GD" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); both = TRUE; } else { if( both ) Remove_Row( cmnd_store, &iter_gd ); both = FALSE; } save = show = TRUE; break; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; } /* switch( action ) */ /*** Calculate ground data ***/ /* Read num of radials from the command editor */ if( radl ) { spin = GTK_SPIN_BUTTON( lookup_widget( ground_command, "ground_nrad_spinbutton") ); iv[SPIN_COL_I2] = gtk_spin_button_get_value_as_int( spin ); } else iv[SPIN_COL_I2] = 0; /*** Read float data from the command editor ***/ /* Perfect or null ground */ if( (iv[SPIN_COL_I1] == 1) || (iv[SPIN_COL_I1] == -1) ) { for( idf = SPIN_COL_F1; idf <= SPIN_COL_F6; idf++ ) fv[idf] = 0.0; iv[SPIN_COL_I2] = 0; } else /* Finite ground */ { /* Read 1st medium rel dielec const & conductivity */ for( idf= SPIN_COL_F1; idf <= SPIN_COL_F2; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( ground_command, fspin[idf]) ); fv[idf] = gtk_spin_button_get_value( spin ); } /* If both radial and 2nd medium, GD card is needed */ if( both ) { /* Read radial screen parameters */ for( idf = SPIN_COL_F3; idf <= SPIN_COL_F4; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( ground_command, fspin[idf+4]) ); fv[idf] = gtk_spin_button_get_value( spin ); } /* Set 1st medium & radial screen parameters to GN card */ for( idf = SPIN_COL_F5; idf <= SPIN_COL_F6; idf++ ) fv[idf] = 0.0; /* Set 2nd medium parameters to GD card */ for( idf = SPIN_COL_F3; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( ground_command, fspin[idf]) ); fv[idf - SPIN_COL_F3+CMND_NUM_FCOLS] = gtk_spin_button_get_value( spin ); } } else /* Only radial screen or 2nd medium */ { if( radl ) /* If radial ground only specified, read params */ { for( idf = SPIN_COL_F3; idf <= SPIN_COL_F4; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( ground_command, fspin[idf+4]) ); fv[idf] = gtk_spin_button_get_value( spin ); } for( idf = SPIN_COL_F5; idf <= SPIN_COL_F6; idf++ ) fv[idf] = 0.0; } /* if( radl ) */ else if( scmd ) /* If second medium only, read parameters */ { for( idf = SPIN_COL_F3; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( ground_command, fspin[idf]) ); fv[idf] = gtk_spin_button_get_value( spin ); } } else for( idf = SPIN_COL_F3; idf <= SPIN_COL_F6; idf++ ) fv[idf] = 0.0; } /* else of if( both ) */ } /* else (Finite ground) */ /* Show/hide parts (frames) of editor as needed */ if( show ) { /* Perfect or no ground */ if( (iv[SPIN_COL_I1] == 1) || (iv[SPIN_COL_I1] == -1) ) { /* Show only radio buttons */ frame = GTK_FRAME( lookup_widget( ground_command, "ground_med1_frame") ); gtk_widget_hide( GTK_WIDGET(frame) ); frame = GTK_FRAME( lookup_widget( ground_command, "ground_med2_frame") ); gtk_widget_hide( GTK_WIDGET(frame) ); frame = GTK_FRAME( lookup_widget( ground_command, "ground_radial_frame") ); gtk_widget_hide( GTK_WIDGET(frame) ); toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_radl_checkbutton") ); gtk_widget_hide( GTK_WIDGET(toggle) ); toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_secmd_checkbutton") ); gtk_widget_hide( GTK_WIDGET(toggle) ); } /* if( (iv[SPIN_COL_I1] == 1) || (iv[SPIN_COL_I1] == -1) ) */ if( (iv[SPIN_COL_I1] == 0) || (iv[SPIN_COL_I1] == 2) ) /* Finite ground */ { /* Show check buttons */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_radl_checkbutton") ); gtk_widget_show( GTK_WIDGET(toggle) ); toggle = GTK_TOGGLE_BUTTON( lookup_widget( ground_command, "ground_secmd_checkbutton") ); gtk_widget_show( GTK_WIDGET(toggle) ); /* Show 1st medium */ frame = GTK_FRAME( lookup_widget( ground_command, "ground_med1_frame") ); gtk_widget_show( GTK_WIDGET(frame) ); if( scmd ) /* Show 2nd medium */ { frame = GTK_FRAME( lookup_widget( ground_command, "ground_med2_frame") ); gtk_widget_show( GTK_WIDGET(frame) ); } else { frame = GTK_FRAME( lookup_widget( ground_command, "ground_med2_frame") ); gtk_widget_hide( GTK_WIDGET(frame) ); } if( radl ) /* Show radial screen */ { frame = GTK_FRAME( lookup_widget( ground_command, "ground_radial_frame") ); gtk_widget_show( GTK_WIDGET(frame) ); } else { frame = GTK_FRAME( lookup_widget( ground_command, "ground_radial_frame") ); gtk_widget_hide( GTK_WIDGET(frame) ); } } /* if( (iv[SPIN_COL_I1] == 0) || (iv[SPIN_COL_I1] == 2) ) */ gtk_window_resize( GTK_WINDOW(ground_command), 10, 10 ); } /* if( show ) */ /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Ground_Command() */ /*------------------------------------------------------------------------*/ /* Ground2_Command() * * Edits the 2nd medium Ground command (GD card) parameters */ void Ground2_Command( int action ) { /* For looking up spinbuttons */ GtkSpinButton *spin; /* For reading/writing to GD row */ static GtkTreeIter iter_gd; int idf; /* Integer data (I1-I4) */ static gint iv[4] = { 0, 0, 0, 0 }; /* Float data (F1-F6) */ static gdouble fv[6]; /* Command data spinbuttons */ static gchar *fspin[4] = { "ground2_diel_spinbutton", "ground2_res_spinbutton", "ground2_dist_spinbutton", "ground2_below_spinbutton", }; /* Card (row) name */ gchar name[3]; static gboolean save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, ground2_command) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { Set_Command_Data( cmnd_store, &iter_gd, iv, fv ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New rad pattern row to create */ /* Insert a default EN card if list is empty */ Insert_EN_Card( cmnd_store, &iter_gd ); /* Insert a new blank GD row after a selected row, * if any, otherwise before the last (EN) row */ Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_gd, "GD" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); break; case EDITOR_EDIT: /* Edit a command row (GD) */ /* Get selected row */ Get_Selected_Row( cmnd_treeview, cmnd_store, &iter_gd, name ); /* Get data from command editor */ Get_Command_Data( cmnd_store, &iter_gd, iv, fv ); /* Write float data to the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F4; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( ground2_command, fspin[idf]) ); gtk_spin_button_set_value( spin, fv[idf] ); } break; case EDITOR_CANCEL: /* Cancel rad pattern editor */ /* Remove card(s) */ Remove_Row( cmnd_store, &iter_gd ); save = busy = FALSE; return; case EDITOR_DATA: /* Some data changed in editor window */ /* Read float data from the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F4; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( ground2_command, fspin[idf]) ); fv[idf] = gtk_spin_button_get_value( spin ); } save = TRUE; } /* switch( action ) */ /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Ground2_Command() */ /*------------------------------------------------------------------------*/ /* Radiation_Command() * * Edits the Radiation command (RP card) parameters */ void Radiation_Command( int action ) { /* For looking up spin/togle buttons */ GtkSpinButton *spin; GtkToggleButton *toggle; /* For reading/writing to RP row */ static GtkTreeIter iter_rp; int idx, idi, idf, xnda; /* Integer data (I1-I4) */ static gint iv[4]; /* Float data (F1-F6) */ static gdouble fv[6]; /* Wave/ground type radio buttons */ #define RP_WRDBTN 7 static gchar *wrdbtn[RP_WRDBTN] = { "radiation_i10_radiobutton", "radiation_i11_radiobutton", "radiation_i12_radiobutton", "radiation_i13_radiobutton", "radiation_i14_radiobutton", "radiation_i15_radiobutton", "radiation_i16_radiobutton" }; /* XNDA radio buttons */ #define RP_XRDBTN 2 static gchar *xrdbtn[RP_XRDBTN] = { "radiation_x0_radiobutton", "radiation_x1_radiobutton" }; #define RP_NRDBTN 6 static gchar *nrdbtn[RP_NRDBTN] = { "radiation_n0_radiobutton", "radiation_n1_radiobutton", "radiation_n2_radiobutton", "radiation_n3_radiobutton", "radiation_n4_radiobutton", "radiation_n5_radiobutton" }; #define RP_DRDBTN 2 static gchar *drdbtn[RP_DRDBTN] = { "radiation_d0_radiobutton", "radiation_d1_radiobutton" }; #define RP_ARDBTN 3 static gchar *ardbtn[RP_ARDBTN] = { "radiation_a0_radiobutton", "radiation_a1_radiobutton", "radiation_a2_radiobutton" }; /* Command data spinbuttons */ static gchar *ispin[2] = { "radiation_i2_spinbutton", "radiation_i3_spinbutton" }; static gchar *fspin[6] = { "radiation_f1_spinbutton", "radiation_f2_spinbutton", "radiation_f3_spinbutton", "radiation_f4_spinbutton", "radiation_f5_spinbutton", "radiation_f6_spinbutton" }; /* Labels for I1, F1-F3 & F5 spinuttons */ #define RP_LABELS 4 static gchar *labels[RP_LABELS] = { "radiation_i1_label", "radiation_f1_label", "radiation_f3_label", "radiation_f5_label" }; /* Card (row) name */ gchar name[3]; static gboolean norm = FALSE, /* Indicates normalization is specified */ label = TRUE, /* Enable setting of labels */ save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, radiation_command) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { Set_Command_Data( cmnd_store, &iter_rp, iv, fv ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New rad pattern row to create */ /* Insert a default EN card if list is empty */ Insert_EN_Card( cmnd_store, &iter_rp ); /* Insert a new blank RP row after a selected row, * if any, otherwise before the last (EN) row */ Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_rp, "RP" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); label = TRUE; break; case EDITOR_EDIT: /* Edit a command row (RP) */ /* Get selected row */ Get_Selected_Row( cmnd_treeview, cmnd_store, &iter_rp, name ); /* Get data from command editor */ Get_Command_Data( cmnd_store, &iter_rp, iv, fv ); /* Set wave type radio buttons */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( radiation_command, wrdbtn[iv[SPIN_COL_I1]]) ); gtk_toggle_button_set_active( toggle, TRUE ); /* Set X radio buttons */ xnda = iv[SPIN_COL_I4]; idx = xnda/1000; toggle = GTK_TOGGLE_BUTTON( lookup_widget( radiation_command, xrdbtn[idx]) ); gtk_toggle_button_set_active( toggle, TRUE ); /* Set N type radio buttons */ xnda -= idx*1000; idx = xnda/100; toggle = GTK_TOGGLE_BUTTON( lookup_widget( radiation_command, nrdbtn[idx]) ); gtk_toggle_button_set_active( toggle, TRUE ); /* Set D type radio buttons */ xnda -= idx*100; idx = xnda/10; toggle = GTK_TOGGLE_BUTTON( lookup_widget( radiation_command, drdbtn[idx]) ); gtk_toggle_button_set_active( toggle, TRUE ); /* Set A type radio buttons */ xnda -= idx*10; idx = xnda; toggle = GTK_TOGGLE_BUTTON( lookup_widget( radiation_command, ardbtn[idx]) ); gtk_toggle_button_set_active( toggle, TRUE ); /* Write int data to the command editor (i2 & I3) */ for( idi = SPIN_COL_I2; idi <= SPIN_COL_I3; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( radiation_command, ispin[idi-SPIN_COL_I2]) ); gtk_spin_button_set_value( spin, iv[idi] ); } /* Write float data to the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( radiation_command, fspin[idf]) ); gtk_spin_button_set_value( spin, fv[idf] ); } label = TRUE; break; case EDITOR_CANCEL: /* Cancel rad pattern editor */ /* Remove card(s) */ Remove_Row( cmnd_store, &iter_rp ); save = busy = FALSE; return; case COMMAND_RDBUTTON: /* Radio button toggled */ /* Test wave/ground type radio buttons */ for( idx = 0; idx < RP_WRDBTN; idx++ ) { toggle = GTK_TOGGLE_BUTTON( lookup_widget( radiation_command, wrdbtn[idx]) ); if( gtk_toggle_button_get_active(toggle) ) break; } iv[SPIN_COL_I1] = idx; /* Test XNDA radio buttons */ xnda = 0; if( iv[SPIN_COL_I1] != 1 ) /* Surface wave, XNDA not used */ { /* X radio buttons */ for( idx = 0; idx < RP_XRDBTN; idx++ ) { toggle = GTK_TOGGLE_BUTTON( lookup_widget( radiation_command, xrdbtn[idx]) ); if( gtk_toggle_button_get_active(toggle) ) break; } xnda += 1000*idx; /* N radio buttons */ for( idx = 0; idx < RP_NRDBTN; idx++ ) { toggle = GTK_TOGGLE_BUTTON( lookup_widget( radiation_command, nrdbtn[idx]) ); if( gtk_toggle_button_get_active(toggle) ) break; } xnda += 100*idx; if( idx ) norm = TRUE; else norm = FALSE; /* D radio buttons */ for( idx = 0; idx < RP_DRDBTN; idx++ ) { toggle = GTK_TOGGLE_BUTTON( lookup_widget( radiation_command, drdbtn[idx]) ); if( gtk_toggle_button_get_active(toggle) ) break; } xnda += 10*idx; /* A radio buttons */ for( idx = 0; idx < RP_ARDBTN; idx++ ) { toggle = GTK_TOGGLE_BUTTON( lookup_widget( radiation_command, ardbtn[idx]) ); if( gtk_toggle_button_get_active(toggle) ) break; } xnda += idx; } iv[SPIN_COL_I4] = xnda; save = label = TRUE; break; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; } /* switch( action ) */ /* Read int data from the command editor */ for( idi = SPIN_COL_I2; idi <= SPIN_COL_I3; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( radiation_command, ispin[idi-SPIN_COL_I2]) ); iv[idi] = gtk_spin_button_get_value_as_int( spin ); } /* Read float data from the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( radiation_command, fspin[idf]) ); fv[idf] = gtk_spin_button_get_value( spin ); } /* Set labels according to wave/ground type */ if( label ) { if( iv[SPIN_COL_I1] == 1 ) /* Space + ground wave case */ { gchar *text[RP_LABELS] = { _("Points in Z"), _("Initial Z (m)"), _("Increment in Z"), _("Field Point R (m)") }; Set_Labels( radiation_command, labels, text, RP_LABELS ); } else /* All other wave/ground cases */ { gchar *text[RP_LABELS] = { _("Points in Phi"), _("Initial Theta (deg)"), _("Increment in Theta"), _("R (m) (Optional)") }; Set_Labels( radiation_command, labels, text, RP_LABELS ); } /* Set normalization factor label */ if( norm ) gtk_label_set_text( GTK_LABEL(lookup_widget(radiation_command, "radiation_f6_label")), _("Normalization Factor") ); else gtk_label_set_text( GTK_LABEL(lookup_widget(radiation_command, "radiation_f6_label")), _("** NOT USED **") ); label = FALSE; } /* if( label ) */ /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Radiation_Command() */ /*------------------------------------------------------------------------*/ /* Loading_Command() * * Edits the Loading command (LD card) parameters */ void Loading_Command( int action ) { /* For looking up spinbuttons/togglebuttons */ GtkSpinButton *spin; GtkToggleButton *toggle; /* For reading/writing to LD row */ static GtkTreeIter iter_ld; int idx, idi, idf; /* Integer data (I1-I4) */ static gint iv[4]; /* Float data (F1-F6) */ static gdouble fv[6]; /* Labels for F1-F3 spinuttons */ #define LD_LABELS 3 static gchar *labels[LD_LABELS] = { "loading_f1_label", "loading_f2_label", "loading_f3_label" }; /* Command radio buttons */ #define LD_RDBTN 7 static gchar *rdbutton[7] = { "loading_null_radiobutton", "loading_slrlc_radiobutton", "loading_plrlc_radiobutton", "loading_sdrlc_radiobutton", "loading_pdrlc_radiobutton", "loading_rr_radiobutton", "loading_wcon_radiobutton" }; /* Command data spinbuttons */ static gchar *ispin[3] = { "loading_i2_spinbutton", "loading_i3_spinbutton", "loading_i4_spinbutton" }; static gchar *fspin[3] = { "loading_f1_spinbutton", "loading_f2_spinbutton", "loading_f3_spinbutton" }; /* Card (row) name */ gchar name[3]; static gboolean save = FALSE, /* Enable saving of editor data */ label = TRUE, /* Show/hide frames according to loading type */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, loading_command) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { Set_Command_Data( cmnd_store, &iter_ld, iv, fv ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New loading row to create */ /* Insert a default EN card if list is empty */ Insert_EN_Card( cmnd_store, &iter_ld ); /* Insert a new blank LD row after a selected row, * if any, otherwise before the last (EN) row */ Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_ld, "LD" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); label = TRUE; break; case EDITOR_EDIT: /* Edit a command row (LD) selected in treeview */ /* Clear buffers */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I4; idi++ ) iv[idi] = 0; for( idf = SPIN_COL_F1; idf <= SPIN_COL_F3; idf++ ) fv[idf] = 0.0; /* Get selected row */ Get_Selected_Row( cmnd_treeview, cmnd_store, &iter_ld, name ); /* Get data from command editor */ Get_Command_Data( cmnd_store, &iter_ld, iv, fv ); /* Lumped/Distributed loading, convert parameters to right units */ if( (iv[SPIN_COL_I1] >= 0) && (iv[SPIN_COL_I1] <= 3) ) { fv[SPIN_COL_F2] /= 1.0E-6; /* Convert H to uH */ fv[SPIN_COL_F3] /= 1.0E-12; /* Convert F to pF */ } /* Write int data to the command editor */ for( idi = SPIN_COL_I2; idi <= SPIN_COL_I4; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( loading_command, ispin[idi-SPIN_COL_I2]) ); gtk_spin_button_set_value( spin, iv[idi] ); } /* Write float data to the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F3; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( loading_command, fspin[idf]) ); gtk_spin_button_set_value( spin, fv[idf] ); } /* Set active radio button */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( loading_command, rdbutton[iv[SPIN_COL_I1]+1]) ); gtk_toggle_button_set_active( toggle, TRUE ); label = TRUE; break; case EDITOR_CANCEL: /* Cancel loading editor */ /* Remove card(s) */ Remove_Row( cmnd_store, &iter_ld ); save = busy = FALSE; return; case COMMAND_RDBUTTON: /* Radio button toggled */ /* Find active radio button */ for( idx = 0; idx < LD_RDBTN; idx++ ) { toggle = GTK_TOGGLE_BUTTON( lookup_widget( loading_command, rdbutton[idx]) ); if( gtk_toggle_button_get_active(toggle) ) break; } iv[SPIN_COL_I1] = idx-1; save = label = TRUE; break; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; } /* switch( action ) */ /* Change labels and calculate loading * values according to loading type */ if( label ) { gtk_widget_show( GTK_WIDGET(lookup_widget( loading_command, "loading_frame")) ); switch( iv[SPIN_COL_I1] ) /* Loading type */ { case -1: /* Short all loads */ gtk_widget_hide( GTK_WIDGET(lookup_widget( loading_command, "loading_frame")) ); gtk_window_resize( GTK_WINDOW(loading_command), 10, 10 ); break; case 0: case 1: /* Lumped loading */ { gchar *text[LD_LABELS] = { _("Resistance Ohm"), _("Inductance uH"), _("Capacitance pF") }; Set_Labels( loading_command, labels, text, LD_LABELS ); } break; case 2: case 3: /* Distributed loading */ { gchar *text[LD_LABELS] = { _("Resistance Ohm/m"), _("Inductance uH/m"), _("Capacitance pF/m") }; Set_Labels( loading_command, labels, text, LD_LABELS ); } break; case 4: /* Impedance */ { gchar *text[LD_LABELS] = { _("Resistance Ohm"), _("Reactance Ohm"), _(" ** NOT USED **") }; Set_Labels( loading_command, labels, text, LD_LABELS ); } break; case 5: /* Wire conductivity */ { gchar *text[LD_LABELS] = { _("Conductivity S/m"), _(" ** NOT USED **"), _(" ** NOT USED **") }; Set_Labels( loading_command, labels, text, LD_LABELS ); } } /* switch( iv[SPIN_COL_I1] ) */ label = FALSE; } /* if( label ) */ /* Read int data from the command editor */ for( idi = SPIN_COL_I2; idi <= SPIN_COL_I4; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( loading_command, ispin[idi-SPIN_COL_I2]) ); iv[idi] = gtk_spin_button_get_value_as_int( spin ); } /* Read float data from the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F3; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( loading_command, fspin[idf]) ); fv[idf] = gtk_spin_button_get_value( spin ); } /* Clear or convert parameters to right units for NEC2 */ switch( iv[SPIN_COL_I1] ) /* Loading type */ { case -1: /* Short all loads */ for( idi = SPIN_COL_I2; idi <= SPIN_COL_I4; idi++ ) iv[idi] = 0; for( idf = SPIN_COL_F1; idf <= SPIN_COL_F3; idf++ ) fv[idf] = 0.0; break; case 0: case 1: case 2: case 3: /* Lumped/Distributed loading */ fv[SPIN_COL_F2] *= 1.0E-6; /* Convert uH to H */ fv[SPIN_COL_F3] *= 1.0E-12; /* Convert pF to F */ break; case 4: /* Impedance R+X, clear F3 */ fv[ SPIN_COL_F3] = 0.0; break; case 5: /* Wire conductivity, clear F2 & F3 */ fv[SPIN_COL_F2] = 0.0; fv[SPIN_COL_F3] = 0.0; } /* switch( iv[SPIN_COL_I1] ) */ /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Loading_Command() */ /*------------------------------------------------------------------------*/ /* Network_Command() * * Edits the Network command (NT card) parameters */ void Network_Command( int action ) { /* For looking up spinbuttons */ GtkSpinButton *spin; /* For reading/writing to NT row */ static GtkTreeIter iter_nt; int idi, idf; /* Integer data (I1-I4) */ static gint iv[4]; /* Float data (F1-F6) */ static gdouble fv[6]; /* Command data spinbuttons */ static gchar *ispin[4] = { "network_i1_spinbutton", "network_i2_spinbutton", "network_i3_spinbutton", "network_i4_spinbutton" }; static gchar *fspin[6] = { "network_f1_spinbutton", "network_f2_spinbutton", "network_f3_spinbutton", "network_f4_spinbutton", "network_f5_spinbutton", "network_f6_spinbutton" }; /* Card (row) name */ gchar name[3]; static gboolean save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, network_command) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { Set_Command_Data( cmnd_store, &iter_nt, iv, fv ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New network row to create */ /* Insert a default EN card if list is empty */ Insert_EN_Card( cmnd_store, &iter_nt ); /* Insert a new blank NT row after a selected row, * if any, otherwise before the last (EN) row */ Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_nt, "NT" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); break; case EDITOR_EDIT: /* Edit a command row (NT) selected in treeview */ /* Get selected row */ Get_Selected_Row( cmnd_treeview, cmnd_store, &iter_nt, name ); /* Get data from command editor */ Get_Command_Data( cmnd_store, &iter_nt, iv, fv ); /* Write int data to the command editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I4; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(network_command, ispin[idi]) ); gtk_spin_button_set_value( spin, iv[idi] ); } /* Write float data to the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(network_command, fspin[idf]) ); gtk_spin_button_set_value( spin, fv[idf] ); } break; case EDITOR_CANCEL: /* Cancel Network editor */ /* Remove card(s) */ Remove_Row( cmnd_store, &iter_nt ); save = busy = FALSE; return; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; } /* switch( action ) */ /* Read int data from the command editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I4; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(network_command, ispin[idi]) ); iv[idi] = gtk_spin_button_get_value_as_int( spin ); } /* Read float data from the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(network_command, fspin[idf]) ); fv[idf] = gtk_spin_button_get_value( spin ); } /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Network_Command() */ /*------------------------------------------------------------------------*/ /* Txline_Command() * * Edits the Transmission Line command (TL card) parameters */ void Txline_Command( int action ) { /* For looking up spinbuttons */ GtkSpinButton *spin; /* For reading/writing to TL row */ static GtkTreeIter iter_tl; int idi, idf; /* Integer data (I1-I4) */ static gint iv[4]; /* Float data (F1-F6) */ static gdouble fv[6]; /* Command data spinbuttons */ static gchar *ispin[4] = { "txline_i1_spinbutton", "txline_i2_spinbutton", "txline_i3_spinbutton", "txline_i4_spinbutton" }; static gchar *fspin[6] = { "txline_f1_spinbutton", "txline_f2_spinbutton", "txline_f3_spinbutton", "txline_f4_spinbutton", "txline_f5_spinbutton", "txline_f6_spinbutton" }; /* Card (row) name */ gchar name[3]; static gboolean crossed = FALSE, /* Crossed transmission line */ save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, txline_command) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { Set_Command_Data( cmnd_store, &iter_tl, iv, fv ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New transmission line row to create */ /* Insert a default EN card if list is empty */ Insert_EN_Card( cmnd_store, &iter_tl ); /* Insert a new blank TL row after a selected row, * if any, otherwise before the last (EN) row */ Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_tl, "TL" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); break; case EDITOR_EDIT: /* Edit a command row (TL) selected in treeview */ /* Get selected row */ Get_Selected_Row( cmnd_treeview, cmnd_store, &iter_tl, name ); /* Get data from command editor */ Get_Command_Data( cmnd_store, &iter_tl, iv, fv ); /* Set crossed txline checkbutton */ if( fv[SPIN_COL_F1] < 0.0 ) { fv[SPIN_COL_F1] = -fv[SPIN_COL_F1]; crossed = TRUE; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lookup_widget( txline_command, "txline_crossed_checkbutton")), TRUE); } else { crossed = FALSE; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(lookup_widget( txline_command, "txline_crossed_checkbutton")), FALSE); } /* Write int data to the command editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I4; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( txline_command, ispin[idi]) ); gtk_spin_button_set_value( spin, iv[idi] ); } /* Write float data to the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( txline_command, fspin[idf]) ); gtk_spin_button_set_value( spin, fv[idf] ); } break; case EDITOR_CANCEL: /* Cancel transmission line editor */ /* Remove card(s) */ Remove_Row( cmnd_store, &iter_tl ); save = busy = FALSE; return; case COMMAND_CKBUTTON: /* Check button toggled */ if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( lookup_widget(txline_command, "txline_crossed_checkbutton"))) ) crossed = TRUE; else crossed = FALSE; save = TRUE; break; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; } /* switch( action ) */ /* Read int data from the command editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I4; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( txline_command, ispin[idi]) ); iv[idi] = gtk_spin_button_get_value_as_int( spin ); } /* Read float data from the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( txline_command, fspin[idf]) ); fv[idf] = gtk_spin_button_get_value( spin ); } if( crossed ) fv[SPIN_COL_F1] = -fv[SPIN_COL_F1]; /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Txline_Command() */ /*------------------------------------------------------------------------*/ /* Nearfield_Command() * * Edits the Nearfield command (NE/NF card) parameters */ void Nearfield_Command( int action ) { /* For looking up spin/toggle buttons */ GtkSpinButton *spin; GtkToggleButton *toggle; /* For reading/writing to NE/NH row */ static GtkTreeIter iter_ne, iter_nh; int idi, idf; /* Integer data (I1-I4) */ static gint iv[4]; /* Float data (F1-F6) */ static gdouble fv[6]; /* Near field editor labels */ #define NF_LABELS 9 static gchar *labels[NF_LABELS] = { "nearfield_i1_label", "nearfield_i2_label", "nearfield_i3_label", "nearfield_f1_label", "nearfield_f2_label", "nearfield_f3_label", "nearfield_f4_label", "nearfield_f5_label", "nearfield_f6_label" }; /* Command data spinbuttons */ static gchar *ispin[3] = { "nearfield_nx_spinbutton", "nearfield_ny_spinbutton", "nearfield_nz_spinbutton" }; static gchar *fspin[6] = { "nearfield_f1_spinbutton", "nearfield_f2_spinbutton", "nearfield_f3_spinbutton", "nearfield_f4_spinbutton", "nearfield_f5_spinbutton", "nearfield_f6_spinbutton" }; /* Card (row) name */ gchar name[3]; static gboolean label = TRUE, /* Change spin button labels */ nref = TRUE, /* Near E field enabled */ nrhf = FALSE, /* Near H field enabled */ save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up(&busy, nearfield_command) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { if( nref ) Set_Command_Data( cmnd_store, &iter_ne, iv, fv ); if( nrhf ) Set_Command_Data( cmnd_store, &iter_nh, iv, fv ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New near field row to create */ /* Insert a default EN card if list is empty */ Insert_EN_Card( cmnd_store, &iter_ne ); /* Insert a new blank NE row after a selected row, * if any, otherwise before the last (EN) row */ Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_ne, "NE" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); label = TRUE; break; case EDITOR_EDIT: /* Edit a command row (NE/NH) */ /* Get selected row */ Get_Selected_Row( cmnd_treeview, cmnd_store, &iter_ne, name ); iter_nh = iter_ne; /* Get data from command editor */ Get_Command_Data( cmnd_store, &iter_ne, iv, fv ); /* Write int data to the command editor */ for( idi = SPIN_COL_I2; idi <= SPIN_COL_I4; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( nearfield_command, ispin[idi-SPIN_COL_I2]) ); gtk_spin_button_set_value( spin, iv[idi] ); } /* Write float data to the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( nearfield_command, fspin[idf]) ); gtk_spin_button_set_value( spin, fv[idf] ); } /* Set radio buttons */ if( iv[SPIN_COL_I1] == 0 ) /* Rectangular coordinates */ { toggle = GTK_TOGGLE_BUTTON( lookup_widget( nearfield_command, "nearfield_rect_radiobutton") ); gtk_toggle_button_set_active( toggle, TRUE ); } else { toggle = GTK_TOGGLE_BUTTON( lookup_widget( nearfield_command, "nearfield_sph_radiobutton") ); gtk_toggle_button_set_active( toggle, TRUE ); } /* Set check buttons */ if( strcmp(name, "NE") == 0 ) { nref = TRUE; nrhf = FALSE; toggle = GTK_TOGGLE_BUTTON( lookup_widget( nearfield_command, "nearfield_ne_checkbutton") ); gtk_toggle_button_set_active( toggle, TRUE ); toggle = GTK_TOGGLE_BUTTON( lookup_widget( nearfield_command, "nearfield_nh_checkbutton") ); gtk_toggle_button_set_active( toggle, FALSE ); } if( strcmp(name, "NH") == 0 ) { nrhf = TRUE; nref = FALSE; toggle = GTK_TOGGLE_BUTTON( lookup_widget( nearfield_command, "nearfield_nh_checkbutton") ); gtk_toggle_button_set_active( toggle, TRUE ); toggle = GTK_TOGGLE_BUTTON( lookup_widget( nearfield_command, "nearfield_ne_checkbutton") ); gtk_toggle_button_set_active( toggle, FALSE ); } label = TRUE; break; case EDITOR_CANCEL: /* Cancel near field editor */ /* Remove card(s) */ if( nref ) Remove_Row( cmnd_store, &iter_ne ); if( nrhf ) Remove_Row( cmnd_store, &iter_nh ); save = busy = FALSE; return; case NEARFIELD_NE_CKBUTTON: /* E-field check button toggled */ /* Test E field check button */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( nearfield_command, "nearfield_ne_checkbutton") ); if( gtk_toggle_button_get_active(toggle) ) { nref = TRUE; Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_ne, "NE" ); } else { nref = FALSE; Remove_Row( cmnd_store, &iter_ne ); } /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); save = TRUE; break; case NEARFIELD_NH_CKBUTTON: /* H-field check button toggled */ /* Test H field check button */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( nearfield_command, "nearfield_nh_checkbutton") ); if( gtk_toggle_button_get_active(toggle) ) { nrhf = TRUE; Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_nh, "NH" ); } else { nrhf = FALSE; Remove_Row( cmnd_store, &iter_nh ); } /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); save = TRUE; break; case COMMAND_RDBUTTON: /* Radio button toggled */ /* Test rectangular coordinates radio button */ toggle = GTK_TOGGLE_BUTTON( lookup_widget( nearfield_command, "nearfield_rect_radiobutton") ); if( gtk_toggle_button_get_active(toggle) ) iv[SPIN_COL_I1] = 0; /* Rectangular */ else iv[SPIN_COL_I1] = 1; /* Spherical */ save = label = TRUE; break; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; } /* switch( action ) */ /* Set labels according to coordinate type */ if( label ) { if( iv[SPIN_COL_I1] == 0 ) /* Rectangular coordinates */ { gchar *text[NF_LABELS] = { _("Points in X-axis"), _("Points in Y-axis"), _("Points in Z-axis"), _("First Point X (m)"), _("First Point Y (m)"), _("First Point Z (m)"), _("Increment in X (m)"), _("Increment in Y (m)"), _("Increment in Z (m)") }; Set_Labels( nearfield_command, labels, text, NF_LABELS ); } else /* Spherical coordinates */ { gchar *text[NF_LABELS] = { _("Points along R"), _("Points along Phi"), _("Points along Theta"), _("First Point R (m)"), _("First Point Phi"), _("First Point Theta"), _("Increment in R (m)"), _("Increment in Phi"), _("Increment in Theta") }; Set_Labels( nearfield_command, labels, text, NF_LABELS ); label = FALSE; } } /* if( label ) */ /* Read int data from the command editor */ for( idi = SPIN_COL_I2; idi <= SPIN_COL_I4; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( nearfield_command, ispin[idi-SPIN_COL_I2]) ); iv[idi] = gtk_spin_button_get_value_as_int( spin ); } /* Read float data from the command editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( nearfield_command, fspin[idf]) ); fv[idf] = gtk_spin_button_get_value( spin ); } /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Nearfield_Command() */ /*------------------------------------------------------------------------*/ /* Kernel_Command() * * Edits the Kernel command (EK card) parameters */ void Kernel_Command( int action ) { /* For testing check button */ GtkCheckButton *ckbutton; /* For reading/writing to EK row */ static GtkTreeIter iter_ek; /* Thin wire kernel status */ static int ek = 0; gchar sek[6]; gchar *sv; /* Card (row) name */ gchar name[3]; static gboolean save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ int idc; /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, kernel_command) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { /* Set EK card data */ if( gtk_list_store_iter_is_valid(cmnd_store, &iter_ek) ) { /* Set extended kernel data */ snprintf( sek, sizeof(sek), "%5d", ek ); gtk_list_store_set( cmnd_store, &iter_ek, CMND_COL_I1, sek, -1 ); /* Clear row to 0 */ for( idc = CMND_COL_I2; idc <= CMND_COL_F6; idc++ ) gtk_list_store_set( cmnd_store, &iter_ek, idc, "0", -1 ); } save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New kernel row to create */ /* Insert a default EN card if list is empty */ Insert_EN_Card( cmnd_store, &iter_ek ); /* Insert a new blank EK row after a selected row, * if any, otherwise before the last (EN) row */ Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_ek, "EK" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); save = TRUE; break; case EDITOR_EDIT: /* Edit a command row (EK) */ /* Get selected row */ Get_Selected_Row( cmnd_treeview, cmnd_store, &iter_ek, name ); /* Get data from command editor */ if( gtk_list_store_iter_is_valid(cmnd_store, &iter_ek) ) { gtk_tree_model_get( GTK_TREE_MODEL(cmnd_store), &iter_ek, CMND_COL_I1, &sv, -1); ek = atoi(sv); g_free(sv); } /* Set the kernel check button */ ckbutton = GTK_CHECK_BUTTON(lookup_widget( kernel_command, "kernel_checkbutton") ); if( ek == 0 ) gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(ckbutton), TRUE ); else gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(ckbutton), FALSE ); break; case EDITOR_CANCEL: /* Cancel kernel editor */ /* Remove card(s) */ Remove_Row( cmnd_store, &iter_ek ); save = busy = FALSE; return; case COMMAND_CKBUTTON: /* Some check button changed in editor window */ /* Set kernel status according to checkbutton */ ckbutton = GTK_CHECK_BUTTON(lookup_widget( kernel_command, "kernel_checkbutton") ); if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ckbutton)) ) ek = 0; else ek = -1; save = TRUE; } /* switch( action ) */ /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Kernel_Command() */ /*------------------------------------------------------------------------*/ /* Intrange_Command() * * Edits the Interaction Approx Range command (KH card) parameters */ void Intrange_Command( int action ) { /* For looking up spinbuttons */ GtkSpinButton *spin; /* For reading/writing to KH row */ static GtkTreeIter iter_kh; gchar *sv; /* Interaction Approx range */ static gdouble kh; static gchar skh[13]; /* Card (row) name */ gchar name[3]; static gboolean save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ int idc; /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, intrange_command) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { /* Set KH card data */ if( gtk_list_store_iter_is_valid(cmnd_store, &iter_kh) ) { /* Clear row to 0 */ for( idc = CMND_COL_I1; idc <= CMND_COL_F6; idc++ ) gtk_list_store_set( cmnd_store, &iter_kh, idc, "0", -1 ); /* Set range data */ gtk_list_store_set( cmnd_store, &iter_kh, CMND_COL_F1, skh, -1 ); } save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New inter approx range row to create */ /* Insert a default EN card if list is empty */ Insert_EN_Card( cmnd_store, &iter_kh ); /* Insert a new blank KH row after a selected row, * if any, otherwise before the last (EN) row */ Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_kh, "KH" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); break; case EDITOR_EDIT: /* Edit a command row (KH) */ /* Get selected row */ Get_Selected_Row( cmnd_treeview, cmnd_store, &iter_kh, name ); /* Get data from command editor */ if( gtk_list_store_iter_is_valid(cmnd_store, &iter_kh) ) { gtk_tree_model_get( GTK_TREE_MODEL(cmnd_store), &iter_kh, CMND_COL_F1, &sv, -1 ); kh = Strtod( sv, NULL ); g_free(sv); } /* Set range data to command editor */ spin = GTK_SPIN_BUTTON(lookup_widget( intrange_command, "intrange_wlen_spinbutton") ); gtk_spin_button_set_value( spin, kh ); break; case EDITOR_CANCEL: /* Cancel inter range editor */ /* Remove card(s) */ Remove_Row( cmnd_store, &iter_kh ); save = busy = FALSE; return; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; } /* switch( action ) */ /* Get range data from editor */ spin = GTK_SPIN_BUTTON(lookup_widget( intrange_command, "intrange_wlen_spinbutton") ); kh = gtk_spin_button_get_value( spin ); snprintf( skh, sizeof(skh), "%12.5e", kh ); /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Intrange_Command() */ /*------------------------------------------------------------------------*/ /* Execute_Command() * * Edits the Execute command (XQ card) parameters */ void Execute_Command( int action ) { /* For reading/writing to XQ row */ static GtkTreeIter iter_xq; gchar *sv; gchar sxq[6]; int idx, idc; /* Execute command status */ static int xq = 0; /* Command data radio buttons */ #define XQ_RDBTN 4 static gchar *rdbutton[XQ_RDBTN] = { "execute_none_radiobutton", "execute_xz_radiobutton", "execute_yz_radiobutton", "execute_both_radiobutton" }; /* Card (row) name */ gchar name[3]; static gboolean save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, execute_command) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { /* Set XQ card data */ if( gtk_list_store_iter_is_valid(cmnd_store, &iter_xq) ) { snprintf( sxq, sizeof(sxq), "%5d", xq ); gtk_list_store_set( cmnd_store, &iter_xq, CMND_COL_I1, sxq, -1 ); for( idc = CMND_COL_I2; idc <= CMND_COL_F6; idc++ ) gtk_list_store_set( cmnd_store, &iter_xq, idc, "0", -1 ); } save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New execute row to create */ /* Insert a default EN card if list is empty */ Insert_EN_Card( cmnd_store, &iter_xq ); /* Insert a new blank XQ row after a selected row, * if any, otherwise before the last (EN) row */ Insert_Blank_Command_Row( cmnd_treeview, cmnd_store, &iter_xq, "XQ" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); save = TRUE; break; case EDITOR_EDIT: /* Edit a command row (XQ) */ /* Get selected row */ Get_Selected_Row( cmnd_treeview, cmnd_store, &iter_xq, name ); /* Get data from command editor */ if( gtk_list_store_iter_is_valid(cmnd_store, &iter_xq) ) { gtk_tree_model_get( GTK_TREE_MODEL(cmnd_store), &iter_xq, CMND_COL_I1, &sv, -1); xq = atoi(sv); g_free(sv); } /* Set radio button in command editor */ for( idx = 0; idx < XQ_RDBTN; idx++ ) if( xq == idx ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( lookup_widget(execute_command, rdbutton[idx])), TRUE ); break; } break; case EDITOR_CANCEL: /* Cancel execute editor */ /* Remove card(s) */ Remove_Row( cmnd_store, &iter_xq ); save = busy = FALSE; return; case COMMAND_RDBUTTON: /* Radio button toggled */ /* Get active radio button in command editor */ for( idx = 0; idx < XQ_RDBTN; idx++ ) if( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON( lookup_widget(execute_command, rdbutton[idx]))) ) break; xq = idx; save = TRUE; } /* switch( action ) */ /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Execute_Command() */ /*------------------------------------------------------------------------*/ /* Insert_EN_Card() * * Inserts a default EN card if missing */ void Insert_EN_Card( GtkListStore *store, GtkTreeIter *iter ) { gint idx, idc; /* Insert default EN card if list is clear */ idx = gtk_tree_model_iter_n_children( GTK_TREE_MODEL(store), NULL ); if( !idx ) { gtk_list_store_append( store, iter ); gtk_list_store_set( store, iter, CMND_COL_NAME, "EN", -1 ); for( idc = CMND_COL_I1; idc < CMND_NUM_COLS; idc++ ) gtk_list_store_set( store, iter, idc, "0", -1 ); } } /* Insert_EN_Card() */ /*------------------------------------------------------------------------*/ /* Get_Command_Data() * * Gets command data from a treeview row */ void Get_Command_Data( GtkListStore *store, GtkTreeIter *iter, int *iv, double *fv ) { gint idc; gchar *sv; /* Get data from tree view (I1-I4, F1-F6)*/ if( gtk_list_store_iter_is_valid(store, iter) ) { for( idc = CMND_COL_I1; idc <= CMND_COL_I4; idc++ ) { gtk_tree_model_get( GTK_TREE_MODEL(store), iter, idc, &sv, -1); iv[idc-CMND_COL_I1] = atoi(sv); g_free(sv); } for( idc = CMND_COL_F1; idc <= CMND_COL_F6; idc++ ) { gtk_tree_model_get( GTK_TREE_MODEL(store), iter, idc, &sv, -1); fv[idc-CMND_COL_F1] = Strtod( sv, NULL ); g_free(sv); } } else stop( _("Get_Command_Data(): Error reading\n"\ "row data: Invalid list iterator"), ERR_OK ); } /* Get_Command_Data() */ /*------------------------------------------------------------------------*/ /* Set_Command_Data() * * Sets data into a command row */ void Set_Command_Data( GtkListStore *store, GtkTreeIter *iter, int *iv, double *fv ) { gchar str[13]; gint idc; /* Format and set editor data to treeview (I1-I4 & F1-F6) */ if( gtk_list_store_iter_is_valid(store, iter) ) { for( idc = CMND_COL_I1; idc <= CMND_COL_I4; idc++ ) { snprintf( str, 6, "%5d", iv[idc-CMND_COL_I1] ); gtk_list_store_set( store, iter, idc, str, -1 ); } for( idc = CMND_COL_F1; idc <= CMND_COL_F6; idc++ ) { snprintf( str, 13, "%12.5E", fv[idc-CMND_COL_F1] ); gtk_list_store_set( store, iter, idc, str, -1 ); } } else stop( _("Set_Command_Data(): Error writing row data\n"\ "Please re-select row"), ERR_OK ); SetFlag( NEC2_EDIT_SAVE ); } /* Set_Command_Data() */ /*------------------------------------------------------------------------*/ /* Insert_Blank_Command_Row() * * Inserts a blank row in a tree view with only its name (GW ... ) */ void Insert_Blank_Command_Row( GtkTreeView *view, GtkListStore *store, GtkTreeIter *iter, const gchar *name ) { GtkTreeSelection *selection; gboolean retv; gint n; gchar *str; if( nec2_edit_window == NULL ) return; /* Get selected row, if any */ selection = gtk_tree_view_get_selection( view ); retv = gtk_tree_selection_get_selected( selection, NULL, iter ); /* If no selected row, insert new row into list * store before last row, else after the selected row, * but if this is a GE row, then insert before it */ if( !retv ) { n = gtk_tree_model_iter_n_children( GTK_TREE_MODEL(store), NULL ); gtk_tree_model_iter_nth_child( GTK_TREE_MODEL(store), iter, NULL, n-1 ); gtk_list_store_insert_before( store, iter, iter ); } else { gtk_tree_model_get( GTK_TREE_MODEL(store), iter, CMND_COL_NAME, &str, -1 ); if( strcmp(str, "EN") == 0 ) gtk_list_store_insert_before( store, iter, iter ); else gtk_list_store_insert_after( store, iter, iter ); g_free(str); } gtk_list_store_set( store, iter, CMND_COL_NAME, name, -1 ); for( n = CMND_COL_I1; n < CMND_NUM_COLS; n++ ) gtk_list_store_set( store, iter, n, "--", -1 ); gtk_tree_selection_select_iter( selection, iter ); } /* Insert_Blank_Command_Row() */ /*------------------------------------------------------------------------*/ /* Set_Labels() * * Sets labels in an editor window */ void Set_Labels( GtkWidget *widget, gchar **labels, gchar **text, gint num ) { int idx; GtkLabel *label; for( idx = 0; idx < num; idx++ ) { label = GTK_LABEL( lookup_widget(widget, labels[idx]) ); gtk_label_set_text( label, text[idx] ); } } /* Set_Labels() */ /*------------------------------------------------------------------------*/ xnec2c-3.4/src/cmnd_edit.h000066400000000000000000000016661257141547200154510ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef CMND_EDIT_H #define CMND_EDIT_H 1 #include "common.h" #include "interface.h" #include "support.h" #include "editors.h" #endif xnec2c-3.4/src/common.h000066400000000000000000001624031257141547200150100ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* xnec2c.h * * Common header file for xnec2c */ #ifndef COMMON_H #define COMMON_H 1 #include #include #include #include #include #include #include #include #include #include #include #include #include /* commonly used complex constants */ #define CPLX_00 (0.0+I*0.0) #define CPLX_01 (0.0+I*1.0) #define CPLX_10 (1.0+I*0.0) #define CPLX_11 (1.0+I*1.0) /* common constants */ #define PI 3.141592654 #define POT 1.570796327 #define TP 6.283185308 #define TA 1.745329252E-02 #define TD 57.29577951 #define ETA 376.73 #define CVEL 299.8 #define CONST1 (0.0+I*4.771341189) #define CONST4 (0.0+I*188.365) #define SMIN 1.0e-3 #define cmplx(r, i) ((r)+I*(i)) /* Replaces the "10000" limit used to */ /* identify segment/patch connections */ #define PCHCON 100000 /* Max length of a line read from input file */ #define LINE_LEN 135 /* Size of char arrays (strings) for error messages etc */ #define MESG_SIZE 128 /* Type of projection parameters stuct */ #define STRUCTURE_DRAWINGAREA 1 #define RDPATTERN_DRAWINGAREA 2 /* Some colors for settinn cairo context */ #define WHITE 1.0, 1.0, 1.0 #define RED 1.0, 0.0, 0.0 #define YELLOW 1.0, 1.0, 0.0 #define GREEN 0.0, 1.0, 0.0 #define CYAN 0.0, 1.0, 1.0 #define BLUE 0.0, 0.0, 1.0 #define MAGENTA 1.0, 0.0, 1.0 #define GREY 0.5, 0.5, 0.5 #define BLACK 0.0, 0.0, 0.0 /* For read/write pipes */ #define READ 0 #define WRITE 1 /* Response to error dialog box */ #define ERR_OK FALSE #define ERR_STOP TRUE /*** Flow control flags ***/ /* Freq Loop Control flags */ #define FREQ_LOOP_RUNNING 0x0000000000000001ll #define FREQ_LOOP_DONE 0x0000000000000002ll #define FREQ_LOOP_INIT 0x0000000000000004ll #define FREQ_LOOP_STOP 0x0000000000000008ll #define FREQ_LOOP_FLAGS 0x000000000000000Fll /* Main Window Control flags */ #define DRAW_CURRENTS 0x0000000000000010ll #define DRAW_CHARGES 0x0000000000000020ll #define COMMON_PROJECTION 0x0000000000000040ll #define COMMON_FREQUENCY 0x0000000000000080ll #define MAIN_NEW_FREQ 0x0000000000000100ll #define MAIN_QUIT 0x0000000000000200ll /* Freq Plot Control flags */ #define PLOT_ZREAL_ZIMAG 0x0000000000000400ll #define PLOT_VSWR 0x0000000000000800ll #define PLOT_ZMAG_ZPHASE 0x0000000000001000ll #define PLOT_GMAX 0x0000000000002000ll #define PLOT_GVIEWER 0x0000000000004000ll #define PLOT_NETGAIN 0x0000000000008000ll #define PLOT_GAIN_DIR 0x0000000000010000ll #define PLOT_FREQ_LINE 0x0000000000020000ll #define PLOT_SELECT 0x0000000000040000ll #define PLOT_ENABLED 0x0000000000080000ll #define PLOT_QUIT 0x0000000000100000ll #define PLOT_FLAGS 0x00000000001FFC00ll /* Radiation Pattern Control flags */ #define DRAW_GAIN 0x0000000000200000ll #define DRAW_EFIELD 0x0000000000400000ll #define DRAW_HFIELD 0x0000000000800000ll #define DRAW_EHFIELD 0x0000000001000000ll #define DRAW_POYNTING 0x0000000002000000ll #define DRAW_ENABLED 0x0000000004000000ll #define DRAW_QUIT 0x0000000008000000ll #define DRAW_NEW_RDPAT 0x0000000010000000ll #define DRAW_NEW_EHFIELD 0x0000000020000000ll #define OVERLAY_STRUCT 0x0000000040000000ll #define NEAREH_SNAPSHOT 0x0000000080000000ll #define NEAREH_ANIMATE 0x0000000100000000ll #define ENABLE_RDPAT 0x0000000200000000ll #define ENABLE_NEAREH 0x0000000400000000ll #define DRAW_FLAGS 0x00000001FFE00000ll #define RDPAT_FLAGS 0x0000000600000000ll /* NEC2 editor flags */ #define NEC2_EDIT_SAVE 0x0000000800000000ll /* Save NEC2 editor data to a file */ #define NEC2_SAVE 0x0000001000000000ll /* Saving to a NEC2 input file */ /* Structure/rad pattern/freq. plots image save */ #define IMAGE_SAVE 0x0000002000000000ll /* Save gnuplot data */ #define RDPAT_GNUPLOT_SAVE 0x0000004000000000ll #define PLOTS_GNUPLOT_SAVE 0x0000008000000000ll #define STRCT_GNUPLOT_SAVE 0x0000010000000000ll /* All filechooser save flags */ #define ALL_SAVE_FLAGS 0x000001F000000000ll /* Other flags */ #define ERROR_CONDX 0x0000020000000000ll #define INPUT_PENDING 0x0000040000000000ll #define ENABLE_EXCITN 0x0000080000000000ll /* Allocation control flags */ #define ALLOC_NEAREH_BUFF 0x0000100000000000ll #define ALLOC_RDPAT_BUFF 0x0000200000000000ll #define ALLOC_PNTING_BUFF 0x0000400000000000ll #define ALL_FLAGS 0xffffffffffffffffll /* Type of near field data requested */ #define NEAR_EFIELD 0x01 #define NEAR_HFIELD 0x02 #define NEAR_EHFIELD 0x03 #define CHILD isChild() /* Gain Scaling style */ enum GAIN_SCALE { GS_LINP = 0, GS_LINV, GS_ARRL, GS_LOG, NUM_SCALES }; /* Polarization type */ enum POL_TYPE { POL_TOTAL = 0, POL_HORIZ, POL_VERT, POL_RHCP, POL_LHCP, NUM_POL }; /*** Structs encapsulating global ("common") variables ***/ /* common /crnt/ */ typedef struct { double *air, /* Ai/lambda, real part */ *aii, /* Ai/lambda, imaginary part */ *bir, /* Bi/lambda, real part */ *bii, /* Bi/lambda, imaginary part */ *cir, /* Ci/lambda, real part */ *cii; /* Ci/lambda, imaginary part */ complex double *cur; /* Amplitude of basis function */ char newer; /* New data available */ char valid; /* Available data valid */ } crnt_t; /* common /data/ (geometry data) */ typedef struct { int n, /* Number of wire segments */ np, /* Number of wire segments in symmetry cell */ m, /* Number of surface patches */ mp, /* Number of surface patches in symmetry cell */ npm, /* = n+m */ np2m, /* = n+2m */ np3m, /* = n+3m */ ipsym, /* Symmetry flag */ *icon1, /* Segments end 1 connection */ *icon2, /* Segments end 2 connection */ *itag; /* Segments tag number */ /* Wire segment data */ double *x1, *y1, *z1, /* End 1 coordinates of wire segments */ *x2, *y2, *z2, /* End 2 coordinates of wire segments */ *x, *y, *z, /* Coordinates of segment centers */ *si, *bi, /* Length and radius of segments */ *cab, /* cos(a)*cos(b) */ *sab, /* cos(a)*sin(b) */ *salp, /* Z component - sin(a) */ /* Surface patch data */ *t1x, *t1y, *t1z, /* Coordinates of t1 vector */ *t2x, *t2y, *t2z, /* Coordinates of t2 vector */ *px, *py, *pz, /* Coordinates of patch center */ *pbi, /* Patch surface area */ *psalp, /* Z component - sin(a) */ /* Wavelength in meters */ wlam; /* My addition, for plotting patches */ double *px1, *py1, *pz1, *px2, *py2, *pz2; } data_t; /* common /dataj/ */ typedef struct { int iexk, ind1, indd1, ind2, indd2, ipgnd; double s, b, xj, yj, zj, cabj, sabj, salpj, rkh, t1xj, t1yj, t1zj, t2xj, t2yj, t2zj; complex double exk, eyk, ezk, exs, eys, ezs, exc, eyc, ezc; } dataj_t; /* common /fpat/ */ typedef struct { int near, nfeh, nrx, nry, nrz, nth, nph, ipd, iavp, inor, iax, ixtyp; /* xpr6 moved to exec_data_t */ double thets, phis, dth, dph, rfld, gnor, clt, cht, epsr2, sig2, pinr, pnlr, ploss, xnr, ynr, znr, dxnr, dynr, dznr; } fpat_t; /*common /ggrid/ */ typedef struct { int *nxa, *nya; double *dxa, *dya, *xsa, *ysa; complex double epscf, *ar1, *ar2, *ar3; } ggrid_t; /* common /gnd/ */ typedef struct { int ksymp, /* Ground flag */ ifar, /* Int flag in RP card, for far field calculations */ iperf, /* Type of ground flag */ nradl; /* Number of radials in ground screen */ double t2, /* Const for radial wire ground impedance */ cl, /* Distance in wavelengths of cliff edge from origin */ ch, /* Cliff height in wavelengths */ scrwl, /* Wire length in radial ground screen normalized to w/length */ scrwr; /* Radius of wires in screen in wavelengths */ complex double zrati, /* Ground medium [Er-js/wE0]^-1/2 */ zrati2, /* As above for 2nd ground medium */ t1, /* Const for radial wire ground impedance */ frati; /* (k1^2-k2^2)/(k1^2+k2^2), k1=w(E0Mu0)^1/2, k1=k2/ZRATI */ } gnd_t; /* common /gwav/ */ typedef struct { double r1, /* Distance from current element to point where field is evaluated */ r2, /* Distance from image of element to point where field is evaluated */ zmh, /* Z-Z', Z is height of field evaluation point */ zph; /* Z+Z', Z' is height of current element */ complex double u, /* (Er-jS/WE0)^-1/2 */ u2, /* u^2 */ xx1, /* G1*exp(jkR1*r[i]) */ xx2; /* G2*exp(jkR2*r'[i]) */ } gwav_t; /* common /incom/ */ typedef struct { int isnor; double xo, yo, zo, sn, xsn, ysn; } incom_t; /* common /matpar/ (matrix parameters) */ typedef struct { int icase, /* Storage mode of primary matrix */ npblk, /* Num of blocks in first (NBLOKS-1) blocks */ nlast, /* Num of blocks in last block */ imat; /* Storage reserved in CM for primary NGF matrix A */ } matpar_t; /* common /netcx/ */ typedef struct { int masym, /* Matrix symmetry flags */ neq, npeq, neq2, nonet, /* Number of two-port networks */ ntsol, /* "Network equations are solved" flag */ nprint, /* Print control flag */ *iseg1, /* Num of seg to which port 1 of network is connected */ *iseg2, /* Num of seg to which port 2 of network is connected */ *ntyp; /* Type of networks */ double *x11r, /* Real and imaginary parts of network impedances */ *x11i, *x12r, *x12i, *x22r, *x22i, pin, /* Total input power from sources */ pnls; /* Power lost in networks */ complex double zped; } netcx_t; /* common /save/ */ typedef struct { int *ip; /* Vector of indices of pivot elements used to factor matrix */ double epsr, /* Relative dielectric constant of ground */ sig, /* Conductivity of ground */ scrwlt, /* Length of radials in ground screen approximation */ scrwrt, /* Radius of wires in ground screen approximation */ fmhz, /* Saved frequency of operation */ last_freq; /* My addition, Last frequency used in calculations */ /* My addition, replace xtemp, ytemp etc in freq. loop */ double *xtemp, *ytemp, *ztemp, *sitemp, *bitemp; double *freq; /* My addition, frequencies used in freq loop */ char *fstep; /* My addition, freq loop steps that returned results */ } save_t; /* common /segj/ */ typedef struct { int *jco, /* Stores connection data */ jsno, /* Total number of entries in ax, bx, cx */ maxcon; /* Max. no. connections */ double *ax, *bx, *cx; /* Store constants A, B, C used in current expansion */ } segj_t; /* common /smat/ */ typedef struct { int nop; /* My addition */ complex double *ssx; } smat_t; /* common /vsorc/ */ typedef struct { int *isant, /* Num of segs on which an aplied field source is located */ *ivqd, /* Num of segs on which a current-slope discontinuity source is located */ *iqds, /* Same as above (?) */ nsant, /* Number of applied field voltage sources */ nvqd, /* Number of applied current-slope discontinuity sources */ nqds; /* Same as above (?) */ complex double *vqd, /* Voltage of applied-current slope discontinuity sources */ *vqds, /* Same as above (?) */ *vsant; /* Voltages of applied field voltage sources */ } vsorc_t; /* common /yparm/ */ /* CP card support has been dropped */ /* common /zload/ */ typedef struct { int *ldsegn, /* My addition, loaded segment numbers */ *ldtype, /* My addition, loading type */ nldseg, /* My addition, number of loaded segs */ nload; /* Number of loading networks */ complex double *zarray; /* = Zi/(Di/lambda) */ } zload_t; /* Parameters for projecting points on screen */ typedef struct { double Wi, /* Angle (inclination) of Z axis to Screen, +ve to viewer */ Wr, /* Rotation of X-Y plane around Z axis, +ve clockwise */ sin_wi, /* sin(Wi) */ cos_wi, /* cos(Wi) */ sin_wr, /* sin(Wr) */ cos_wr, /* cos(Wr) */ r_max, /* Max distance from xyz origin of a point in antenna */ xy_scale1, /* Scale factor to fit structure into drawable window */ xy_scale, /* Scale factor incorporating zoom factor */ xy_zoom, /* Structure Zoom factor */ x_center, /* X co-ordinate of xyz axes origin in screen's drawable */ y_center; /* Y co-ordinate of xyz axes origin in screen's drawable */ int pixmap_width, /* Width of drawable's backing pixmap */ pixmap_height; /* Height of drawable's backing pixmap */ char type; /* Type of projection parameters stuct */ gboolean reset; /* Reset flag needed in some functions */ } projection_parameters_t; /* My addition, struct to hold data needed * to execute various calculations requested * by commands like EX, RP, NH, NE etc. */ typedef struct { int *ldtyp, *ldtag, *ldtagf, *ldtagt, nthi, nphi, iexk, iped, ifrq, /* Frequency specification flag */ nfrq, /* Number of frequency steps */ fstep, /* Frequency step */ lastf, /* Last frequency step */ ngraph, /* Number of graphs to be plotted */ pol_type, /* User-specified Polarization type for plots and patterns */ num_jobs; /* Number of child processes (jobs) to fork */ double *zlr, *zli, *zlc; double xpr1, xpr2, xpr3, xpr4, xpr5, xpr6, rkh, zpnorm, thetis, phiss, fmhz, /* Frequency in MHz, moved from save_t */ delfrq; /* Frequency step for freq loop */ double mxfrq, /* Max frequency in freq loop */ zo; /* Characteristic impedance used in VSWR calcs */ } calc_data_t; /* Impedance data */ typedef struct { double *zreal, /* Real part of input impedance */ *zimag, /* Imag part of input impedance */ *zmagn, /* Magnitude of input impedance */ *zphase; /* Phase ang of input impedance */ } impedance_data_t; /* Radiation pattern data */ typedef struct { double *gtot, /* Radiation pattern (total gain) buffer */ *max_gain, /* Maximum gain for each polarization type */ *min_gain, /* Minimum gain for each polarization type */ *max_gain_tht, /* Theta angle where maximum gain occurs */ *max_gain_phi, /* Phi angle where minimum gain occurs */ *tilt, /* Tilt angle of polarization ellipse */ *axrt; /* Elliptic axial ratio of pol ellipse */ int *max_gain_idx, /* Where in rad_pattern.gtot the max value occurs */ *min_gain_idx, /* Where in rad_pattern.gtot the min value occurs */ *sens; /* Polarization sense (vertical, horizontal, elliptic etc) */ } rad_pattern_t; /* Near E/H field data */ typedef struct { double /* Magnitude and phase of E/H fields */ *ex, *ey, *ez, *hx, *hy, *hz, *fex, *fey, *fez, *fhx, *fhy, *fhz, /* Real part of E and H field values */ *erx, *ery, *erz, *er, *hrx, *hry, *hrz, *hr; /* Max of E/H field values */ double max_er, max_hr; /* Co-ordinates of field points and * max distance from xyz origin */ double *px, *py, *pz, r_max; /* Animation step in rads */ double anim_step; char newer; /* New data available */ char valid; /* Available data valid */ } near_field_t; /* Forked processes data */ typedef struct { pid_t child_pid; /* Child pid */ int pnt2child_pipe[2]; /* Parent-to-child write pipe */ int child2pnt_pipe[2]; /* Child-to-parent write pipe */ char busy; /* Child process busy flag */ int fstep; /* Frequency step assigned to child */ /* File descriptor sets for select() */ fd_set read_fds; fd_set write_fds; } forked_proc_data_t; /* Function prototypes produced by cproto */ /* calculations.c */ void qdsrc(int is, _Complex double v, _Complex double *e); void cabc(_Complex double *curx); double db10(double x); double db20(double x); void intrp(double x, double y, _Complex double *f1, _Complex double *f2, _Complex double *f3, _Complex double *f4); void intx(double el1, double el2, double b, int ij, double *sgr, double *sgi); int min(int a, int b); void test(double f1r, double f2r, double *tr, double f1i, double f2i, double *ti, double dmin); void sbf(int i, int is, double *aa, double *bb, double *cc); void tbf(int i, int icap); void trio(int j); double cang(_Complex double z); void zint(double sigl, double rolam, _Complex double *zint); /* callback_func.c */ void Save_Pixmap(GdkPixmap *pixmap, int pixmap_width, int pixmap_height, char *filename); void New_Viewer_Angle(double wr, double wi, GtkSpinButton *wr_spb, GtkSpinButton *wi_spb, projection_parameters_t *params); void Set_Spin_Button(GtkSpinButton *spin, gdouble value); void Create_Pixmap(GdkPixmap **pixmap, int *pixmap_width, int *pixmap_height, GtkWidget *widget, GdkEventConfigure *event, projection_parameters_t *params); void Motion_Event(GdkEventMotion *event, projection_parameters_t *params); void Plot_Select(GtkToggleButton *togglebutton, unsigned long long int flag); void Delete_Event(gchar *message); void Set_Pol_Menuitem(GtkMenuItem *menuitem); void Close_Windows(void); gboolean Open_Editor(GtkTreeView *view); void Main_Rdpattern_Activate(gboolean from_menu); gboolean Main_Freqplots_Activate(void); void Rdpattern_Gain_Togglebutton_Toggled(gboolean flag); void Rdpattern_EH_Togglebutton_Toggled(gboolean flag); void Main_Currents_Togglebutton_Toggled(gboolean flag); void Main_Charges_Togglebutton_Toggled(gboolean flag); void Open_Nec2_Editor(int action); gboolean Nec2_Apply_Checkbutton(void); void Gtk_Quit(void); void Pass_EH_Flags(void); void Alloc_Crnt_Buffs(void); void Free_Crnt_Buffs(void); /* callbacks.c */ void on_main_window_destroy(GtkObject *object, gpointer user_data); gboolean on_main_window_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_new_activate(GtkMenuItem *menuitem, gpointer user_data); void on_open_input_activate(GtkMenuItem *menuitem, gpointer user_data); void on_main_save_activate(GtkMenuItem *menuitem, gpointer user_data); void on_main_save_as_activate(GtkMenuItem *menuitem, gpointer user_data); void on_struct_save_as_gnuplot_activate(GtkMenuItem *menuitem, gpointer user_data); void on_quit_activate(GtkMenuItem *menuitem, gpointer user_data); void on_main_rdpattern_activate(GtkMenuItem *menuitem, gpointer user_data); void on_main_freqplots_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_total_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_horizontal_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_vertical_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_right_hand_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_left_hand_activate(GtkMenuItem *menuitem, gpointer user_data); void on_common_projection_activate(GtkMenuItem *menuitem, gpointer user_data); void on_common_freq_activate(GtkMenuItem *menuitem, gpointer user_data); void on_main_x_axis_clicked(GtkButton *button, gpointer user_data); void on_main_y_axis_clicked(GtkButton *button, gpointer user_data); void on_main_z_axis_clicked(GtkButton *button, gpointer user_data); void on_main_default_view_clicked(GtkButton *button, gpointer user_data); void on_main_rotate_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_main_incline_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_main_currents_togglebutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_main_charges_togglebutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); gboolean on_main_colorcode_drawingarea_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data); void on_main_freq_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_main_freq_checkbutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_main_new_freq_clicked(GtkButton *button, gpointer user_data); gboolean on_structure_drawingarea_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer user_data); gboolean on_structure_drawingarea_motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer user_data); gboolean on_structure_drawingarea_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data); void on_filechooserdialog_response(GtkDialog *dialog, gint response_id, gpointer user_data); void on_fileselection_response(GtkDialog *dialog, gint response_id, gpointer user_data); gboolean on_freqplots_window_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_freqplots_window_destroy(GtkObject *object, gpointer user_data); void on_freqplots_save_activate(GtkMenuItem *menuitem, gpointer user_data); void on_freqplots_save_as_activate(GtkMenuItem *menuitem, gpointer user_data); void on_freqplots_save_as_gnuplot_activate(GtkMenuItem *menuitem, gpointer user_data); void on_freqplots_gmax_togglebutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_freqplots_gdir_togglebutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_freqplots_gviewer_togglebutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_freqplots_vswr_togglebutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_freqplots_zo_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_freqplots_zrlzim_togglebutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_freqplots_zmgzph_togglebutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); gboolean on_freqplots_drawingarea_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data); gboolean on_freqplots_drawingarea_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer user_data); gboolean on_freqplots_drawingarea_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data); void on_rdpattern_window_destroy(GtkObject *object, gpointer user_data); gboolean on_rdpattern_window_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_rdpattern_save_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_save_as_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_save_as_gnuplot_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_linear_power_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_linear_voltage_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_arrl_style_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_logarithmic_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_e_field_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_h_field_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_poynting_vector_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_overlay_structure_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_x_axis_clicked(GtkButton *button, gpointer user_data); void on_rdpattern_y_axis_clicked(GtkButton *button, gpointer user_data); void on_rdpattern_z_axis_clicked(GtkButton *button, gpointer user_data); void on_rdpattern_default_view_clicked(GtkButton *button, gpointer user_data); void on_rdpattern_rotate_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_rdpattern_incline_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_rdpattern_gain_togglebutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_rdpattern_eh_togglebutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); gboolean on_rdpattern_colorcode_drawingarea_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data); void on_rdpattern_freq_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_rdpattern_new_freq_clicked(GtkButton *button, gpointer user_data); gboolean on_rdpattern_drawingarea_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer user_data); gboolean on_rdpattern_drawingarea_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data); gboolean on_rdpattern_drawingarea_motion_notify_event(GtkWidget *widget, GdkEventMotion *event, gpointer user_data); void on_quit_cancelbutton_clicked(GtkButton *button, gpointer user_data); void on_quit_okbutton_clicked(GtkButton *button, gpointer user_data); void main_view_menuitem_activate(GtkMenuItem *menuitem, gpointer user_data); void main_pol_menu_activate(GtkMenuItem *menuitem, gpointer user_data); void freqplots_pol_menu_activate(GtkMenuItem *menuitem, gpointer user_data); void rdpattern_view_menuitem_activate(GtkMenuItem *menuitem, gpointer user_data); void rdpattern_pol_menu_activate(GtkMenuItem *menuitem, gpointer user_data); void on_filechoser_cancel_clicked(GtkButton *button, gpointer user_data); void on_fileselection_cancel_clicked(GtkButton *button, gpointer user_data); void on_near_peak_value_activate(GtkMenuItem *menuitem, gpointer user_data); void on_near_snapshot_activate(GtkMenuItem *menuitem, gpointer user_data); void on_rdpattern_animate_activate(GtkMenuItem *menuitem, gpointer user_data); void on_animation_applybutton_clicked(GtkButton *button, gpointer user_data); void on_animation_cancelbutton_clicked(GtkButton *button, gpointer user_data); void on_animation_okbutton_clicked(GtkButton *button, gpointer user_data); void on_animate_dialog_destroy(GtkObject *object, gpointer user_data); void on_quit_dialog_destroy(GtkObject *object, gpointer user_data); gboolean on_error_dialog_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_nec2_edit_activate(GtkMenuItem *menuitem, gpointer user_data); gboolean on_nec2_editor_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); void on_nec2_editor_destroy(GtkObject *object, gpointer user_data); void on_nec2_save_clicked(GtkButton *button, gpointer user_data); void on_nec2_save_as_clicked(GtkButton *button, gpointer user_data); void on_nec2_row_add_clicked(GtkButton *button, gpointer user_data); void on_nec2_row_remv_clicked(GtkButton *button, gpointer user_data); void on_nec2_treeview_clear_clicked(GtkButton *button, gpointer user_data); gboolean on_nec2_cmnt_treeview_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data); gboolean on_nec2_geom_treeview_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data); gboolean on_nec2_cmnd_treeview_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data); void on_nec2_revert_clicked(GtkButton *button, gpointer user_data); void on_error_stopbutton_clicked(GtkButton *button, gpointer user_data); void on_error_okbutton_clicked(GtkButton *button, gpointer user_data); void on_error_quitbutton_clicked(GtkButton *button, gpointer user_data); void on_wire_editor_destroy(GtkObject *object, gpointer user_data); void on_wire_pcl_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_wire_data_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_wire_tagnum_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_wire_len_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_wire_taper_checkbutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_wire_rlen_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_wire_rdia_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_wire_new_button_clicked(GtkButton *button, gpointer user_data); void on_wire_res_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_wire_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_wire_apply_button_clicked(GtkButton *button, gpointer user_data); void on_wire_ok_button_clicked(GtkButton *button, gpointer user_data); void on_gw_clicked(GtkButton *button, gpointer user_data); void on_ga_clicked(GtkButton *button, gpointer user_data); void on_gh_clicked(GtkButton *button, gpointer user_data); void on_sp_clicked(GtkButton *button, gpointer user_data); void on_gr_clicked(GtkButton *button, gpointer user_data); void on_gm_clicked(GtkButton *button, gpointer user_data); void on_gx_clicked(GtkButton *button, gpointer user_data); void on_gs_clicked(GtkButton *button, gpointer user_data); void on_ex_clicked(GtkButton *button, gpointer user_data); void on_fr_clicked(GtkButton *button, gpointer user_data); void on_gn_clicked(GtkButton *button, gpointer user_data); void on_gd_clicked(GtkButton *button, gpointer user_data); void on_rp_clicked(GtkButton *button, gpointer user_data); void on_ld_clicked(GtkButton *button, gpointer user_data); void on_nt_clicked(GtkButton *button, gpointer user_data); void on_tl_clicked(GtkButton *button, gpointer user_data); void on_ne_clicked(GtkButton *button, gpointer user_data); void on_ek_clicked(GtkButton *button, gpointer user_data); void on_kh_clicked(GtkButton *button, gpointer user_data); void on_xq_clicked(GtkButton *button, gpointer user_data); void on_patch_data_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_patch_new_button_clicked(GtkButton *button, gpointer user_data); void on_patch_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_patch_apply_button_clicked(GtkButton *button, gpointer user_data); void on_patch_ok_button_clicked(GtkButton *button, gpointer user_data); void on_patch_editor_destroy(GtkObject *object, gpointer user_data); void on_patch_arbitrary_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_patch_rectangular_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_patch_triangular_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_patch_quadrilateral_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_patch_surface_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_arc_data_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_arc_tagnum_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_arc_res_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_arc_new_button_clicked(GtkButton *button, gpointer user_data); void on_arc_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_arc_apply_button_clicked(GtkButton *button, gpointer user_data); void on_arc_ok_button_clicked(GtkButton *button, gpointer user_data); void on_arc_editor_destroy(GtkObject *object, gpointer user_data); void on_arc_pcl_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_helix_tagnum_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_helix_pcl_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_helix_nturns_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_helix_res_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_helix_lh_checkbutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_helix_data_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_helix_new_button_clicked(GtkButton *button, gpointer user_data); void on_helix_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_helix_apply_button_clicked(GtkButton *button, gpointer user_data); void on_helix_ok_button_clicked(GtkButton *button, gpointer user_data); void on_helix_editor_destroy(GtkObject *object, gpointer user_data); void on_helix_linkall_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_helix_linkzo_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_helix_linkzhl_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_reflect_taginc_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_reflect_checkbutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_reflect_new_button_clicked(GtkButton *button, gpointer user_data); void on_reflect_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_reflect_apply_button_clicked(GtkButton *button, gpointer user_data); void on_reflect_ok_button_clicked(GtkButton *button, gpointer user_data); void on_reflect_editor_destroy(GtkObject *object, gpointer user_data); void on_scale_editor_destroy(GtkObject *object, gpointer user_data); void on_scale_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_scale_new_button_clicked(GtkButton *button, gpointer user_data); void on_scale_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_scale_apply_button_clicked(GtkButton *button, gpointer user_data); void on_scale_ok_button_clicked(GtkButton *button, gpointer user_data); void on_cylinder_taginc_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_cylinder_total_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_cylinder_new_button_clicked(GtkButton *button, gpointer user_data); void on_cylinder_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_cylinder_apply_button_clicked(GtkButton *button, gpointer user_data); void on_cylinder_ok_button_clicked(GtkButton *button, gpointer user_data); void on_cylinder_editor_destroy(GtkObject *object, gpointer user_data); void on_transform_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_transform_new_button_clicked(GtkButton *button, gpointer user_data); void on_transform_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_transform_apply_button_clicked(GtkButton *button, gpointer user_data); void on_transform_ok_button_clicked(GtkButton *button, gpointer user_data); void on_transform_editor_destroy(GtkObject *object, gpointer user_data); void on_gend_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_gend_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_gend_apply_button_clicked(GtkButton *button, gpointer user_data); void on_gend_ok_button_clicked(GtkButton *button, gpointer user_data); void on_gend_editor_destroy(GtkObject *object, gpointer user_data); void on_kernel_command_destroy(GtkObject *object, gpointer user_data); void on_kernel_checkbutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_kernel_new_button_clicked(GtkButton *button, gpointer user_data); void on_kernel_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_kernel_apply_button_clicked(GtkButton *button, gpointer user_data); void on_kernel_ok_button_clicked(GtkButton *button, gpointer user_data); void on_execute_command_destroy(GtkObject *object, gpointer user_data); void on_execute_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_execute_new_button_clicked(GtkButton *button, gpointer user_data); void on_execute_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_execute_apply_button_clicked(GtkButton *button, gpointer user_data); void on_execute_ok_button_clicked(GtkButton *button, gpointer user_data); void on_intrange_command_destroy(GtkObject *object, gpointer user_data); void on_intrange_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_intrange_new_button_clicked(GtkButton *button, gpointer user_data); void on_intrange_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_intrange_apply_button_clicked(GtkButton *button, gpointer user_data); void on_intrange_ok_button_clicked(GtkButton *button, gpointer user_data); void on_ground_command_destroy(GtkObject *object, gpointer user_data); void on_ground_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_ground_checkbutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_ground_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_ground_new_button_clicked(GtkButton *button, gpointer user_data); void on_ground_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_ground_apply_button_clicked(GtkButton *button, gpointer user_data); void on_ground_ok_button_clicked(GtkButton *button, gpointer user_data); void on_nearfield_command_destroy(GtkObject *object, gpointer user_data); void on_nearfield_nh_checkbutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_nearfield_ne_checkbutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_nearfield_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_nearfield_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_nearfield_new_button_clicked(GtkButton *button, gpointer user_data); void on_nearfield_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_nearfield_apply_button_clicked(GtkButton *button, gpointer user_data); void on_nearfield_ok_button_clicked(GtkButton *button, gpointer user_data); void on_radiation_command_destroy(GtkObject *object, gpointer user_data); void on_radiation_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_radiation_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_radiation_new_button_clicked(GtkButton *button, gpointer user_data); void on_radiation_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_radiation_apply_button_clicked(GtkButton *button, gpointer user_data); void on_radiation_ok_button_clicked(GtkButton *button, gpointer user_data); void on_excitation_command_destroy(GtkObject *object, gpointer user_data); void on_excitation_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_excitation_checkbutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_excitation_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_excitation_new_button_clicked(GtkButton *button, gpointer user_data); void on_excitation_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_excitation_apply_button_clicked(GtkButton *button, gpointer user_data); void on_excitation_ok_button_clicked(GtkButton *button, gpointer user_data); void on_frequency_command_destroy(GtkObject *object, gpointer user_data); void on_frequency_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_frequency_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_frequency_step_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_frequency_new_button_clicked(GtkButton *button, gpointer user_data); void on_frequency_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_frequency_apply_button_clicked(GtkButton *button, gpointer user_data); void on_frequency_ok_button_clicked(GtkButton *button, gpointer user_data); void on_loading_command_destroy(GtkObject *object, gpointer user_data); void on_loading_radiobutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_loading_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_loading_new_button_clicked(GtkButton *button, gpointer user_data); void on_loading_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_loading_apply_button_clicked(GtkButton *button, gpointer user_data); void on_loading_ok_button_clicked(GtkButton *button, gpointer user_data); void on_network_command_destroy(GtkObject *object, gpointer user_data); void on_network_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_network_new_button_clicked(GtkButton *button, gpointer user_data); void on_network_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_network_apply_button_clicked(GtkButton *button, gpointer user_data); void on_network_ok_button_clicked(GtkButton *button, gpointer user_data); void on_txline_command_destroy(GtkObject *object, gpointer user_data); void on_txline_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_txline_new_button_clicked(GtkButton *button, gpointer user_data); void on_txline_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_txline_apply_button_clicked(GtkButton *button, gpointer user_data); void on_txline_ok_button_clicked(GtkButton *button, gpointer user_data); void on_txline_checkbutton_toggled(GtkToggleButton *togglebutton, gpointer user_data); void on_ground2_command_destroy(GtkObject *object, gpointer user_data); void on_ground2_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_ground2_new_button_clicked(GtkButton *button, gpointer user_data); void on_ground2_cancel_button_clicked(GtkButton *button, gpointer user_data); void on_ground2_apply_button_clicked(GtkButton *button, gpointer user_data); void on_ground2_ok_button_clicked(GtkButton *button, gpointer user_data); void on_loop_start_clicked(GtkButton *button, gpointer user_data); void on_loop_pause_clicked(GtkButton *button, gpointer user_data); void on_loop_reset_clicked(GtkButton *button, gpointer user_data); void on_about_activate(GtkMenuItem *menuitem, gpointer user_data); void on_aboutdialog_close(GtkDialog *dialog, gpointer user_data); void on_aboutdialog_response(GtkDialog *dialog, gint response_id, gpointer user_data); void on_net_gain_activate(GtkMenuItem *menuitem, gpointer user_data); gboolean on_structure_drawingarea_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data); void on_structure_zoom_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_structure_plus_button_clicked(GtkButton *button, gpointer user_data); void on_structure_minus_button_clicked(GtkButton *button, gpointer user_data); void on_structure_one_button_clicked(GtkButton *button, gpointer user_data); gboolean on_rdpattern_drawingarea_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data); void on_rdpattern_zoom_spinbutton_value_changed(GtkSpinButton *spinbutton, gpointer user_data); void on_rdpattern_plus_button_clicked(GtkButton *button, gpointer user_data); void on_rdpattern_minus_button_clicked(GtkButton *button, gpointer user_data); void on_rdpattern_one_button_clicked(GtkButton *button, gpointer user_data); gboolean on_structure_drawingarea_scroll_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); gboolean on_rdpattern_drawingarea_scroll_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); /* cmnd_edit.c */ void Excitation_Command(int action); void Frequency_Command(int action); void Ground_Command(int action); void Ground2_Command(int action); void Radiation_Command(int action); void Loading_Command(int action); void Network_Command(int action); void Txline_Command(int action); void Nearfield_Command(int action); void Kernel_Command(int action); void Intrange_Command(int action); void Execute_Command(int action); void Insert_EN_Card(GtkListStore *store, GtkTreeIter *iter); void Get_Command_Data(GtkListStore *store, GtkTreeIter *iter, int *iv, double *fv); void Set_Command_Data(GtkListStore *store, GtkTreeIter *iter, int *iv, double *fv); void Insert_Blank_Command_Row(GtkTreeView *view, GtkListStore *store, GtkTreeIter *iter, const gchar *name); void Set_Labels(GtkWidget *widget, gchar **labels, gchar **text, gint num); /* draw.c */ void Set_Gdk_Segment(GdkSegment *segm, projection_parameters_t *params, double x1, double y1, double z1, double x2, double y2, double z2); void Project_on_Screen(projection_parameters_t *params, double x, double y, double z, double *xs, double *ys); void Project_XYZ_Axes(GdkPixmap *pixmap, projection_parameters_t *params, GdkSegment *segment); void Draw_XYZ_Axes(GdkPixmap *pixmap, projection_parameters_t params); void New_Projection_Parameters(int width, int height, projection_parameters_t *params); void Value_to_Color(double *red, double *grn, double *blu, double val, double max); void Cairo_Draw_Polygon(cairo_t *cr, GdkPoint *points, int npoints); void Cairo_Draw_Segments(cairo_t *cr, GdkSegment *segm, int nseg); void Cairo_Draw_Line(cairo_t *cr, int x1, int y1, int x2, int y2); void Cairo_Draw_Lines(cairo_t *cr, GdkPoint *points, int npoints); /* draw_radiation.c */ void Draw_Radiation(GtkWidget *drawingarea); void Draw_Radiation_Pattern(void); void Draw_Near_Field(void); gboolean Animate_Near_Field(gpointer udata); double Scale_Gain(double gain, int fstep, int idx); double Polarization_Factor(int pol_type, int fstep, int idx); void Set_Polarization(int pol); void Set_Gain_Style(int gs); void New_Radiation_Projection_Angle(void); gboolean Redo_Radiation_Pattern(gpointer udata); double Viewer_Gain(projection_parameters_t proj_parameters, int fstep); void Rdpattern_Window_Killed(void); void Set_Window_Labels(void); void Alloc_Rdpattern_Buffers(int nfrq, int nth, int nph); void Alloc_Nearfield_Buffers(int n1, int n2, int n3); void Free_Draw_Buffers(void); /* draw_structure.c */ void Draw_Structure(GtkWidget *drawingarea); void New_Wire_Data(void); void New_Patch_Data(void); void Process_Wire_Segments(void); void Process_Surface_Patches(void); void Draw_Wire_Segments(GdkSegment *segm, gint nseg); void Draw_Surface_Patches(GdkSegment *segm, gint npatch); gboolean Redo_Currents(gpointer udata); void New_Structure_Projection_Angle(void); void Init_Struct_Drawing(void); void Show_Viewer_Gain(GtkWidget *window, const char *widget, projection_parameters_t proj_params); /* fields.c */ void efld(double xi, double yi, double zi, double ai, int ij); void eksc(double s, double z, double rh, double xk, int ij, _Complex double *ezs, _Complex double *ers, _Complex double *ezc, _Complex double *erc, _Complex double *ezk, _Complex double *erk); void ekscx(double bx, double s, double z, double rhx, double xk, int ij, int inx1, int inx2, _Complex double *ezs, _Complex double *ers, _Complex double *ezc, _Complex double *erc, _Complex double *ezk, _Complex double *erk); void gf(double zk, double *co, double *si); void gh(double zk, double *hr, double *hi); void gwave(_Complex double *erv, _Complex double *ezv, _Complex double *erh, _Complex double *ezh, _Complex double *eph); void gx(double zz, double rh, double xk, _Complex double *gz, _Complex double *gzp); void gxx(double zz, double rh, double a, double a2, double xk, int ira, _Complex double *g1, _Complex double *g1p, _Complex double *g2, _Complex double *g2p, _Complex double *g3, _Complex double *gzp); void hfk(double el1, double el2, double rhk, double zpkx, double *sgr, double *sgi); void hintg(double xi, double yi, double zi); void hsfld(double xi, double yi, double zi, double ai); void hsflx(double s, double rh, double zpx, _Complex double *hpk, _Complex double *hps, _Complex double *hpc); void nefld(double xob, double yob, double zob, _Complex double *ex, _Complex double *ey, _Complex double *ez); void nfpat(int nfeh); void nhfld(double xob, double yob, double zob, _Complex double *hx, _Complex double *hy, _Complex double *hz); void pcint(double xi, double yi, double zi, double cabi, double sabi, double salpi, _Complex double *e); void unere(double xob, double yob, double zob); void Near_Field_Total(_Complex double ex, _Complex double ey, _Complex double ez, int nfeh, int idx); /* fork.c */ void Child_Process(int num_child); void Child_Input_File(void); int Fork_Command(const char *cdstr); ssize_t Read_Pipe(int idx, char *str, ssize_t len, gboolean err); ssize_t Write_Pipe(int idx, char *str, ssize_t len, gboolean err); ssize_t PRead_Pipe(int idx, char *str, ssize_t len, gboolean err); void Pass_Freq_Data(void); void Get_Freq_Data(int idx, int fstep); void Mem_Copy(char *buff, char *var, size_t cnt, gboolean wrt); /* geom_edit.c */ void Wire_Editor(int action); void Patch_Editor(int action); void Arc_Editor(int action); void Helix_Editor(int action); void Reflect_Editor(int action); void Scale_Editor(int action); void Cylinder_Editor(int action); void Transform_Editor(int action); void Gend_Editor(int action); void Insert_GE_Card(GtkListStore *store, GtkTreeIter *iter); void Get_Geometry_Data(GtkListStore *store, GtkTreeIter *iter, int *iv, double *fv); void Get_Geometry_Int_Data(GtkListStore *store, GtkTreeIter *iter, int *iv); void Set_Geometry_Data(GtkListStore *store, GtkTreeIter *iter, int *iv, double *fv); void Set_Geometry_Int_Data(GtkListStore *store, GtkTreeIter *iter, int *iv); gboolean Check_Card_Name(GtkListStore *store, GtkTreeIter *iter, gboolean next, const gchar *name); gboolean Give_Up(int *busy, GtkWidget *widget); void Insert_Blank_Geometry_Row(GtkTreeView *view, GtkListStore *store, GtkTreeIter *iter, const gchar *name); void Remove_Row(GtkListStore *store, GtkTreeIter *iter); gboolean Get_Selected_Row(GtkTreeView *view, GtkListStore *store, GtkTreeIter *iter, gchar *name); void Set_Wire_Conductivity(int tag, double s, GtkListStore *store); gboolean Get_Wire_Conductivity(int tag, double *s, GtkListStore *store); /* geometry.c */ gboolean arc(int itg, int ns, double rada, double ang1, double ang2, double rad); gboolean conect(int ignd); void helix(double s, double hl, double a1, double b1, double a2, double b2, double rad, int ns, int itg); int isegno(int itagi, int mx); gboolean move(double rox, double roy, double roz, double xs, double ys, double zs, int its, int nrpt, int itgi); gboolean patch(int nx, int ny, double ax1, double ay1, double az1, double ax2, double ay2, double az2, double ax3, double ay3, double az3, double ax4, double ay4, double az4); void subph(int nx, int ny); gboolean reflc(int ix, int iy, int iz, int iti, int nop); void wire(double xw1, double yw1, double zw1, double xw2, double yw2, double zw2, double rad, double rdel, double rrad, int ns, int itg); /* gnuplot.c */ void Save_FreqPlots_Gnuplot_Data(char *filename); void Save_RadPattern_Gnuplot_Data(char *filename); void Save_Struct_Gnuplot_Data(char *filename); /* ground.c */ void rom2(double a, double b, _Complex double *sum, double dmin); void sflds(double t, _Complex double *e); /* input.c */ gboolean Read_Comments(void); gboolean Read_Geometry(void); gboolean Read_Commands(void); gboolean readmn(char *mn, int *i1, int *i2, int *i3, int *i4, double *f1, double *f2, double *f3, double *f4, double *f5, double *f6); gboolean readgm(char *gm, int *i1, int *i2, double *x1, double *y1, double *z1, double *x2, double *y2, double *z2, double *rad); gboolean datagn(void); gboolean Tag_Seg_Error(int tag, int segs); /* interface.c */ GtkWidget *create_main_window(void); GtkWidget *create_filechooserdialog(void); GtkWidget *create_fileselection(void); GtkWidget *create_freqplots_window(void); GtkWidget *create_rdpattern_window(void); GtkWidget *create_quit_dialog(void); GtkWidget *create_error_dialog(void); GtkWidget *create_animate_dialog(void); GtkWidget *create_nec2_editor(void); GtkWidget *create_wire_editor(void); GtkWidget *create_patch_editor(void); GtkWidget *create_arc_editor(void); GtkWidget *create_transform_editor(void); GtkWidget *create_helix_editor(void); GtkWidget *create_reflect_editor(void); GtkWidget *create_scale_editor(void); GtkWidget *create_cylinder_editor(void); GtkWidget *create_kernel_command(void); GtkWidget *create_execute_command(void); GtkWidget *create_intrange_command(void); GtkWidget *create_ground_command(void); GtkWidget *create_nearfield_command(void); GtkWidget *create_radiation_command(void); GtkWidget *create_excitation_command(void); GtkWidget *create_frequency_command(void); GtkWidget *create_loading_command(void); GtkWidget *create_network_command(void); GtkWidget *create_txline_command(void); GtkWidget *create_ground2_command(void); GtkWidget *create_gend_editor(void); GtkWidget *create_aboutdialog(void); /* main.c */ int main(int argc, char *argv[]); gboolean Open_Input_File(gpointer udata); gboolean isChild(void); /* matrix.c */ void cmset(int nrow, _Complex double *cmx, double rkhx, int iexkx); void cmss(int j1, int j2, int im1, int im2, _Complex double *cmx, int nrow, int itrp); void cmsw(int j1, int j2, int i1, int i2, _Complex double *cmx, _Complex double *cw, int ncw, int nrow, int itrp); void cmws(int j, int i1, int i2, _Complex double *cmx, int nr, _Complex double *cw, int itrp); void cmww(int j, int i1, int i2, _Complex double *cmx, int nr, _Complex double *cw, int nw, int itrp); void etmns(double p1, double p2, double p3, double p4, double p5, double p6, int ipr, _Complex double *e); void factr(int n, _Complex double *a, int *ip, int ndim); void factrs(int np, int nrow, _Complex double *a, int *ip); void fblock(int nrow, int ncol, int imax, int ipsym); void solve(int n, _Complex double *a, int *ip, _Complex double *b, int ndim); void solves(_Complex double *a, int *ip, _Complex double *b, int neq, int nrh, int np, int n, int mp, int m); /* nec2_model.c */ void Nec2_Input_File_Treeview(int action); void Create_List_Stores(void); void Create_Default_File(void); void List_Comments(void); void List_Geometry(void); void List_Commands(void); void Insert_Columns(GtkWidget *window, gchar *treeview, GtkListStore *store, int ncols, char *colname[]); void cell_edited_callback(GtkCellRendererText *cell, gchar *path, gchar *new_text, gpointer user_data); void Save_Nec2_Input_File(GtkWidget *treeview_window, char *nec2_file); void Save_Treeview_Data(GtkTreeView *tree_view, int ncols, FILE *nec2_fp); gboolean gtk_tree_model_iter_previous(GtkTreeModel *tree_model, GtkTreeIter *iter); /* network.c */ void netwk(_Complex double *cmx, int *ip, _Complex double *einc); void load(int *ldtyp, int *ldtag, int *ldtagf, int *ldtagt, double *zlr, double *zli, double *zlc); /* plot_freqdata.c */ void Plot_Frequency_Data(void); void Display_Frequency_Data(void); void Draw_Plotting_Frame(gchar **title, GdkRectangle *rect, int nhor, int nvert); void Plot_Vertical_Scale(double red, double grn, double blu, int x, int y, int height, double max, double min, int nval); void Plot_Horizontal_Scale(double red, double grn, double blu, int x, int y, int width, double max, double min, int nval); void Draw_Graph(double red, double grn, double blu, GdkRectangle *rect, double *a, double *b, double amax, double amin, double bmax, double bmin, int nval, int side); void Set_Rectangle(GdkRectangle *rect, int x, int y, int w, int h); void Fit_to_Scale(double *max, double *min, int *nval); void Fit_to_Scale2(double *max1, double *min1, double *max2, double *min2, int *nval); void New_Max_Min(double *max, double *min, double sval, int *nval); void Plot_Graph2(double *fa, double *fb, double *fc, int nc, char *titles[], int nplt, int posn); void Plot_Graph(double *fa, double *fb, int nb, char *titles[], int nplt, int posn); void Plots_Window_Killed(void); void Set_Frequency_On_Click(GdkEventButton *event); /* radiation.c */ void ffld(double thet, double phi, _Complex double *eth, _Complex double *eph); void fflds(double rox, double roy, double roz, _Complex double *scur, _Complex double *ex, _Complex double *ey, _Complex double *ez); void gfld(double rho, double phi, double rz, _Complex double *eth, _Complex double *epi, _Complex double *erd, _Complex double ux, int ksymp); void rdpat(void); /* shared.c */ /* somnec.c */ void somnec(double epr, double sig, double fmhz); void bessel(_Complex double z, _Complex double *j0, _Complex double *j0p); void evlua(_Complex double *erv, _Complex double *ezv, _Complex double *erh, _Complex double *eph); void fbar(_Complex double p, _Complex double *fbar); void gshank(_Complex double start, _Complex double dela, _Complex double *sum, int nans, _Complex double *seed, int ibk, _Complex double bk, _Complex double delb); void hankel(_Complex double z, _Complex double *h0, _Complex double *h0p); void lambda(double t, _Complex double *xlam, _Complex double *dxlam); void rom1(int n, _Complex double *sum, int nx); void saoa(double t, _Complex double *ans); /* support.c */ GtkWidget *lookup_widget(GtkWidget *widget, const gchar *widget_name); void add_pixmap_directory(const gchar *directory); GtkWidget *create_pixmap(GtkWidget *widget, const gchar *filename); GdkPixbuf *create_pixbuf(const gchar *filename); void glade_set_atk_action_description(AtkAction *action, const gchar *action_name, const gchar *description); /* utils.c */ void usage(void); int stop(char *mesg, int err); gboolean Nec2_Save_Warn(const gchar *mesg); int Load_Line(char *buff, FILE *pfile); void mem_alloc(void **ptr, size_t req, gchar *str); void mem_realloc(void **ptr, size_t req, gchar *str); void free_ptr(void **ptr); gboolean Open_File(FILE **fp, char *fname, const char *mode); void Close_File(FILE **fp); void Display_Fstep(GtkEntry *entry, int fstep); int isFlagSet(unsigned long long int flag); int isFlagClear(unsigned long long int flag); void SetFlag(unsigned long long int flag); void ClearFlag(unsigned long long int flag); void ToggleFlag(unsigned long long int flag); void SaveFlag(unsigned long long int *flag, unsigned long long int mask); void Strlcpy(char *dest, const char *src, size_t n); void Strlcat(char *dest, const char *src, size_t n); double Strtod(char *nptr, char **endptr); /* xnec2c.c */ void Frequency_Scale_Geometry(void); void Structure_Impedance_Loading(void); void Ground_Parameters(void); void Set_Interaction_Matrix(void); void Set_Excitation(void); void Set_Network_Data(void); void Power_Loss(void); void Radiation_Pattern(void); void Near_Field_Pattern(void); void New_Frequency(void); gboolean Frequency_Loop(gpointer udata); gboolean Start_Frequency_Loop(void); void Stop_Frequency_Loop(void); void Incident_Field_Loop(void); #endif xnec2c-3.4/src/draw.c000066400000000000000000000213761257141547200144530ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* * draw.c * * Drawing routines for xnec2c */ #include "draw.h" #include "shared.h" /*-----------------------------------------------------------------------*/ /* Set_Gdk_Segment() * * Calculates window x,y co-ordinates of a GdkSegment for * drawing on Screen. Input data is a line in the xyz frame */ void Set_Gdk_Segment( GdkSegment *segm, projection_parameters_t *params, double x1, double y1, double z1, double x2, double y2, double z2 ) { double x, y; /* Project end 1 of seg in xyz frame to screen frame */ Project_on_Screen( params, x1, y1, z1, &x, &y ); segm->x1 = (gint)(params->x_center + x*params->xy_scale); segm->y1 = params->pixmap_height - (gint)(params->y_center + y*params->xy_scale); /* Project end 2 of seg in xyz frame to screen frame */ Project_on_Screen( params, x2, y2, z2, &x, &y ); segm->x2 = (gint)(params->x_center + x*params->xy_scale); segm->y2 = params->pixmap_height - (gint)(params->y_center + y*params->xy_scale); } /* Set_Gdk_Segment() */ /*-----------------------------------------------------------------------*/ /* Project_on_Screen() * * Projects a point in the x,y,z co-ordinate * frame of NEC2 to the x,y frame of the Screen */ void Project_on_Screen( projection_parameters_t *params, double x, double y, double z, double *xs, double *ys ) { *xs = y*params->cos_wr - x*params->sin_wr; *ys = z*params->cos_wi - params->sin_wi * (x*params->cos_wr + y*params->sin_wr); } /* Project_on_Screen() */ /*-----------------------------------------------------------------------*/ /* Project_XYZ_Axes() * * Sets GdkSegment data to project xyz axes on Screen */ void Project_XYZ_Axes( GdkPixmap *pixmap, projection_parameters_t *params, GdkSegment *segment ) { double x, y; PangoLayout *layout; GdkSegment *segm = segment; /* cairo context */ cairo_t *cr = gdk_cairo_create( pixmap ); cairo_set_source_rgb( cr, WHITE ); layout = gtk_widget_create_pango_layout( structure_drawingarea, "x" ); segm->x1 = (gint)params->x_center; segm->y1 = params->pixmap_height - (gint)(params->y_center); Project_on_Screen( params, params->r_max, 0.0, 0.0, &x, &y ); segm->x2 = (gint)(params->x_center + x*params->xy_scale); segm->y2 = params->pixmap_height - (gint)(params->y_center + y*params->xy_scale); cairo_move_to( cr, (double)segm->x2, (double)segm->y2 ); pango_cairo_show_layout( cr, layout ); segm++; segm->x1 = (gint)params->x_center; segm->y1 = params->pixmap_height - (gint)params->y_center; Project_on_Screen( params, 0.0, params->r_max, 0.0, &x, &y ); segm->x2 = (gint)(params->x_center + x*params->xy_scale); segm->y2 = params->pixmap_height - (gint)(params->y_center + y*params->xy_scale); pango_layout_set_text( layout, "y", -1 ); cairo_move_to( cr, (double)segm->x2, (double)segm->y2 ); pango_cairo_show_layout( cr, layout ); segm++; segm->x1 = (gint)params->x_center; segm->y1 = params->pixmap_height - (gint)params->y_center; Project_on_Screen( params, 0.0, 0.0, params->r_max, &x, &y ); segm->x2 = (gint)(params->x_center + x*params->xy_scale); segm->y2 = params->pixmap_height - (gint)(params->y_center + y*params->xy_scale); pango_layout_set_text( layout, " z", -1 ); cairo_move_to( cr, (double)segm->x2, (double)segm->y2 ); pango_cairo_show_layout( cr, layout ); g_object_unref( layout ); cairo_destroy( cr ); } /* Project_XYZ_Axes() */ /*-----------------------------------------------------------------------*/ /* Draw_XYZ_Axes() * * Draws the xyz axes to Screen */ void Draw_XYZ_Axes( GdkPixmap *pixmap, projection_parameters_t params ) { static GdkSegment seg[3]; cairo_t *cr = gdk_cairo_create( pixmap ); cairo_set_source_rgb( cr, WHITE ); /* Calcualte Screen co-ordinates of xyz axes */ Project_XYZ_Axes( pixmap, ¶ms, seg ); /* Draw xyz axes */ Cairo_Draw_Segments( cr, seg, 3 ); cairo_destroy( cr ); } /* Draw_XYZ_Axes() */ /*-----------------------------------------------------------------------*/ /* New_Projection_Parameters() * * Calculates values for some projection parameters when * a new backing pixmap is created after window resize or * new wire or patch data is entered. */ void New_Projection_Parameters( int width, int height, projection_parameters_t *params ) { double size2; if( width < height ) size2 = (double)width/2.0; else size2 = (double)height/2.0; /* This defines the center of the drawing areas. For the x co-ordinate * half the size of the drawing area is right (for widths of odd number * of pixels, so that there are even and equal number of pixels either * side of center). But for the y co-ordinate we need to round up as * y is from the top down and the y co-ordinate of center is calculated * from height - y_center and this leads to a 1-pixel error */ params->x_center = size2; params->y_center = size2 + 0.5; if( params->r_max == 0.0 ) params->xy_scale1 = 1.0; else params->xy_scale1 = size2 / params->r_max; params->xy_scale = params->xy_scale1 * params->xy_zoom; params->pixmap_width = width; params->pixmap_height = height; } /* New_Projection_Parameters() */ /*-----------------------------------------------------------------------*/ /* Value_to_Color() * * Produces an rgb color to represent an * input value relative to a maximum value */ void Value_to_Color( double *red, double *grn, double *blu, double val, double max ) { int ival; /* Scale val so that normalized ival is 0-1279 */ ival = (int)(1279.0 * val / max); /* Color hue according to imag value */ switch( ival/256 ) { case 0: /* 0-255 : magenta to blue */ *red = 255.0 - (double)ival; *grn = 0.0; *blu = 255.0; break; case 1: /* 256-511 : blue to cyan */ *red = 0.0; *grn = (double)ival - 256.0; *blu = 255.0; break; case 2: /* 512-767 : cyan to green */ *red = 0.0; *grn = 255.0; *blu = 767.0 - (double)ival; break; case 3: /* 768-1023 : green to yellow */ *red = (double)ival - 768.0; *grn = 255.0; *blu = 0.0; break; case 4: /* 1024-1279 : yellow to red */ *red = 255.0; *grn = 1279.0 - (double)ival; *blu = 0.0; } /* switch( imag / 256 ) */ /* Scale values between 0.0-1.0 */ *red /= 255.0; *grn /= 255.0; *blu /= 255.0; } /* Value_to_Color() */ /*-----------------------------------------------------------------------*/ /* Cairo_Draw_Polygon() * * Draws a polygon, given a number of points */ void Cairo_Draw_Polygon( cairo_t* cr, GdkPoint *points, int npoints ) { int idx; cairo_move_to( cr, (double)points[0].x, (double)points[0].y ); for( idx = 1; idx < npoints; idx++ ) cairo_line_to( cr, (double)points[idx].x, (double)points[idx].y ); cairo_close_path( cr ); } /* Cairo_Draw_Polygon() */ /*-----------------------------------------------------------------------*/ /* Cairo_Draw_Segments() * * Draws a number of line segments */ void Cairo_Draw_Segments( cairo_t *cr, GdkSegment *segm, int nseg ) { int idx; for( idx = 0; idx < nseg; idx++ ) { cairo_move_to( cr, (double)segm[idx].x1, (double)segm[idx].y1 ); cairo_line_to( cr, (double)segm[idx].x2, (double)segm[idx].y2 ); } cairo_stroke( cr ); } /* Cairo_Draw_Segments() */ /*-----------------------------------------------------------------------*/ /* Cairo_Draw_Line() * * Draws a line between to x,y co-ordinates */ void Cairo_Draw_Line( cairo_t *cr, int x1, int y1, int x2, int y2 ) { cairo_move_to( cr, (double)x1, (double)y1 ); cairo_line_to( cr, (double)x2, (double)y2 ); cairo_stroke( cr ); } /* Cairo_Draw_Line() */ /*-----------------------------------------------------------------------*/ /* Cairo_Draw_Lines() * * Draws lines between points */ void Cairo_Draw_Lines( cairo_t *cr, GdkPoint *points, int npoints ) { int idx; cairo_move_to( cr, (double)points[0].x, (double)points[0].y ); for( idx = 1; idx < npoints; idx++ ) cairo_line_to( cr, (double)points[idx].x, (double)points[idx].y ); cairo_stroke( cr ); } /* Cairo_Draw_Line() */ /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/draw.h000066400000000000000000000016001257141547200144440ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef DRAW_H #define DRAW_H 1 #include "common.h" #include "support.h" #endif xnec2c-3.4/src/draw_radiation.c000066400000000000000000001004111257141547200164710ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* draw_radiation.c * * Code for drawing radiation patterns */ #include "draw_radiation.h" #include "shared.h" /* For coloring rad pattern */ static double *red = NULL, *grn = NULL, *blu = NULL; /* Buffered points in 3d (xyz) space * forming the radiation pattern */ static point_3d_t *point_3d = NULL; /*-----------------------------------------------------------------------*/ /* Draw_Radiation() * * Draws the radiation pattern or near E/H fields */ void Draw_Radiation( GtkWidget *drawingarea ) { /* Abort if xnec2c may be quit by user */ if( isFlagSet(MAIN_QUIT) || isFlagClear(ENABLE_EXCITN) ) return; /* Cairo context */ cairo_t *cr = gdk_cairo_create( rdpattern_pixmap ); /* Clear pixmap */ cairo_set_source_rgb( cr, BLACK ); cairo_rectangle( cr, 0.0, 0.0, (double)rdpattern_proj_params.pixmap_width, (double)rdpattern_proj_params.pixmap_height); cairo_fill( cr ); /* Draw rad pattern or E/H fields */ if( isFlagSet(DRAW_GAIN) ) Draw_Radiation_Pattern(); else if( isFlagSet(DRAW_EHFIELD) ) Draw_Near_Field(); /* Render pixmap to screen */ gdk_window_set_back_pixmap( drawingarea->window, rdpattern_pixmap, FALSE ); gdk_window_clear( drawingarea->window ); /* Display frequency step */ Display_Fstep( rdpattern_fstep_entry, calc_data.fstep ); /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); cairo_destroy( cr ); } /* Draw_Radiation() */ /*-----------------------------------------------------------------------*/ /* Draw_Radiation_Pattern() * * Draws the radiation pattern as a frame of line * segmants joining the points defined by spherical * co-ordinates theta, phi and r = gain(theta, phi) */ void Draw_Radiation_Pattern( void ) { /* Abort if rad pattern cannot be drawn */ if( isFlagClear(ENABLE_RDPAT) || (calc_data.fstep < 0) ) return; /* Line segments to draw on Screen */ GdkSegment segm; int idx, nth, /* Theta step count */ nph, /* Phi step count */ col_idx, /* Index to rad pattern color buffers */ pts_idx; /* Index to rad pattern 3d-points buffer */ /* Frequency step and polarization type */ int fstep, pol; /* Theta and phi angles defining a rad pattern point * and distance of its projection from xyz origin */ double theta, phi, r, r_min, r_range; /* theta and phi step in rads */ double dth = (double)fpat.dth * (double)TA; double dph = (double)fpat.dph * (double)TA; /* Used to set text in labels */ gchar txt[7]; /* Cairo context */ cairo_t *cr = gdk_cairo_create( rdpattern_pixmap ); fstep = calc_data.fstep; pol = calc_data.pol_type; /* Change drawing if newer rad pattern data */ if( isFlagSet(DRAW_NEW_RDPAT) ) { size_t mreq = ((size_t)(fpat.nth * fpat.nph)) * sizeof(point_3d_t); mem_realloc( (void **)&point_3d, mreq, "in draw_radiation.c" ); mreq = (size_t)((fpat.nth-1) * fpat.nph + (fpat.nph-1) * fpat.nth); mreq *= sizeof(double); mem_realloc( (void **)&red, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&grn, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&blu, mreq, "in draw_radiation.c" ); ClearFlag( DRAW_NEW_RDPAT ); /* Distance of rdpattern point furthest from xyz origin */ idx = rad_pattern[fstep].max_gain_idx[pol]; rdpattern_proj_params.r_max = Scale_Gain( rad_pattern[fstep].gtot[idx], fstep, idx); /* Distance of rdpattern point nearest to xyz origin */ idx = rad_pattern[fstep].min_gain_idx[pol]; r_min = Scale_Gain( rad_pattern[fstep].gtot[idx], fstep, idx); /* Range of scaled rdpattern gain values */ r_range = rdpattern_proj_params.r_max - r_min; /* Set radiation pattern projection parametrs */ New_Projection_Parameters( rdpattern_pixmap_width, rdpattern_pixmap_height, &rdpattern_proj_params ); /*** Convert radiation pattern values * to points in 3d space in x,y,z axis ***/ pts_idx = 0; phi = (double)(fpat.phis * TA); /* In rads */ /* Step phi angle */ for( nph = 0; nph < fpat.nph; nph++ ) { theta = (double)(fpat.thets * TA); /* In rads */ /* Step theta angle */ for( nth = 0; nth < fpat.nth; nth++ ) { /* Distance of pattern point from the xyz origin */ r = Scale_Gain( rad_pattern[fstep].gtot[pts_idx], fstep, pts_idx ); /* Distance of pattern point from xyz origin */ point_3d[pts_idx].r = r; /* Distance of point's projection on xyz axis, from origin */ point_3d[pts_idx].z = r * cos(theta); r *= sin(theta); point_3d[pts_idx].x = r * cos(phi); point_3d[pts_idx].y = r * sin(phi); /* Step theta in rads */ theta += dth; /* Step 3d points index */ pts_idx++; } /* for( nth = 0; nth < fpat.nth; nth++ ) */ /* Step phi in rads */ phi += dph; } /* for( nph = 0; nph < fpat.nph; nph++ ) */ /* Calculate RGB value for rad pattern seg. * The average gain value of the two points * marking each line segment is used here */ /* Pattern segment color in theta direction */ col_idx = pts_idx = 0; for( nph = 0; nph < fpat.nph; nph++ ) { for( nth = 1; nth < fpat.nth; nth++ ) { Value_to_Color( &red[col_idx], &grn[col_idx], &blu[col_idx], (point_3d[pts_idx].r+point_3d[pts_idx+1].r)/2.0-r_min, r_range ); col_idx++; pts_idx++; } /* for( nph = 0; nph < fpat.nph; nph++ ) */ /* Needed because of "index look-ahead" above */ pts_idx++; } /* for( nth = 1; nth < fpat.nth; nth++ ) */ /* Pattern segment color in phi direction */ for( nth = 0; nth < fpat.nth; nth++ ) { pts_idx = nth; for( nph = 1; nph < fpat.nph; nph++ ) { Value_to_Color( &red[col_idx], &grn[col_idx], &blu[col_idx], (point_3d[pts_idx].r + point_3d[pts_idx+fpat.nth].r)/2.0-r_min, r_range ); col_idx++; /* Needed because of "index look-ahead" above */ pts_idx += fpat.nth; } /* for( nth = 0; nth < fpat.nth; nth++ ) */ } /* for( nph = 1; nph < fpat.nph; nph++ ) */ /* Show max gain on color code bar */ snprintf( txt, 7, "%6f", rad_pattern[fstep].max_gain[pol] ); gtk_label_set_text( GTK_LABEL(lookup_widget(rdpattern_window, "rdpattern_colorcode_maxlabel")), txt ); /* Show min gain on color code bar */ snprintf( txt, 5, "%4f", rad_pattern[fstep].min_gain[pol] ); gtk_label_set_text( GTK_LABEL(lookup_widget(rdpattern_window, "rdpattern_colorcode_minlabel")), txt ); } /* if( isFlagSet(DRAW_NEWRDPAT) ) ) */ /* Draw xyz axes to Screen */ Draw_XYZ_Axes( rdpattern_pixmap, rdpattern_proj_params ); /* Overlay structure on Near Field pattern */ if( isFlagSet(OVERLAY_STRUCT) ) { /* Save structure pixmap and params pointers */ GdkPixmap *pixmap = structure_pixmap; projection_parameters_t params = structure_proj_params; /* Divert structure drawing to rad pattern area */ structure_pixmap = rdpattern_pixmap; structure_proj_params = rdpattern_proj_params; structure_proj_params.r_max = params.r_max; structure_proj_params.xy_scale = params.xy_scale1 * rdpattern_proj_params.xy_zoom; /* Process and draw geometry if enabled */ Process_Wire_Segments(); Process_Surface_Patches(); Draw_Surface_Patches( structure_segs+data.n, data.m ); Draw_Wire_Segments( structure_segs, data.n ); /* Restore structure pixmap and params */ structure_pixmap = pixmap; structure_proj_params = params; } /* if( isFlagSet(OVERLAY_STRUCT) ) */ /*** Draw rad pattern on screen ***/ /* Draw segments along theta direction */ col_idx = pts_idx = 0; for( nph = 0; nph < fpat.nph; nph++ ) { for( nth = 1; nth < fpat.nth; nth++ ) { /* Project line segment to Screen */ Set_Gdk_Segment( &segm, &rdpattern_proj_params, point_3d[pts_idx].x, point_3d[pts_idx].y, point_3d[pts_idx].z, point_3d[pts_idx+1].x, point_3d[pts_idx+1].y, point_3d[pts_idx+1].z ); pts_idx++; /* Draw segment */ cairo_set_source_rgb( cr, red[col_idx], grn[col_idx], blu[col_idx] ); Cairo_Draw_Line( cr, segm.x1, segm.y1, segm.x2, segm.y2 ); col_idx++; } /* for( nth = 1; nth < fpat.nth; nth++ ) */ pts_idx++; } /* for( nph = 0; nph < fpat.nph; nph++ ) */ /* Draw segments along phi direction */ for( nth = 0; nth < fpat.nth; nth++ ) { pts_idx = nth; for( nph = 1; nph < fpat.nph; nph++ ) { /* Project line segment to Screen */ Set_Gdk_Segment( &segm, &rdpattern_proj_params, point_3d[pts_idx].x, point_3d[pts_idx].y, point_3d[pts_idx].z, point_3d[pts_idx+fpat.nth].x, point_3d[pts_idx+fpat.nth].y, point_3d[pts_idx+fpat.nth].z ); /* Draw segment */ cairo_set_source_rgb( cr, red[col_idx], grn[col_idx], blu[col_idx] ); Cairo_Draw_Line( cr, segm.x1, segm.y1, segm.x2, segm.y2 ); col_idx++; /* Needed because drawing segments "looks ahead" * in the 3d points buffer in the above loop */ pts_idx += fpat.nth; } /* for( nph = 1; nph < fpat.nph; nph++ ) */ } /* for( nth = 0; nth < fpat.nth; nth++ ) */ /* Show gain in direction of viewer */ Show_Viewer_Gain( rdpattern_window, "rdpattern_viewer_gain", rdpattern_proj_params ); cairo_destroy( cr ); } /* Draw_Radiation_Pattern() */ /*-----------------------------------------------------------------------*/ /* Draw_Near_Field() * * Draws near E/H fields and Poynting vector */ void Draw_Near_Field( void ) { int idx, npts; /* Number of points to plot */ double fx, fy, fz, /* Co-ordinates of "free" end of field lines */ fscale; /* Scale factor for equalizing field line segments */ /* Scale factor ref, for normalizing field strength values */ static double dr; /* Co-ordinates of Poynting vectors */ static double *pov_x = NULL, *pov_y = NULL; static double *pov_z = NULL, *pov_r = NULL; /* Range of Poynting vector values, * its max and min and log of max/min */ static double pov_max = 0, max; /* Used to set text in labels */ gchar txt[9]; /* Line segments to draw on Screen */ GdkSegment segm; /* For coloring field lines */ double xred = 0.0, xgrn = 0.0, xblu = 0.0; /* Abort if drawing a near field pattern is not possible */ if( isFlagClear(ENABLE_NEAREH) || !near_field.valid ) return; /* Cairo context */ cairo_t *cr = gdk_cairo_create( rdpattern_pixmap ); /* Initialize projection parameters */ if( isFlagSet(DRAW_NEW_EHFIELD) ) { /* Reference for scale factor used in * normalizing field strength values */ if( fpat.near ) /* Spherical co-ordinates */ dr = (double)fpat.dxnr; else /* Rectangular co-ordinates */ dr = sqrt( (double)fpat.dxnr * (double)fpat.dxnr + (double)fpat.dynr * (double)fpat.dynr + (double)fpat.dznr * (double)fpat.dznr )/1.75; /* Set radiation pattern projection parametrs */ /* Distance of field point furthest from xyz origin */ rdpattern_proj_params.r_max = near_field.r_max + dr; New_Projection_Parameters( rdpattern_pixmap_width, rdpattern_pixmap_height, &rdpattern_proj_params ); ClearFlag( DRAW_NEW_EHFIELD ); } /* if( isFlagSet( DRAW_NEW_EHFIELD ) */ /* Draw xyz axes to Screen */ Draw_XYZ_Axes( rdpattern_pixmap, rdpattern_proj_params ); /* Overlay structure on Near Field pattern */ if( isFlagSet(OVERLAY_STRUCT) ) { /* Save structure pixmap and params pointers */ GdkPixmap *pixmap = structure_pixmap; projection_parameters_t params = structure_proj_params; /* Divert structure drawing to rad pattern area */ structure_pixmap = rdpattern_pixmap; structure_proj_params = rdpattern_proj_params; /* Process and draw geometry if enabled */ Process_Wire_Segments(); Process_Surface_Patches(); Draw_Surface_Patches( structure_segs+data.n, data.m ); Draw_Wire_Segments( structure_segs, data.n ); /* Restore structure pixmap and params */ structure_pixmap = pixmap; structure_proj_params = params; } /* if( isFlagSet(OVERLAY_STRUCT) ) */ /* Step thru near field values */ npts = fpat.nrx * fpat.nry * fpat.nrz; for( idx = 0; idx < npts; idx++ ) { /*** Draw Near E Field ***/ if( isFlagSet(DRAW_EFIELD) && (fpat.nfeh & NEAR_EFIELD) ) { /* Set gc attributes for segment */ Value_to_Color( &xred, &xgrn, &xblu, near_field.er[idx], near_field.max_er ); /* Scale factor for each field point, to make * near field direction lines equal-sized */ fscale = dr / near_field.er[idx]; /* Scaled field values are used to set one end of a * line segment that represents direction of field. * The other end is set by the field point co-ordinates */ fx = near_field.px[idx] + near_field.erx[idx] * fscale; fy = near_field.py[idx] + near_field.ery[idx] * fscale; fz = near_field.pz[idx] + near_field.erz[idx] * fscale; /* Project new line segment of * phi chain to the Screen */ Set_Gdk_Segment( &segm, &rdpattern_proj_params, near_field.px[idx], near_field.py[idx], near_field.pz[idx], fx, fy, fz ); /* Draw segment */ cairo_set_source_rgb( cr, xred, xgrn, xblu ); Cairo_Draw_Line( cr, segm.x1, segm.y1, segm.x2, segm.y2 ); } /* if( isFlagSet(DRAW_EFIELD) && (fpat.nfeh & NEAR_EFIELD) ) */ /*** Draw Near H Field ***/ if( isFlagSet(DRAW_HFIELD) && (fpat.nfeh & NEAR_HFIELD) ) { /* Set gc attributes for segment */ Value_to_Color( &xred, &xgrn, &xblu, near_field.hr[idx], near_field.max_hr ); /* Scale factor for each field point, to make * near field direction lines equal-sized */ fscale = dr / near_field.hr[idx]; /* Scaled field values are used to set one end of a * line segment that represents direction of field. * The other end is set by the field point co-ordinates */ fx = near_field.px[idx] + near_field.hrx[idx] * fscale; fy = near_field.py[idx] + near_field.hry[idx] * fscale; fz = near_field.pz[idx] + near_field.hrz[idx] * fscale; /* Project new line segment of * phi chain to the Screen */ Set_Gdk_Segment( &segm, &rdpattern_proj_params, near_field.px[idx], near_field.py[idx], near_field.pz[idx], fx, fy, fz ); /* Draw segment */ cairo_set_source_rgb( cr, xred, xgrn, xblu ); Cairo_Draw_Line( cr, segm.x1, segm.y1, segm.x2, segm.y2 ); } /* if( isFlagSet(DRAW_HFIELD) && (fpat.nfeh & NEAR_HFIELD) ) */ /*** Draw Poynting Vector ***/ if( isFlagSet(DRAW_POYNTING) && (fpat.nfeh & NEAR_EFIELD) && (fpat.nfeh & NEAR_HFIELD) ) { int ipv; /* Mem request and index */ /* Allocate on new near field matrix size */ if( isFlagSet(ALLOC_PNTING_BUFF) ) { size_t mreq = (size_t)npts * sizeof( double ); mem_realloc( (void **)&pov_x, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&pov_y, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&pov_z, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&pov_r, mreq, "in draw_radiation.c" ); ClearFlag( ALLOC_PNTING_BUFF ); } /* Calculate Poynting vector and its max and min */ pov_max = 0; for( ipv = 0; ipv < npts; ipv++ ) { pov_x[ipv] = near_field.ery[ipv] * near_field.hrz[ipv] - near_field.hry[ipv] * near_field.erz[ipv]; pov_y[ipv] = near_field.erz[ipv] * near_field.hrx[ipv] - near_field.hrz[ipv] * near_field.erx[ipv]; pov_z[ipv] = near_field.erx[ipv] * near_field.hry[ipv] - near_field.hrx[ipv] * near_field.ery[ipv]; pov_r[ipv] = sqrt( pov_x[ipv] * pov_x[ipv] + pov_y[ipv] * pov_y[ipv] + pov_z[ipv] * pov_z[ipv] ); if( pov_max < pov_r[ipv] ) pov_max = pov_r[ipv]; } /* for( ipv = 0; ipv < npts; ipv++ ) */ /* Set gc attributes for segment */ Value_to_Color( &xred, &xgrn, &xblu, pov_r[idx], pov_max ); /* Scale factor for each field point, to make * near field direction lines equal-sized */ fscale = dr / pov_r[idx]; /* Scaled field values are used to set one end of a * line segment that represents direction of field. * The other end is set by the field point co-ordinates */ fx = near_field.px[idx] + pov_x[idx] * fscale; fy = near_field.py[idx] + pov_y[idx] * fscale; fz = near_field.pz[idx] + pov_z[idx] * fscale; /* Project new line segment of * Poynting vector to the Screen */ Set_Gdk_Segment( &segm, &rdpattern_proj_params, near_field.px[idx], near_field.py[idx], near_field.pz[idx], fx, fy, fz ); /* Draw segment */ cairo_set_source_rgb( cr, xred, xgrn, xblu ); Cairo_Draw_Line( cr, segm.x1, segm.y1, segm.x2, segm.y2 ); } /* if( isFlagSet(DRAW_POYNTING) ) */ } /* for( idx = 0; idx < npts; idx++ ) */ if( isFlagSet(NEAREH_ANIMATE) ) { cairo_destroy( cr ); return; } /* Show max field strength on color code bar */ if( isFlagSet(DRAW_EFIELD) ) max = near_field.max_er; else if( isFlagSet(DRAW_HFIELD) ) max = near_field.max_hr; else if( isFlagSet(DRAW_POYNTING) ) max = pov_max; snprintf( txt, sizeof(txt), "%8.2E", max ); gtk_label_set_text( GTK_LABEL(lookup_widget(rdpattern_window, "rdpattern_colorcode_maxlabel")), txt ); /* Show min field strength on color code bar */ gtk_label_set_text( GTK_LABEL(lookup_widget(rdpattern_window, "rdpattern_colorcode_minlabel")), "0" ); cairo_destroy( cr ); } /* Draw_Near_Field() */ /*-----------------------------------------------------------------------*/ gboolean Animate_Near_Field( gpointer udata ) { /* omega*t = 2*pi*f*t = Time-varying phase of excitation */ static double wt = 0.0; int idx, npts; if( isFlagClear(NEAREH_ANIMATE) ) return( FALSE ); /* Number of points in near fields */ npts = fpat.nrx * fpat.nry * fpat.nrz; for( idx = 0; idx < npts; idx++ ) { if( isFlagSet(DRAW_EFIELD) || isFlagSet(DRAW_POYNTING) ) { /* Real component of complex E field strength */ near_field.erx[idx] = near_field.ex[idx] * cos( wt + near_field.fex[idx] ); near_field.ery[idx] = near_field.ey[idx] * cos( wt + near_field.fey[idx] ); near_field.erz[idx] = near_field.ez[idx] * cos( wt + near_field.fez[idx] ); /* Near total electric field vector */ near_field.er[idx] = sqrt( near_field.erx[idx] * near_field.erx[idx] + near_field.ery[idx] * near_field.ery[idx] + near_field.erz[idx] * near_field.erz[idx] ); if( near_field.max_er < near_field.er[idx] ) near_field.max_er = near_field.er[idx]; } if( isFlagSet(DRAW_HFIELD) || isFlagSet(DRAW_POYNTING) ) { /* Real component of complex H field strength */ near_field.hrx[idx] = near_field.hx[idx] * cos( wt + near_field.fhx[idx] ); near_field.hry[idx] = near_field.hy[idx] * cos( wt + near_field.fhy[idx] ); near_field.hrz[idx] = near_field.hz[idx] * cos( wt + near_field.fhz[idx] ); /* Near total magnetic field vector*/ near_field.hr[idx] = sqrt( near_field.hrx[idx] * near_field.hrx[idx] + near_field.hry[idx] * near_field.hry[idx] + near_field.hrz[idx] * near_field.hrz[idx] ); if( near_field.max_hr < near_field.hr[idx] ) near_field.max_hr = near_field.hr[idx]; } } /* for( idx = 0; idx < npts; idx++ ) */ /* Increment excitation phase, keep < 2pi */ wt += near_field.anim_step; if( wt >= (double)TP ) wt = 0.0; Draw_Radiation( rdpattern_drawingarea ); return( TRUE ); } /* Animate_Near_Field() */ /*-----------------------------------------------------------------------*/ /* Scale_Gain() * * Scales radiation pattern gain according to selected style * ( ARRL style, logarithmic or linear voltage/power ) */ static int gain_style = GS_LINP; double Scale_Gain( double gain, int fstep, int idx ) { /* Scaled rad pattern gain and pol factor */ double scaled_rad = 0.0; gain += Polarization_Factor( calc_data.pol_type, fstep, idx ); switch( gain_style ) { case GS_LINP: scaled_rad = pow(10.0, (gain/10.0)); break; case GS_LINV: scaled_rad = pow(10.0, (gain/20.0)); break; case GS_ARRL: scaled_rad = exp( 0.058267 * gain ); break; case GS_LOG: scaled_rad = gain; if( scaled_rad < -40 ) scaled_rad = 0.0; else scaled_rad = scaled_rad /40.0 + 1.0; } /* switch( gain_style ) */ return( scaled_rad ); } /* Scale_Gain() */ /*-----------------------------------------------------------------------*/ /* Polarization_Factor() * * Calculates polarization factor from axial * ratio and tilt of polarization ellipse */ double Polarization_Factor( int pol_type, int fstep, int idx ) { double axrt, axrt2, tilt2, polf = 1.0; switch( pol_type ) { case POL_TOTAL: polf = 1.0; break; case POL_HORIZ: axrt2 = rad_pattern[fstep].axrt[idx]; axrt2 *= axrt2; tilt2 = sin( rad_pattern[fstep].tilt[idx] ); tilt2 *= tilt2; polf = (axrt2 + (1.0 - axrt2) * tilt2) / (1.0 + axrt2); break; case POL_VERT: axrt2 = rad_pattern[fstep].axrt[idx]; axrt2 *= axrt2; tilt2 = cos( rad_pattern[fstep].tilt[idx] ); tilt2 *= tilt2; polf = (axrt2 + (1.0 - axrt2) * tilt2) / (1.0 + axrt2); break; case POL_LHCP: axrt = rad_pattern[fstep].axrt[idx]; axrt2 = axrt * axrt; polf = (1.0 + 2.0 * axrt + axrt2) / 2.0 / (1.0 + axrt2); break; case POL_RHCP: axrt = rad_pattern[fstep].axrt[idx]; axrt2 = axrt * axrt; polf = (1.0 - 2.0 * axrt + axrt2) / 2.0 / (1.0 + axrt2); } if( polf < 1.0E-200 ) polf = 1.0E-200; polf = 10.0 * log10( polf ); return( polf ); } /* Polarization_Factor() */ /*-----------------------------------------------------------------------*/ /* Set_Polarization() * * Sets the polarization type of gain to be plotted */ void Set_Polarization( int pol ) { calc_data.pol_type = pol; Set_Window_Labels(); /* Trigger a redraw of drawingareas */ if( isFlagSet(DRAW_ENABLED) ) Draw_Radiation( rdpattern_drawingarea ); if( isFlagSet(PLOT_ENABLED) ) Plot_Frequency_Data(); /* Show gain in direction of viewer */ Show_Viewer_Gain( main_window, "main_gain_entry", structure_proj_params ); /* Enable redraw of rad pattern */ SetFlag( DRAW_NEW_RDPAT ); } /* Set_Polarization() */ /*-----------------------------------------------------------------------*/ /* Set_Gain_Style() * * Sets the radiation pattern Gain scaling style */ void Set_Gain_Style( int gs ) { gain_style = gs; Set_Window_Labels(); /* Trigger a redraw of drawingarea */ if( isFlagSet(DRAW_ENABLED) ) { /* Enable redraw of rad pattern */ SetFlag( DRAW_NEW_RDPAT ); Draw_Radiation( rdpattern_drawingarea ); } } /* Set_Gain_Style() */ /*-----------------------------------------------------------------------*/ /* New_Radiation_Projection_Angle() * * Calculates new projection parameters when a * structure projection angle (Wr or Wi) changes */ void New_Radiation_Projection_Angle(void) { /* sin and cos of rad pattern rotation and inclination angles */ rdpattern_proj_params.sin_wr = sin(rdpattern_proj_params.Wr/(double)TD); rdpattern_proj_params.cos_wr = cos(rdpattern_proj_params.Wr/(double)TD); rdpattern_proj_params.sin_wi = sin(rdpattern_proj_params.Wi/(double)TD); rdpattern_proj_params.cos_wi = cos(rdpattern_proj_params.Wi/(double)TD); /* Trigger a redraw of radiation drawingarea */ if( isFlagSet(DRAW_ENABLED) ) Draw_Radiation( rdpattern_drawingarea ); /* Trigger a redraw of plots drawingarea if doing "viewer" gain */ if( isFlagSet(PLOT_ENABLED) && isFlagSet(PLOT_GVIEWER) ) Plot_Frequency_Data(); } /* New_Radiation_Projection_Angle() */ /*-----------------------------------------------------------------------*/ /* Redo_Radiation_Pattern() * * Refreshes radiation pattern on new frequency in spinbutton */ gboolean Redo_Radiation_Pattern( gpointer udata ) { /* Redo radiation pattern for a new frequency. Below * makes calcs use the extra buffer in rad_pattern */ calc_data.fstep = calc_data.nfrq; New_Frequency(); /* Redraw radiation pattern on screen */ if( isFlagSet(DRAW_ENABLED) ) Draw_Radiation( rdpattern_drawingarea ); return FALSE; } /* Redo_Radiation_Pattern() */ /*-----------------------------------------------------------------------*/ /* Viewer_Gain() * * Calculate gain in direction of viewer * (e.g. Perpenticular to the Screen) */ double Viewer_Gain( projection_parameters_t proj_parameters, int fstep ) { double phi, gain; int nth, nph, idx; /* Calculate theta step from proj params */ phi = proj_parameters.Wr; if( fpat.dth == 0.0 ) nth = 0; else { double theta; theta = fabs( 90.0 - proj_parameters.Wi ); if( theta > 180.0 ) { theta = 360.0 - theta; phi -= 180.0; } if( (gnd.ksymp == 2) && (theta > 90.01) && (gnd.ifar != 1) ) return( -999.99 ); nth = (int)( (theta - fpat.thets) / fpat.dth + 0.5 ); if( (nth >= fpat.nth) || (nth < 0) ) nth = fpat.nth-1; } /* Calculate phi step from proj params */ if( fpat.dph == 0.0 ) nph = 0; else { while( phi < 0.0 ) phi += 360.0; nph = (int)( (phi - fpat.phis) / fpat.dph + 0.5 ); if( (nph >= fpat.nph) || (nph < 0) ) nph = fpat.nph-1; } idx = nth + nph * fpat.nth; gain = rad_pattern[fstep].gtot[idx] + Polarization_Factor(calc_data.pol_type, fstep, idx); if( gain < -999.99 ) gain = -999.99; return( gain ); } /* Viewer_Gain() */ /*-----------------------------------------------------------------------*/ /* Rdpattern_Window_Killed() * * Cleans up after the rad pattern window is closed */ void Rdpattern_Window_Killed( void ) { if( animate_dialog != NULL ) { gtk_widget_destroy( animate_dialog ); animate_dialog = NULL; ClearFlag( NEAREH_ANIMATE ); g_source_remove( anim_tag ); anim_tag = 0; } if( isFlagSet(DRAW_ENABLED) ) { ClearFlag( DRAW_FLAGS ); rdpattern_drawingarea = NULL; rdpattern_window = NULL; Free_Draw_Buffers(); gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(lookup_widget( main_window, "main_rdpattern")), FALSE ); } } /* Rdpattern_Window_Killed() */ /*-----------------------------------------------------------------------*/ /* Set_Window_Labels() * * Sets radiation pattern window labels * according to what is being drawn. */ void Set_Window_Labels( void ) { char *pol_type[NUM_POL] = { _("Total Gain"), _("Horizontal Polarization"), _("Vertical Polarization"), _("RH Circular Polarization"), _("LH Circular Polarization") }; char *scale[NUM_SCALES] = { _("Linear Power"), _("Linear Voltage"), _("ARRL Scale"), _("Logarithmic Scale") }; char txt[64]; size_t s = sizeof( txt ); if( isFlagSet(DRAW_ENABLED) ) { /* Set window labels */ Strlcpy( txt, _("Radiation Patterns"), s ); if( isFlagSet(DRAW_GAIN) ) { Strlcpy( txt, _("Radiation Pattern: - "), s ); Strlcat( txt, pol_type[calc_data.pol_type], s ); Strlcat( txt, " - ", s ); Strlcat( txt, scale[gain_style], s ); } else if( isFlagSet(DRAW_EHFIELD) ) { Strlcpy( txt, _("Near Fields:"), s ); if( isFlagSet(DRAW_EFIELD) ) Strlcat( txt, _(" - E Field"), s ); if( isFlagSet(DRAW_HFIELD) ) Strlcat( txt, _(" - H Field"), s ); if( isFlagSet(DRAW_POYNTING) ) Strlcat( txt, _(" - Poynting Vector"), s ); } gtk_label_set_text( GTK_LABEL(lookup_widget( rdpattern_window, "rdpattern_label")), txt ); } /* if( isFlagSet(DRAW_ENABLED) ) */ if( isFlagSet(PLOT_ENABLED) ) { Strlcpy( txt, _("Frequency Data Plots - "), s ); Strlcat( txt, pol_type[calc_data.pol_type], s ); gtk_label_set_text( GTK_LABEL(lookup_widget( freqplots_window, "freqplots_label")), txt ); } } /* Set_Window_Labels() */ /*-----------------------------------------------------------------------*/ /* Alloc_Rdpattern_Buffers * * Allocates memory to the radiation pattern buffers */ void Alloc_Rdpattern_Buffers( int nfrq, int nth, int nph ) { int idx; size_t mreq; static int last_nfrq = 0; /* Free old gain buffers first */ for( idx = 0; idx < last_nfrq; idx++ ) { free_ptr( (void **)&rad_pattern[idx].gtot ); free_ptr( (void **)&rad_pattern[idx].max_gain ); free_ptr( (void **)&rad_pattern[idx].min_gain ); free_ptr( (void **)&rad_pattern[idx].max_gain_tht ); free_ptr( (void **)&rad_pattern[idx].max_gain_phi ); free_ptr( (void **)&rad_pattern[idx].max_gain_idx ); free_ptr( (void **)&rad_pattern[idx].min_gain_idx ); free_ptr( (void **)&rad_pattern[idx].axrt ); free_ptr( (void **)&rad_pattern[idx].tilt ); free_ptr( (void **)&rad_pattern[idx].sens ); } last_nfrq = nfrq; /* Allocate rad pattern buffers */ mreq = (size_t)nfrq * sizeof(rad_pattern_t); mem_realloc( (void **)&rad_pattern, mreq, "in draw_radiation.c" ); for( idx = 0; idx < nfrq; idx++ ) { /* Memory request for allocs */ mreq = (size_t)(nph * nth) * sizeof(double); rad_pattern[idx].gtot = NULL; mem_alloc( (void **)&(rad_pattern[idx].gtot), mreq, "in draw_radiation.c" ); rad_pattern[idx].axrt = NULL; mem_alloc( (void **)&(rad_pattern[idx].axrt), mreq, "in draw_radiation.c" ); rad_pattern[idx].tilt = NULL; mem_alloc( (void **)&(rad_pattern[idx].tilt), mreq, "in draw_radiation.c" ); mreq = NUM_POL * sizeof(double); rad_pattern[idx].max_gain = NULL; mem_alloc( (void **)&(rad_pattern[idx].max_gain), mreq, "in draw_radiation.c" ); rad_pattern[idx].min_gain = NULL; mem_alloc( (void **)&(rad_pattern[idx].min_gain), mreq, "in draw_radiation.c" ); rad_pattern[idx].max_gain_tht = NULL; mem_alloc( (void **)&(rad_pattern[idx].max_gain_tht), mreq, "in draw_radiation.c" ); rad_pattern[idx].max_gain_phi = NULL; mem_alloc( (void **)&(rad_pattern[idx].max_gain_phi), mreq, "in draw_radiation.c" ); mreq = NUM_POL * sizeof(int); rad_pattern[idx].max_gain_idx = NULL; mem_alloc( (void **)&(rad_pattern[idx].max_gain_idx), mreq, "in draw_radiation.c" ); rad_pattern[idx].min_gain_idx = NULL; mem_alloc( (void **)&(rad_pattern[idx].min_gain_idx), mreq, "in draw_radiation.c" ); rad_pattern[idx].sens = NULL; mreq = (size_t)(nph * nth) * sizeof(int); mem_alloc( (void **)&(rad_pattern[idx].sens), mreq, "in draw_radiation.c" ); } } /* Alloc_Rdpattern_Buffers() */ /*-----------------------------------------------------------------------*/ /* Alloc_Nearfield_Buffers * * Allocates memory to the radiation pattern buffers */ void Alloc_Nearfield_Buffers( int n1, int n2, int n3 ) { size_t mreq; if( isFlagClear(ALLOC_NEAREH_BUFF) ) return; ClearFlag( ALLOC_NEAREH_BUFF ); /* Memory request for allocations */ mreq = (size_t)(n1 * n2 * n3) * sizeof( double ); /* Allocate near field buffers */ if( fpat.nfeh & NEAR_EFIELD ) { mem_realloc( (void **)&near_field.ex, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.ey, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.ez, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.fex, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.fey, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.fez, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.erx, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.ery, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.erz, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.er, mreq, "in draw_radiation.c" ); } if( fpat.nfeh & NEAR_HFIELD ) { mem_realloc( (void **)&near_field.hx, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.hy, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.hz, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.fhx, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.fhy, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.fhz, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.hrx, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.hry, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.hrz, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.hr, mreq, "in draw_radiation.c" ); } mem_realloc( (void **)&near_field.px, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.py, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&near_field.pz, mreq, "in draw_radiation.c" ); } /* Alloc_Nearfield_Buffers() */ /*-----------------------------------------------------------------------*/ /* Free_Draw_Buffers() * * Frees the buffers used for drawing */ void Free_Draw_Buffers( void ) { free_ptr( (void **)&point_3d ); free_ptr( (void **)&red ); free_ptr( (void **)&grn ); free_ptr( (void **)&blu ); } /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/draw_radiation.h000066400000000000000000000017511257141547200165050ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef DRAW_RADIATION_H #define DRAW_RADIATION_H 1 #include "common.h" #include "support.h" /* Point in 3d xyz axes */ typedef struct { double x, y, z, r; } point_3d_t; #endif xnec2c-3.4/src/draw_structure.c000066400000000000000000000455601257141547200165740ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* * draw_structure.c * * Structure drawing routines for xnec2c */ #include "draw_structure.h" #include "shared.h" /*-----------------------------------------------------------------------*/ /* Draw_Structure() * * Draws xyz axes, wire segments and patches */ void Draw_Structure( GtkWidget *drawingarea ) { /* Abort if xnec2c may be quit by user */ if( isFlagSet(MAIN_QUIT) ) return; /* Cairo context */ cairo_t *cr = gdk_cairo_create( structure_pixmap ); /* Clear pixmap */ cairo_set_source_rgb( cr, BLACK ); cairo_rectangle( cr, 0.0, 0.0, (double)structure_proj_params.pixmap_width, (double)structure_proj_params.pixmap_height); cairo_fill( cr ); /* Process and draw geometry if available, else clear screen */ Process_Wire_Segments(); Process_Surface_Patches(); Draw_XYZ_Axes( structure_pixmap, structure_proj_params ); Draw_Surface_Patches( structure_segs+data.n, data.m ); Draw_Wire_Segments( structure_segs, data.n ); /* Show gain in direction of viewer */ Show_Viewer_Gain( main_window, "main_gain_entry", structure_proj_params ); /* Render pixmap to screen */ gdk_window_set_back_pixmap( drawingarea->window, structure_pixmap, FALSE ); gdk_window_clear( drawingarea->window ); /* Reset "new current data" flag */ crnt.newer = 0; /* Display frequency step */ Display_Fstep( structure_fstep_entry, calc_data.fstep ); /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); cairo_destroy( cr ); } /* Draw_Structure() */ /*-----------------------------------------------------------------------*/ /* New_Wire_Data() * * Calculates some projection parameters * when new wire segment data is created */ void New_Wire_Data( void ) { /* Abort if no wire data */ if( data.n == 0 ) return; double r, /* Distance of a point from XYZ origin */ r_max; /* Maximum value of above */ int idx; /* Find segment end furthest from xyz axes origin */ r_max = 0.0; for( idx = 0; idx < data.n; idx++ ) { r = sqrt( (double)data.x1[idx] * (double)data.x1[idx] + (double)data.y1[idx] * (double)data.y1[idx] + (double)data.z1[idx] * (double)data.z1[idx] ); if( r > r_max ) r_max = r; r = sqrt( (double)data.x2[idx] * (double)data.x2[idx] + (double)data.y2[idx] * (double)data.y2[idx] + (double)data.z2[idx] * (double)data.z2[idx] ); if( r > r_max ) r_max = r; } /* for( idx = 0; idx < data.n; idx++ ) */ /* Max value of segment r saved if appropriate */ if( r_max > structure_proj_params.r_max ) structure_proj_params.r_max = r_max; /* Redraw structure on screen */ New_Projection_Parameters( structure_pixmap_width, structure_pixmap_height, &structure_proj_params ); } /* New_Wire_Data() */ /*-----------------------------------------------------------------------*/ /* New_Patch_Data() * * Calculates some projection parameters * when new surface patch data is created */ void New_Patch_Data( void ) { /* Abort if no patch data */ if( data.m == 0 ) return; double s, /* Side/2 of a square that will represent a patch */ sx, sy, sz, /* Length of components of s in the X, Y, Z axes */ r, /* Distance of points in patch from XYZ co-ordinates */ r_max; /* Maximum value of above */ int idx, i; size_t mreq; /* Allocate memory for patch line segments */ mreq = (size_t)(2 * data.m) * sizeof(double); mem_realloc( (void **)&data.px1, mreq, "in draw_structure.c" ); mem_realloc( (void **)&data.py1, mreq, "in draw_structure.c" ); mem_realloc( (void **)&data.pz1, mreq, "in draw_structure.c" ); mem_realloc( (void **)&data.px2, mreq, "in draw_structure.c" ); mem_realloc( (void **)&data.py2, mreq, "in draw_structure.c" ); mem_realloc( (void **)&data.pz2, mreq, "in draw_structure.c" ); /* Find point furthest from xyz axes origin */ r_max = 0.0; for( idx = 0; idx < data.m; idx++ ) { i = 2 * idx; /* Side/2 of square representing a patch (sqrt of patch area) */ s = (double)sqrt( data.pbi[idx] ) / 2.0; /* Projection of s on xyz components of t1 */ sx = s * (double)data.t1x[idx]; sy = s * (double)data.t1y[idx]; sz = s * (double)data.t1z[idx]; /* End 1 of line seg parallel to t1 vector */ data.px1[i] = (double)data.px[idx] + sx; data.py1[i] = (double)data.py[idx] + sy; data.pz1[i] = (double)data.pz[idx] + sz; /* Its distance from XYZ origin */ r = sqrt( data.px1[i]*data.px1[i] + data.py1[i]*data.py1[i] + data.pz1[i]*data.pz1[i] ); if( r > r_max ) r_max = r; /* End 2 of line seg parallel to t1 vector */ data.px2[i] = (double)data.px[idx] - sx; data.py2[i] = (double)data.py[idx] - sy; data.pz2[i] = (double)data.pz[idx] - sz; /* Its distance from XYZ origin */ r = sqrt( data.px2[i]*data.px2[i] + data.py2[i]*data.py2[i] + data.pz2[i]*data.pz2[i] ); if( r > r_max ) r_max = r; i++; /* Projection of s on xyz components of t2 */ sx = s * (double)data.t2x[idx]; sy = s * (double)data.t2y[idx]; sz = s * (double)data.t2z[idx]; /* End 1 of line parallel to t2 vector */ data.px1[i] = (double)data.px[idx] + sx; data.py1[i] = (double)data.py[idx] + sy; data.pz1[i] = (double)data.pz[idx] + sz; /* Its distance from XYZ origin */ r = sqrt( data.px1[i]*data.px1[i] + data.py1[i]*data.py1[i] + data.pz1[i]*data.pz1[i] ); if( r > r_max ) r_max = r; /* End 2 of line parallel to t2 vector */ data.px2[i] = (double)data.px[idx] - sx; data.py2[i] = (double)data.py[idx] - sy; data.pz2[i] = (double)data.pz[idx] - sz; /* Its distance from XYZ origin */ r = sqrt( data.px2[i]*data.px2[i] + data.py2[i]*data.py2[i] + data.pz2[i]*data.pz2[i] ); if( r > r_max ) r_max = r; } /* for( idx = 0; idx < data.m; idx++ ) */ /* Max value of patch r saved if appropriate */ if( r_max > structure_proj_params.r_max ) structure_proj_params.r_max = r_max; /* Redraw structure on screen */ New_Projection_Parameters( structure_pixmap_width, structure_pixmap_height, &structure_proj_params ); } /* New_Patch_Data() */ /*-----------------------------------------------------------------------*/ /* Process_Wire_Segments() * * Processes wire segment data so they can be drawn on Screen */ void Process_Wire_Segments( void ) { int idx; /* Project all wire segs from xyz frame to screen frame */ for( idx = 0; idx < data.n; idx++ ) Set_Gdk_Segment( &structure_segs[idx], &structure_proj_params, (double)data.x1[idx], (double)data.y1[idx], (double)data.z1[idx], (double)data.x2[idx], (double)data.y2[idx], (double)data.z2[idx] ); } /* Process_Wire_Segments() */ /*-----------------------------------------------------------------------*/ /* Process_Surface_Patches() * * Processes surface patch data so they can be drawn on Screen */ void Process_Surface_Patches( void ) { int idx, m2; /* Project all patch segs from xyz frame to screen frame */ /* Patches are represented by 2 line segs parallel to t1 */ /* and t2 vectors. Length of segs is sqrt of patch area */ m2 = data.m * 2; for( idx = 0; idx < m2; idx++ ) Set_Gdk_Segment( &structure_segs[idx+data.n], &structure_proj_params, data.px1[idx], data.py1[idx], data.pz1[idx], data.px2[idx], data.py2[idx], data.pz2[idx] ); } /* Process_Surface_Patches() */ /*-----------------------------------------------------------------------*/ /* Draw_Wire_Segments() * * Draws all wire segments of the input structure */ void Draw_Wire_Segments( GdkSegment *segm, gint nseg ) { /* Abort if no wire segs or new input pending */ if( !nseg || isFlagSet(INPUT_PENDING) ) return; int idx, i; /* Cairo context */ cairo_t *cr = gdk_cairo_create( structure_pixmap ); /* Draw networks */ for( idx = 0; idx < netcx.nonet; idx++ ) { int i1, i2; i1 = netcx.iseg1[idx]-1; i2 = netcx.iseg2[idx]-1; switch( netcx.ntyp[idx] ) { case 1: /* Two-port network */ { GdkPoint points[4]; /* Draw a box between segs to represent two-port network */ points[0].x = segm[i1].x1 + (segm[i2].x1 - segm[i1].x1)/3; points[0].y = segm[i1].y1 + (segm[i2].y1 - segm[i1].y1)/3; points[1].x = segm[i2].x1 + (segm[i1].x1 - segm[i2].x1)/3; points[1].y = segm[i2].y1 + (segm[i1].y1 - segm[i2].y1)/3; points[2].x = segm[i2].x2 + (segm[i1].x2 - segm[i2].x2)/3; points[2].y = segm[i2].y2 + (segm[i1].y2 - segm[i2].y2)/3; points[3].x = segm[i1].x2 + (segm[i2].x2 - segm[i1].x2)/3; points[3].y = segm[i1].y2 + (segm[i2].y2 - segm[i1].y2)/3; cairo_set_source_rgb( cr, MAGENTA ); Cairo_Draw_Polygon( cr, points, 4 ); cairo_fill( cr ); /* Draw connecting lines */ Cairo_Draw_Line( cr, segm[i1].x1, segm[i1].y1, segm[i2].x1, segm[i2].y1 ); Cairo_Draw_Line( cr, segm[i1].x2, segm[i1].y2, segm[i2].x2, segm[i2].y2 ); } break; case 2: /* Straight transmission line */ /* Set cr attributes for transmission line */ cairo_set_source_rgb( cr, CYAN ); Cairo_Draw_Line( cr, segm[i1].x1, segm[i1].y1, segm[i2].x1, segm[i2].y1 ); Cairo_Draw_Line( cr, segm[i1].x2, segm[i1].y2, segm[i2].x2, segm[i2].y2 ); break; case 3: /* Crossed transmisson line */ /* Set cr attributes for transmission line */ cairo_set_source_rgb( cr, CYAN ); Cairo_Draw_Line( cr, segm[i1].x1, segm[i1].y1, segm[i2].x2, segm[i2].y2 ); Cairo_Draw_Line( cr, segm[i1].x2, segm[i1].y2, segm[i2].x1, segm[i2].y1 ); } /* switch( netcx.ntyp ) */ } /* for( idx = 0; idx < netcx.nonet; idx++ ) */ /* Draw currents/charges if enabled, return */ /* Current or charge calculations do not contain wavelength */ /* factors, since they are drawn normalized to their max value */ if( (isFlagSet(DRAW_CURRENTS) || isFlagSet(DRAW_CHARGES)) && crnt.valid ) { static double cmax; /* Max of seg current/charge */ /* To color structure segs */ double red = 0.0, grn = 0.0, blu = 0.0; char label[11]; size_t s = sizeof( label ); /* Loop over all wire segs, find max current/charge */ if( crnt.newer ) { cmax = 0.0; for( idx = 0; idx < nseg; idx++ ) { if( isFlagSet(DRAW_CURRENTS) ) /* Calculate segment current magnitude */ cmag[idx] = (double)cabs( crnt.cur[idx] ); else /* Calculate segment charge density */ cmag[idx] = (double)cabs( cmplx(crnt.bii[idx], crnt.bir[idx]) ); /* Find max current/charge magnitude */ if( cmag[idx] > cmax ) cmax = cmag[idx]; } /* Show max value in color code label */ if( isFlagSet(DRAW_CURRENTS) ) snprintf( label, s, "%10.3E", cmax * (double)data.wlam ); else snprintf( label, s, "%10.3E", cmax * 1.0E-6/(double)calc_data.fmhz ); gtk_label_set_text( GTK_LABEL(lookup_widget(structure_drawingarea, "main_colorcode_maxlabel")), label ); } /* if( crnt.newer ) */ /* Draw segments in color code according to current */ for( idx = 0; idx < nseg; idx++ ) { /* Calculate RGB value for seg current */ Value_to_Color( &red, &grn, &blu, cmag[idx], cmax ); /* Set cr attributes for segment */ cairo_set_source_rgb( cr, red, grn, blu ); /* Draw segment */ Cairo_Draw_Line( cr, segm[idx].x1, segm[idx].y1, segm[idx].x2, segm[idx].y2 ); } /* for( idx = 0; idx < nseg; idx++ ) */ cairo_destroy( cr ); return; } /* if( isFlagSet(DRAW_CURRENTS) || isFlagSet(DRAW_CHARGES) ) */ /* Draw segs if not all loaded */ cairo_set_line_width( cr, 2.0 ); if( zload.nldseg != nseg ) { /* Set gc attributes for segments */ if( isFlagSet(OVERLAY_STRUCT) && (structure_proj_params.type == RDPATTERN_DRAWINGAREA) ) cairo_set_source_rgb( cr, WHITE ); else cairo_set_source_rgb( cr, BLUE ); /* Draw wire segments */ Cairo_Draw_Segments( cr, segm, nseg ); } /* Draw lumped loaded segments */ cairo_set_source_rgb( cr, YELLOW ); cairo_set_line_width( cr, 9.0 ); for( idx = 0; idx < zload.nldseg; idx++ ) { if( zload.ldtype[idx] != 5 ) { i = zload.ldsegn[idx]-1; Cairo_Draw_Line( cr, segm[i].x1, segm[i].y1, segm[i].x2, segm[i].y2 ); } } /* Set gc attributes for excitation */ cairo_set_source_rgb( cr, RED ); cairo_set_line_width( cr, 5.0 ); /* Draw excitation sources */ for( idx = 0; idx < vsorc.nsant; idx++ ) { i = vsorc.isant[idx]-1; Cairo_Draw_Line( cr, segm[i].x1, segm[i].y1, segm[i].x2, segm[i].y2 ); } for( idx = 0; idx < vsorc.nvqd; idx++ ) { i = vsorc.ivqd[idx]-1; Cairo_Draw_Line( cr, segm[i].x1, segm[i].y1, segm[i].x2, segm[i].y2 ); } /* Draw resistivity loaded segments */ cairo_set_source_rgb( cr, YELLOW ); cairo_set_line_width( cr, 2.0 ); for( idx = 0; idx < zload.nldseg; idx++ ) { if( zload.ldtype[idx] == 5 ) { i = zload.ldsegn[idx]-1; Cairo_Draw_Line( cr, segm[i].x1, segm[i].y1, segm[i].x2, segm[i].y2 ); } } cairo_destroy( cr ); } /* Draw_Wire_Segments() */ /*-----------------------------------------------------------------------*/ /* Draw_Surface_Patches() * * Draws the line segments that represent surface patches */ void Draw_Surface_Patches( GdkSegment *segm, gint npatch ) { /* Abort if no patches */ if( ! npatch ) return; /* Cairo context */ cairo_t *cr = gdk_cairo_create( structure_pixmap ); /* Draw currents if enabled, return */ if( isFlagSet(DRAW_CURRENTS) && crnt.valid ) { /* Buffers for t1,t2 currents below */ static double cmax; /* Current along x,y,z and t1,t2 vector directions */ complex double cx, cy, cz, ct1, ct2; double red = 0.0, grn = 0.0, blu = 0.0; int i, j; /* Find max value of patch current magnitude */ if( crnt.newer ) { j= data.n; cmax = 0.0; for( i = 0; i < npatch; i++ ) { /* Calculate current along x,y,z vectors */ cx = (complex double)crnt.cur[j]; cy = (complex double)crnt.cur[j+1]; cz = (complex double)crnt.cur[j+2]; /* Calculate current along t1 and t2 tangent vectors */ ct1 = cx*(double)data.t1x[i] + cy*(double)data.t1y[i] + cz*(double)data.t1z[i]; ct2 = cx*(double)data.t2x[i] + cy*(double)data.t2y[i] + cz*(double)data.t2z[i]; /* Save current magnitudes */ ct1m[i] = (double)cabs( ct1 ); ct2m[i] = (double)cabs( ct2 ); /* Find current magnitude max */ if( ct1m[i] > cmax ) cmax = ct1m[i]; if( ct2m[i] > cmax ) cmax = ct2m[i]; j += 3; } /* for( i = 0; i < npatch; i++ ) */ } /* if( crnt.newer ) */ /* Draw patches in color code according to current */ for( i = 0; i < npatch; i++ ) { j = 2 * i; /* Calculate RGB value for patch t1 current */ Value_to_Color( &red, &grn, &blu, ct1m[i], cmax ); /* Set cr attributes for patch t1 */ cairo_set_source_rgb( cr, red, grn, blu ); /* Draw patch t1 */ Cairo_Draw_Line( cr, segm[j].x1, segm[j].y1, segm[j].x2, segm[j].y2 ); /* Calculate RGB value for patch t2 current */ Value_to_Color( &red, &grn, &blu, ct2m[i], cmax ); /* Set cr attributes for patch t2 */ cairo_set_source_rgb( cr, red, grn, blu ); /* Draw patch t2 */ j++; Cairo_Draw_Line( cr, segm[j].x1, segm[j].y1, segm[j].x2, segm[j].y2 ); } /* for( idx = 0; idx < npatch; idx++ ) */ } /* if( isFlagSet(DRAW_CURRENTS) ) */ else { int idx; /* Set gc attributes for patches */ if( isFlagSet(OVERLAY_STRUCT) && (structure_proj_params.type == RDPATTERN_DRAWINGAREA) ) cairo_set_source_rgb( cr, WHITE ); else cairo_set_source_rgb( cr, BLUE ); /* Draw patch segments */ int nsg = 2 * npatch; for( idx = 0; idx < nsg; idx++ ) { Cairo_Draw_Line( cr, segm[idx].x1, segm[idx].y1, segm[idx].x2, segm[idx].y2 ); } } cairo_destroy( cr ); } /* Draw_Surface_Patches() */ /*-----------------------------------------------------------------------*/ /* Redo_Currents() * * Refreshes plots on new frequency in spinbutton */ gboolean Redo_Currents( gpointer udata ) { /* Abort if no geometry data */ if( ((data.n == 0) && (data.m == 0)) || isFlagClear(ENABLE_EXCITN) ) return FALSE; /* Makes calcs use the extra buffer in rad_pattern */ calc_data.fstep = calc_data.nfrq; save.last_freq = 0.0; New_Frequency(); /* Display freq data in entry widgets */ if( isFlagSet(PLOT_FREQ_LINE) ) Plot_Frequency_Data(); /* Redraw structure on screen */ if( (structure_drawingarea != NULL) && (isFlagSet(DRAW_CURRENTS) || isFlagSet(DRAW_CHARGES)) ) Draw_Structure( structure_drawingarea ); return FALSE; } /* Redo_Currents() */ /*-----------------------------------------------------------------------*/ /* New_Structure_Projection_Angle() * * Calculates new projection parameters when a * structure projection angle (Wr or Wi) changes */ void New_Structure_Projection_Angle(void) { /* sin and cos of structure rotation and inclination angles */ structure_proj_params.sin_wr = sin(structure_proj_params.Wr/(double)TD); structure_proj_params.cos_wr = cos(structure_proj_params.Wr/(double)TD); structure_proj_params.sin_wi = sin(structure_proj_params.Wi/(double)TD); structure_proj_params.cos_wi = cos(structure_proj_params.Wi/(double)TD); /* Trigger a redraw of structure drawingarea */ if( isFlagClear(INPUT_PENDING) ) Draw_Structure( structure_drawingarea ); /* Trigger a redraw of plots drawingarea */ if( isFlagSet(PLOT_ENABLED) && isFlagSet(PLOT_GVIEWER) ) Plot_Frequency_Data(); } /* New_Structure_Projection_Angle() */ /*-----------------------------------------------------------------------*/ /* Init_Struct_Drawing() * * Initializes drawing parameters after geometry input */ void Init_Struct_Drawing( void ) { /* We need n segs for wires + 2m for patces */ size_t mreq = (size_t)(data.n + 2*data.m) * sizeof(GdkSegment); mem_realloc( (void **)&structure_segs, mreq, "in draw_structure.c" ); New_Wire_Data(); New_Patch_Data(); } /*-----------------------------------------------------------------------*/ /* Show_Viewer_Gain() * * Shows gain in direction of viewer */ void Show_Viewer_Gain( GtkWidget *window, const char *widget, projection_parameters_t proj_params ) { if( isFlagSet(DRAW_CURRENTS) || isFlagSet(DRAW_CHARGES) || isFlagSet(DRAW_GAIN) || isFlagSet(FREQ_LOOP_RUNNING) ) { char txt[8]; if( isFlagSet(ENABLE_RDPAT) && (calc_data.fstep >= 0) ) { snprintf( txt, sizeof(txt), "%7.2f", Viewer_Gain(proj_params, calc_data.fstep) ); gtk_entry_set_text( GTK_ENTRY(lookup_widget(window, widget)), txt ); } } } /* Show_Viewer_Gain() */ /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/draw_structure.h000066400000000000000000000016241257141547200165720ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef DRAW_STRUCTURE_H #define DRAW_STRUCTURE_H 1 #include "common.h" #include "support.h" #endif xnec2c-3.4/src/editors.h000066400000000000000000000074131257141547200151700ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef EDITORS_H #define EDITORS_H 1 #include "common.h" #define CMND_NUM_FCOLS 6 #define CMND_NUM_ICOLS 4 #define GEOM_NUM_FCOLS 7 #define GEOM_NUM_ICOLS 2 #define NEXT TRUE #define PREVIOUS FALSE /* Editor actions that imply saving */ enum SAVE_ACTION { EDITOR_SAVE = 64, EDITOR_NEW, EDITOR_EDIT, EDITOR_APPLY }; enum EDITOR_FUNC { /* General editor function actions */ EDITOR_DATA = 0, EDITOR_TAGNUM, EDITOR_CANCEL, EDITOR_SEGPC, EDITOR_RDBUTTON, EDITOR_LOAD, /* Wire editor function actions */ WIRE_EDITOR_WLEN, WIRE_EDITOR_RLEN, WIRE_EDITOR_DIAN, WIRE_EDITOR_RDIA, WIRE_EDITOR_TAPR, /* Helix editor function actions */ HELIX_EDITOR_NTURN, HELIX_EDITOR_LH, HELIX_EDITOR_RH, HELIX_EDITOR_LINKALL, HELIX_EDITOR_LINKZO, HELIX_EDITOR_LINKZHL, /* Patch editor actions */ PATCH_EDITOR_ARBT, PATCH_EDITOR_RECT, PATCH_EDITOR_TRIA, PATCH_EDITOR_QUAD, PATCH_EDITOR_SURF, PATCH_EDITOR_SCCD, /* Reflect editor actions */ REFLECT_EDITOR_TOGGLE, /* Frequency editor actions */ FREQUENCY_EDITOR_FSTEP, /* General command function actions */ COMMAND_RDBUTTON, COMMAND_CKBUTTON, /* Nearfield check buttons toggled */ NEARFIELD_NE_CKBUTTON, NEARFIELD_NH_CKBUTTON }; /* Comment "card" columns */ enum CARDS { CMNT_COL_NAME = 0, CMNT_COL_COMMENT, CMNT_NUM_COLS }; /* Editor spinbuttons corresponding to int list columns */ enum SPIN_COL_I { SPIN_COL_I1 = 0, SPIN_COL_I2, SPIN_COL_I3, SPIN_COL_I4 }; /* Editor spinbuttons corresponding to float list columns */ enum SPIN_COL_F { SPIN_COL_F1 = 0, SPIN_COL_F2, SPIN_COL_F3, SPIN_COL_F4, SPIN_COL_F5, SPIN_COL_F6, SPIN_COL_F7 }; /* Geometry data "card" columns */ enum GEOM_CARD { GEOM_COL_NAME = 0, GEOM_COL_I1, GEOM_COL_I2, GEOM_COL_F1, GEOM_COL_F2, GEOM_COL_F3, GEOM_COL_F4, GEOM_COL_F5, GEOM_COL_F6, GEOM_COL_F7, GEOM_NUM_COLS }; /* Control/Command "card" columns */ enum CMND_CARD { CMND_COL_NAME = 0, CMND_COL_I1, CMND_COL_I2, CMND_COL_I3, CMND_COL_I4, CMND_COL_F1, CMND_COL_F2, CMND_COL_F3, CMND_COL_F4, CMND_COL_F5, CMND_COL_F6, CMND_NUM_COLS }; /* F1-F7 columns of GW & GC cards */ enum GW_COLS { WIRE_X1 = 0, WIRE_Y1, WIRE_Z1, WIRE_X2, WIRE_Y2, WIRE_Z2, WIRE_DIA, WIRE_RLEN, WIRE_DIA1, WIRE_DIAN, WIRE_RDIA, WIRE_PCL, WIRE_LEN, WIRE_RES }; /* Patch types */ enum PATCH_TYPE { PATCH_ARBT = 0, PATCH_RECT, PATCH_TRIA, PATCH_QUAD, PATCH_SURF }; /* F1-F6 columns of SP & SC cards */ enum SP_COLS { PATCH_X1 = 0, PATCH_Y1, PATCH_Z1, PATCH_X2, PATCH_Y2, PATCH_Z2, UNUSED_F1, PATCH_X3, PATCH_Y3, PATCH_Z3, PATCH_X4, PATCH_Y4, PATCH_Z4, UNUSED_F2 }; /* GA card float data */ enum GA_CARD { ARC_RAD = 0, ARC_END1, ARC_END2, ARC_DIA, ARC_PCL, ARC_RES }; /* GH card float data */ enum GH_CARD { HELIX_TSPACE = 0, HELIX_LEN, HELIX_RXZO, HELIX_RYZO, HELIX_RXZHL, HELIX_RYZHL, HELIX_DIA, HELIX_PCL, HELIX_NTURN, HELIX_RES }; #endif xnec2c-3.4/src/fields.c000066400000000000000000001257351257141547200147700ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /******* Translated to the C language by N. Kyriazis 20 Aug 2003 ****** Program NEC(input,tape5=input,output,tape11,tape12,tape13,tape14, tape15,tape16,tape20,tape21) Numerical Electromagnetics Code (NEC2) developed at Lawrence Livermore lab., Livermore, CA. (contact G. Burke at 415-422-8414 for problems with the NEC code. For problems with the vax implem- entation, contact J. Breakall at 415-422-8196 or E. Domning at 415 422-5936) file created 4/11/80. ***********Notice********** This computer code material was prepared as an account of work sponsored by the United States government. Neither the United States nor the United States Department Of Energy, nor any of their employees, nor any of their contractors, subcontractors, or their employees, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness or usefulness of any information, apparatus, product or process disclosed, or represents that its use would not infringe privately-owned rights. **********************************************************************/ #include "fields.h" #include "shared.h" /* common /tmi/ */ static tmi_t tmi; /*common /tmh/ */ static tmh_t tmh; /*-------------------------------------------------------------------*/ /* compute near e fields of a segment with sine, cosine, and */ /* constant currents. ground effect included. */ void efld( double xi, double yi, double zi, double ai, int ij ) { #define txk egnd[0] #define tyk egnd[1] #define tzk egnd[2] #define txs egnd[3] #define tys egnd[4] #define tzs egnd[5] #define txc egnd[6] #define tyc egnd[7] #define tzc egnd[8] int ip, ijx; double xij, yij, rfl, salpr, zij, zp, rhox; double rhoy, rhoz, rh, r, rmag, cth, px, py; double xymag, xspec, yspec, rhospc, dmin; complex double epx, epy, refs, refps, zrsin, zratx, zscrn; complex double tezs, ters, tezc=0.0, terc=0.0, tezk=0.0, terk=0.0; static complex double *egnd = NULL; size_t mreq = 9 * sizeof(complex double); mem_alloc( (void **)&egnd, mreq, "in fields.c"); xij= xi- dataj.xj; yij= yi- dataj.yj; ijx= ij; rfl=-1.0; for( ip = 0; ip < gnd.ksymp; ip++ ) { if( ip == 1) ijx=1; rfl= -rfl; salpr= dataj.salpj* rfl; zij= zi- rfl* dataj.zj; zp= xij* dataj.cabj+ yij* dataj.sabj+ zij* salpr; rhox= xij- dataj.cabj* zp; rhoy= yij- dataj.sabj* zp; rhoz= zij- salpr* zp; rh= sqrt( rhox* rhox+ rhoy* rhoy+ rhoz* rhoz+ ai* ai); if( rh <= 1.0e-10) { rhox=0.0; rhoy=0.0; rhoz=0.0; } else { rhox= rhox/ rh; rhoy= rhoy/ rh; rhoz= rhoz/ rh; } /* lumped current element approx. for large separations */ r= sqrt( zp* zp+ rh* rh); if( r >= dataj.rkh) { rmag= TP* r; cth= zp/ r; px= rh/ r; txk= cmplx( cos( rmag),- sin( rmag)); py= TP* r* r; tyk= ETA* cth* txk* cmplx(1.0,-1.0/ rmag)/ py; tzk= ETA* px* txk* cmplx(1.0, rmag-1.0/ rmag)/(2.0* py); tezk= tyk* cth- tzk* px; terk= tyk* px+ tzk* cth; rmag= sin( PI* dataj.s)/ PI; tezc= tezk* rmag; terc= terk* rmag; tezk= tezk* dataj.s; terk= terk* dataj.s; txs=CPLX_00; tys=CPLX_00; tzs=CPLX_00; } /* if( r >= dataj.rkh) */ if( r < dataj.rkh) { /* eksc for thin wire approx. or ekscx for extended t.w. approx. */ if( dataj.iexk != 1) eksc( dataj.s, zp, rh, TP, ijx, &tezs, &ters, &tezc, &terc, &tezk, &terk ); else ekscx( dataj.b, dataj.s, zp, rh, TP, ijx, dataj.ind1, dataj.ind2, &tezs, &ters, &tezc, &terc, &tezk, &terk); txs= tezs* dataj.cabj+ ters* rhox; tys= tezs* dataj.sabj+ ters* rhoy; tzs= tezs* salpr+ ters* rhoz; } /* if( r < dataj.rkh) */ txk= tezk* dataj.cabj+ terk* rhox; tyk= tezk* dataj.sabj+ terk* rhoy; tzk= tezk* salpr+ terk* rhoz; txc= tezc* dataj.cabj+ terc* rhox; tyc= tezc* dataj.sabj+ terc* rhoy; tzc= tezc* salpr+ terc* rhoz; if( ip == 1) { if( gnd.iperf <= 0) { zratx= gnd.zrati; rmag= r; xymag= sqrt( xij* xij+ yij* yij); /* set parameters for radial wire ground screen. */ if( gnd.nradl > 0) { xspec=( xi* dataj.zj+ zi* dataj.xj)/( zi+ dataj.zj); yspec=( yi* dataj.zj+ zi* dataj.yj)/( zi+ dataj.zj); rhospc= sqrt( xspec* xspec+ yspec* yspec+ gnd.t2* gnd.t2); if( rhospc <= gnd.scrwl) { zscrn= gnd.t1* rhospc* log( rhospc/ gnd.t2); zratx=( zscrn* gnd.zrati)/( ETA* gnd.zrati+ zscrn); } } /* if( gnd.nradl > 0) */ else { xspec= 0.0; yspec= 0.0; rhospc= 0.0; zscrn= 0.0; zratx= 0.0; } /* calculation of reflection coefficients * when ground is specified. */ if( xymag <= 1.0e-6) { px=0.0; py=0.0; cth=1.0; zrsin=CPLX_10; } else { px= -yij/ xymag; py= xij/ xymag; cth= zij/ rmag; zrsin= csqrt(1.0 - zratx*zratx*(1.0 - cth*cth) ); } /* if( xymag <= 1.0e-6) */ refs=( cth- zratx* zrsin)/( cth+ zratx* zrsin); refps=-( zratx* cth- zrsin)/( zratx* cth+ zrsin); refps= refps- refs; epy= px* txk+ py* tyk; epx= px* epy; epy= py* epy; txk= refs* txk+ refps* epx; tyk= refs* tyk+ refps* epy; tzk= refs* tzk; epy= px* txs+ py* tys; epx= px* epy; epy= py* epy; txs= refs* txs+ refps* epx; tys= refs* tys+ refps* epy; tzs= refs* tzs; epy= px* txc+ py* tyc; epx= px* epy; epy= py* epy; txc= refs* txc+ refps* epx; tyc= refs* tyc+ refps* epy; tzc= refs* tzc; } /* if( gnd.iperf <= 0) */ dataj.exk= dataj.exk- txk* gnd.frati; dataj.eyk= dataj.eyk- tyk* gnd.frati; dataj.ezk= dataj.ezk- tzk* gnd.frati; dataj.exs= dataj.exs- txs* gnd.frati; dataj.eys= dataj.eys- tys* gnd.frati; dataj.ezs= dataj.ezs- tzs* gnd.frati; dataj.exc= dataj.exc- txc* gnd.frati; dataj.eyc= dataj.eyc- tyc* gnd.frati; dataj.ezc= dataj.ezc- tzc* gnd.frati; continue; } /* if( ip == 1) */ dataj.exk= txk; dataj.eyk= tyk; dataj.ezk= tzk; dataj.exs= txs; dataj.eys= tys; dataj.ezs= tzs; dataj.exc= txc; dataj.eyc= tyc; dataj.ezc= tzc; } /* for( ip = 0; ip < gnd.ksymp; ip++ ) */ if( gnd.iperf != 2) return; /* field due to ground using sommerfeld/norton */ incom.sn= sqrt( dataj.cabj* dataj.cabj+ dataj.sabj* dataj.sabj); if( incom.sn >= 1.0e-5) { incom.xsn= dataj.cabj/ incom.sn; incom.ysn= dataj.sabj/ incom.sn; } else { incom.sn=0.0; incom.xsn=1.0; incom.ysn=0.0; } /* displace observation point for thin wire approximation */ zij= zi+ dataj.zj; salpr= -dataj.salpj; rhox= dataj.sabj* zij- salpr* yij; rhoy= salpr* xij- dataj.cabj* zij; rhoz= dataj.cabj* yij- dataj.sabj* xij; rh= rhox* rhox+ rhoy* rhoy+ rhoz* rhoz; if( rh <= 1.0e-10) { incom.xo= xi- ai* incom.ysn; incom.yo= yi+ ai* incom.xsn; incom.zo= zi; } else { rh= ai/ sqrt( rh); if( rhoz < 0.0) rh= -rh; incom.xo= xi+ rh* rhox; incom.yo= yi+ rh* rhoy; incom.zo= zi+ rh* rhoz; } /* if( rh <= 1.0e-10) */ r= xij* xij+ yij* yij+ zij* zij; if( r <= .95) { double shaf; /* field from interpolation is integrated over segment */ incom.isnor=1; dmin= creal(dataj.exk*conj(dataj.exk)) + creal(dataj.eyk*conj(dataj.eyk)) + creal(dataj.ezk*conj(dataj.ezk)); dmin=.01* sqrt( dmin); shaf=.5* dataj.s; rom2(- shaf, shaf, egnd, dmin); } else { /* norton field equations and lumped * current element approximation */ incom.isnor=2; sflds(0.0, egnd); } /* if( r <= .95) */ if( r > .95) { zp= xij* dataj.cabj+ yij* dataj.sabj+ zij* salpr; rh= r- zp* zp; if( rh <= 1.0e-10) dmin=0.0; else dmin= sqrt( rh/( rh+ ai* ai)); if( dmin <= .95) { px=1.0- dmin; terk=( txk* dataj.cabj+ tyk* dataj.sabj+ tzk* salpr)* px; txk= dmin* txk+ terk* dataj.cabj; tyk= dmin* tyk+ terk* dataj.sabj; tzk= dmin* tzk+ terk* salpr; ters=( txs* dataj.cabj+ tys* dataj.sabj+ tzs* salpr)* px; txs= dmin* txs+ ters* dataj.cabj; tys= dmin* tys+ ters* dataj.sabj; tzs= dmin* tzs+ ters* salpr; terc=( txc* dataj.cabj+ tyc* dataj.sabj+ tzc* salpr)* px; txc= dmin* txc+ terc* dataj.cabj; tyc= dmin* tyc+ terc* dataj.sabj; tzc= dmin* tzc+ terc* salpr; } /* if( dmin <= .95) */ } /* if( r > .95) */ dataj.exk= dataj.exk+ txk; dataj.eyk= dataj.eyk+ tyk; dataj.ezk= dataj.ezk+ tzk; dataj.exs= dataj.exs+ txs; dataj.eys= dataj.eys+ tys; dataj.ezs= dataj.ezs+ tzs; dataj.exc= dataj.exc+ txc; dataj.eyc= dataj.eyc+ tyc; dataj.ezc= dataj.ezc+ tzc; return; } /*-----------------------------------------------------------------------*/ /* compute e field of sine, cosine, and constant */ /* current filaments by thin wire approximation. */ void eksc( double s, double z, double rh, double xk, int ij, complex double *ezs, complex double *ers, complex double *ezc, complex double *erc, complex double *ezk, complex double *erk ) { double rhk, sh, shk, ss, cs, z1a, z2a, cint, sint; complex double gz1, gz2, gp1, gp2, gzp1, gzp2; tmi.ij= ij; tmi.zpk= xk* z; rhk= xk* rh; tmi.rkb2= rhk* rhk; sh=.5* s; shk= xk* sh; ss= sin( shk); cs= cos( shk); z2a= sh- z; z1a=-( sh+ z); gx( z1a, rh, xk, &gz1, &gp1); gx( z2a, rh, xk, &gz2, &gp2); gzp1= gp1* z1a; gzp2= gp2* z2a; *ezs= CONST1*(( gz2- gz1)* cs* xk-( gzp2+ gzp1)* ss); *ezc= -CONST1*(( gz2+ gz1)* ss* xk+( gzp2- gzp1)* cs); *erk= CONST1*( gp2- gp1)* rh; intx(- shk, shk, rhk, ij, &cint, &sint); *ezk= -CONST1*( gzp2- gzp1+ xk* xk* cmplx( cint,- sint)); gzp1= gzp1* z1a; gzp2= gzp2* z2a; if( rh >= 1.0e-10) { *ers= -CONST1*(( gzp2+ gzp1+ gz2+ gz1)* ss-( z2a* gz2- z1a* gz1)* cs*xk)/ rh; *erc= -CONST1*(( gzp2- gzp1+ gz2- gz1)* cs+( z2a* gz2+ z1a* gz1)* ss*xk)/ rh; return; } *ers = CPLX_00; *erc = CPLX_00; return; } /*-----------------------------------------------------------------------*/ /* compute e field of sine, cosine, and constant current */ /* filaments by extended thin wire approximation. */ void ekscx( double bx, double s, double z, double rhx, double xk, int ij, int inx1, int inx2, complex double *ezs, complex double *ers, complex double *ezc, complex double *erc, complex double *ezk, complex double *erk ) { int ira; double b, rh, sh, rhk, shk, ss, cs, z1a; double z2a, a2, bk, bk2, cint, sint; complex double gz1, gz2, gzp1, gzp2, gr1, gr2; complex double grp1, grp2, grk1, grk2, gzz1, gzz2; if( rhx >= bx) { rh= rhx; b= bx; ira=0; } else { rh= bx; b= rhx; ira=1; } sh=.5* s; tmi.ij= ij; tmi.zpk= xk* z; rhk= xk* rh; tmi.rkb2= rhk* rhk; shk= xk* sh; ss= sin( shk); cs= cos( shk); z2a= sh- z; z1a=-( sh+ z); a2= b* b; if( inx1 != 2) gxx( z1a, rh, b, a2, xk, ira, &gz1, &gzp1, &gr1, &grp1, &grk1, &gzz1); else { gx( z1a, rhx, xk, &gz1, &grk1); gzp1= grk1* z1a; gr1= gz1/ rhx; grp1= gzp1/ rhx; grk1= grk1* rhx; gzz1= CPLX_00; } if( inx2 != 2) gxx( z2a, rh, b, a2, xk, ira, &gz2, &gzp2, &gr2, &grp2, &grk2, &gzz2); else { gx( z2a, rhx, xk, &gz2, &grk2); gzp2= grk2* z2a; gr2= gz2/ rhx; grp2= gzp2/ rhx; grk2= grk2* rhx; gzz2= CPLX_00; } *ezs= CONST1*(( gz2- gz1)* cs* xk-( gzp2+ gzp1)* ss); *ezc= -CONST1*(( gz2+ gz1)* ss* xk+( gzp2- gzp1)* cs); *ers= -CONST1*(( z2a* grp2+ z1a* grp1+ gr2+ gr1)*ss -( z2a* gr2- z1a* gr1)* cs* xk); *erc= -CONST1*(( z2a* grp2- z1a* grp1+ gr2- gr1)*cs +( z2a* gr2+ z1a* gr1)* ss* xk); *erk= CONST1*( grk2- grk1); intx(- shk, shk, rhk, ij, &cint, &sint); bk= b* xk; bk2= bk* bk*.25; *ezk= -CONST1*( gzp2- gzp1+ xk* xk*(1.0- bk2)* cmplx( cint,- sint)-bk2*( gzz2- gzz1)); return; } /*-----------------------------------------------------------------------*/ /* gf computes the integrand exp(jkr)/(kr) for numerical integration. */ void gf( double zk, double *co, double *si ) { double zdk, rk, rks; zdk= zk- tmi.zpk; rk= sqrt( tmi.rkb2+ zdk* zdk); *si= sin( rk)/ rk; if( tmi.ij != 0 ) { *co= cos( rk)/ rk; return; } if( rk >= .2l) { *co=( cos( rk)-1.0)/ rk; return; } rks= rk* rk; *co=((-1.38888889e-3* rks+4.16666667e-2)* rks-.5)* rk; return; } /*-----------------------------------------------------------------------*/ /* integrand for h field of a wire */ void gh( double zk, double *hr, double *hi) { double rs, r, ckr, skr, rr2, rr3; rs= zk- tmh.zpka; rs= tmh.rhks+ rs* rs; r= sqrt( rs); ckr= cos( r); skr= sin( r); rr2=1.0/ rs; rr3= rr2/ r; *hr= skr* rr2+ ckr* rr3; *hi= ckr* rr2- skr* rr3; return; } /*-----------------------------------------------------------------------*/ /* gwave computes the electric field, including ground wave, of a */ /* current element over a ground plane using formulas of k.a. norton */ /* (proc. ire, sept., 1937, pp.1203,1236) */ void gwave( complex double *erv, complex double *ezv, complex double *erh, complex double *ezh, complex double *eph ) { double sppp, sppp2, cppp2, cppp, spp, spp2, cpp2, cpp; complex double rk1, rk2, t1, t2, t3, t4, p1, rv; complex double omr, w, f, q1, rh, v, g, xr1, xr2; complex double x1, x2, x3, x4, x5, x6, x7; sppp= gwav.zmh/ gwav.r1; sppp2= sppp* sppp; cppp2=1.0- sppp2; if( cppp2 < 1.0e-20) cppp2=1.0e-20; cppp= sqrt( cppp2); spp= gwav.zph/ gwav.r2; spp2= spp* spp; cpp2=1.0- spp2; if( cpp2 < 1.0e-20) cpp2=1.0e-20; cpp= sqrt( cpp2); rk1= -TPJ* gwav.r1; rk2= -TPJ* gwav.r2; t1=1.0 -gwav.u2* cpp2; t2= csqrt( t1); t3=(1.0 -1.0/ rk1)/ rk1; t4=(1.0 -1.0/ rk2)/ rk2; p1= rk2* gwav.u2* t1/(2.0* cpp2); rv=( spp- gwav.u* t2)/( spp+ gwav.u* t2); omr=1.0- rv; w=1.0/ omr; w=(4.0 + I*0.0)* p1* w* w; fbar( w, &f ); q1= rk2* t1/(2.0* gwav.u2* cpp2); rh=( t2- gwav.u* spp)/( t2+ gwav.u* spp); v=1.0/(1.0+ rh); v=(4.0 + I*0.0)* q1* v* v; fbar( v, &g ); xr1= gwav.xx1/ gwav.r1; xr2= gwav.xx2/ gwav.r2; x1= cppp2* xr1; x2= rv* cpp2* xr2; x3= omr* cpp2* f* xr2; x4= gwav.u* t2* spp*2.0* xr2/ rk2; x5= xr1* t3*(1.0-3.0* sppp2); x6= xr2* t4*(1.0-3.0* spp2); *ezv=( x1+ x2+ x3- x4- x5- x6)* (-CONST4); x1= sppp* cppp* xr1; x2= rv* spp* cpp* xr2; x3= cpp* omr* gwav.u* t2* f* xr2; x4= spp* cpp* omr* xr2/ rk2; x5=3.0* sppp* cppp* t3* xr1; x6= cpp* gwav.u* t2* omr* xr2/ rk2*.50; x7=3.0* spp* cpp* t4* xr2; *erv=-( x1+ x2- x3+ x4- x5+ x6- x7)* (-CONST4); *ezh=-( x1- x2+ x3- x4- x5- x6+ x7)* (-CONST4); x1= sppp2* xr1; x2= rv* spp2* xr2; x4= gwav.u2* t1* omr* f* xr2; x5= t3*(1.0-3.0* cppp2)* xr1; x6= t4*(1.0-3.0* cpp2)*(1.0- gwav.u2*(1.0+ rv )- gwav.u2* omr* f)* xr2; x7= gwav.u2* cpp2* omr*(1.0-1.0/ rk2)*( f*( gwav.u2* t1 - spp2-1.0/ rk2)+1.0/rk2)* xr2; *erh=( x1- x2- x4- x5+ x6+ x7)* (-CONST4); x1= xr1; x2= rh* xr2; x3=( rh+1.0)* g* xr2; x4= t3* xr1; x5= t4*(1.0- gwav.u2*(1.0+ rv)- gwav.u2* omr* f)* xr2; x6=.5* gwav.u2* omr*( f*( gwav.u2* t1- spp2-1.0/ rk2) + 1.0/ rk2)* xr2/ rk2; *eph=-( x1- x2+ x3- x4+ x5+ x6)* (-CONST4); return; } /*-----------------------------------------------------------------------*/ /* segment end contributions for thin wire approx. */ void gx( double zz, double rh, double xk, complex double *gz, complex double *gzp) { double r, r2, rkz; r2= zz* zz+ rh* rh; r= sqrt( r2); rkz= xk* r; *gz= cmplx( cos( rkz),- sin( rkz))/ r; *gzp= -cmplx(1.0, rkz)* *gz/ r2; return; } /*-----------------------------------------------------------------------*/ /* segment end contributions for ext. thin wire approx. */ void gxx( double zz, double rh, double a, double a2, double xk, int ira, complex double *g1, complex double *g1p, complex double *g2, complex double *g2p, complex double *g3, complex double *gzp ) { double r, r2, r4, rk, rk2, rh2, t1, t2; complex double gz, c1, c2, c3; r2= zz* zz+ rh* rh; r= sqrt( r2); r4= r2* r2; rk= xk* r; rk2= rk* rk; rh2= rh* rh; t1=.25* a2* rh2/ r4; t2=.5* a2/ r2; c1= cmplx(1.0, rk); c2=3.0* c1- rk2; c3= cmplx(6.0, rk)* rk2-15.0* c1; gz= cmplx( cos( rk),- sin( rk))/ r; *g2= gz*(1.0+ t1* c2); *g1= *g2- t2* c1* gz; gz= gz/ r2; *g2p= gz*( t1* c3- c1); *gzp= t2* c2* gz; *g3= *g2p+ *gzp; *g1p= *g3* zz; if( ira != 1) { *g3=( *g3+ *gzp)* rh; *gzp= -zz* c1* gz; if( rh <= 1.0e-10) { *g2=0.0; *g2p=0.0; return; } *g2= *g2/ rh; *g2p= *g2p* zz/ rh; return; } /* if( ira != 1) */ t2=.5* a; *g2= -t2* c1* gz; *g2p= t2* gz* c2/ r2; *g3= rh2* *g2p- a* gz* c1; *g2p= *g2p* zz; *gzp= -zz* c1* gz; return; } /*-----------------------------------------------------------------------*/ /* hfk computes the h field of a uniform current */ /* filament by numerical integration */ void hfk( double el1, double el2, double rhk, double zpkx, double *sgr, double *sgi ) { int nx = 1, nma = 65536, nts = 4; int ns, nt; int flag = TRUE; double rx = 1.0e-4; double z, ze, s, ep, zend, dz=0.0, zp, dzot=0.0; double t00r, g1r, g5r=0.0, t00i, g1i, g5i=0.0, t01r; double g3r=0.0, t01i, g3i=0.0, t10r, t10i, te1i; double te1r, g2r, g4r, t02i, g2i, g4i, t11r, t11i; double t20r, t20i, te2i, te2r, t02r; tmh.zpka= zpkx; tmh.rhks= rhk* rhk; z= el1; ze= el2; s= ze- z; ep= s/(10.0* nma); zend= ze- ep; *sgr=0.0; *sgi=0.0; ns= nx; nt=0; gh( z, &g1r, &g1i); while( TRUE ) { if( flag ) { dz= s/ ns; zp= z+ dz; if( zp > ze ) { dz= ze- z; if( fabs(dz) <= ep ) { *sgr= *sgr* rhk*.5; *sgi= *sgi* rhk*.5; return; } } dzot= dz*.5; zp= z+ dzot; gh( zp, &g3r, &g3i); zp= z+ dz; gh( zp, &g5r, &g5i); } /* if( flag ) */ t00r=( g1r+ g5r)* dzot; t00i=( g1i+ g5i)* dzot; t01r=( t00r+ dz* g3r)*0.5; t01i=( t00i+ dz* g3i)*0.5; t10r=(4.0* t01r- t00r)/3.0; t10i=(4.0* t01i- t00i)/3.0; test( t01r, t10r, &te1r, t01i, t10i, &te1i, 0.0); if( (te1i <= rx) && (te1r <= rx) ) { *sgr= *sgr+ t10r; *sgi= *sgi+ t10i; nt += 2; z += dz; if( z >= zend) { *sgr= *sgr* rhk*.5; *sgi= *sgi* rhk*.5; return; } g1r= g5r; g1i= g5i; if( nt >= nts) if( ns > nx) { ns= ns/2; nt=1; } flag = TRUE; continue; } /* if( (te1i <= rx) && (te1r <= rx) ) */ zp= z+ dz*0.25; gh( zp, &g2r, &g2i); zp= z+ dz*0.75; gh( zp, &g4r, &g4i); t02r=( t01r+ dzot*( g2r+ g4r))*0.5; t02i=( t01i+ dzot*( g2i+ g4i))*0.5; t11r=(4.0* t02r- t01r)/3.0; t11i=(4.0* t02i- t01i)/3.0; t20r=(16.0* t11r- t10r)/15.0; t20i=(16.0* t11i- t10i)/15.0; test( t11r, t20r, &te2r, t11i, t20i, &te2i, 0.0); if( (te2i > rx) || (te2r > rx) ) { nt=0; if( ns >= nma) { fprintf( stderr, "\nxnec2c: step size limited at z= %10.5f", z ); } else { ns= ns*2; dz= s/ ns; dzot= dz*0.5; g5r= g3r; g5i= g3i; g3r= g2r; g3i= g2i; flag = FALSE; continue; } } /* if( (te2i > rx) || (te2r > rx) ) */ *sgr= *sgr+ t20r; *sgi= *sgi+ t20i; nt++; z += dz; if( z >= zend) { *sgr= *sgr* rhk*.5; *sgi= *sgi* rhk*.5; return; } g1r= g5r; g1i= g5i; if( nt >= nts) if( ns > nx) { ns= ns/2; nt=1; } flag = TRUE; } /* while( TRUE ) */ } /*-----------------------------------------------------------------------*/ /* hintg computes the h field of a patch current */ void hintg( double xi, double yi, double zi ) { int ip; double rx, ry, rfl, xymag, pxx, pyy, cth; double rz, rsq, r, rk, cr, sr, t1zr, t2zr; complex double gam, f1x, f1y, f1z, f2x, f2y, f2z, rrv, rrh; rx= xi- dataj.xj; ry= yi- dataj.yj; rfl=-1.0; dataj.exk=CPLX_00; dataj.eyk=CPLX_00; dataj.ezk=CPLX_00; dataj.exs=CPLX_00; dataj.eys=CPLX_00; dataj.ezs=CPLX_00; for( ip = 1; ip <= gnd.ksymp; ip++ ) { rfl= -rfl; rz= zi- dataj.zj* rfl; rsq= rx* rx+ ry* ry+ rz* rz; if( rsq < 1.0e-20) continue; r = sqrt( rsq ); rk= TP* r; cr= cos( rk); sr= sin( rk); gam=-( cmplx(cr,-sr)+rk*cmplx(sr,cr) )/( FPI*rsq*r )* dataj.s; dataj.exc= gam* rx; dataj.eyc= gam* ry; dataj.ezc= gam* rz; t1zr= dataj.t1zj* rfl; t2zr= dataj.t2zj* rfl; f1x= dataj.eyc* t1zr- dataj.ezc* dataj.t1yj; f1y= dataj.ezc* dataj.t1xj- dataj.exc* t1zr; f1z= dataj.exc* dataj.t1yj- dataj.eyc* dataj.t1xj; f2x= dataj.eyc* t2zr- dataj.ezc* dataj.t2yj; f2y= dataj.ezc* dataj.t2xj- dataj.exc* t2zr; f2z= dataj.exc* dataj.t2yj- dataj.eyc* dataj.t2xj; if( ip != 1) { if( gnd.iperf == 1) { f1x= -f1x; f1y= -f1y; f1z= -f1z; f2x= -f2x; f2y= -f2y; f2z= -f2z; } else { xymag= sqrt( rx* rx+ ry* ry); if( xymag <= 1.0e-6) { pxx=0.0; pyy=0.0; cth=1.0; rrv=CPLX_10; } else { pxx= -ry/ xymag; pyy= rx/ xymag; cth= rz/ r; rrv= csqrt(1.0- gnd.zrati* gnd.zrati*(1.0- cth* cth)); } /* if( xymag <= 1.0e-6) */ rrh= gnd.zrati* cth; rrh=( rrh- rrv)/( rrh+ rrv); rrv= gnd.zrati* rrv; rrv=-( cth- rrv)/( cth+ rrv); gam=( f1x* pxx+ f1y* pyy)*( rrv- rrh); f1x= f1x* rrh+ gam* pxx; f1y= f1y* rrh+ gam* pyy; f1z= f1z* rrh; gam=( f2x* pxx+ f2y* pyy)*( rrv- rrh); f2x= f2x* rrh+ gam* pxx; f2y= f2y* rrh+ gam* pyy; f2z= f2z* rrh; } /* if( gnd.iperf == 1) */ } /* if( ip != 1) */ dataj.exk += f1x; dataj.eyk += f1y; dataj.ezk += f1z; dataj.exs += f2x; dataj.eys += f2y; dataj.ezs += f2z; } /* for( ip = 1; ip <= gnd.ksymp; ip++ ) */ return; } /*-----------------------------------------------------------------------*/ /* hsfld computes the h field for constant, sine, and */ /* cosine current on a segment including ground effects. */ void hsfld( double xi, double yi, double zi, double ai ) { int ip; double xij, yij, rfl, salpr, zij, zp, rhox; double rhoy, rhoz, rh, phx, phy, phz, rmag; double xymag, xspec, yspec, rhospc, px, py, cth; complex double hpk, hps, hpc, qx, qy, qz, rrv, rrh, zratx; xij= xi- dataj.xj; yij= yi- dataj.yj; rfl=-1.0; for( ip = 0; ip < gnd.ksymp; ip++ ) { rfl= -rfl; salpr= dataj.salpj* rfl; zij= zi- rfl* dataj.zj; zp= xij* dataj.cabj+ yij* dataj.sabj+ zij* salpr; rhox= xij- dataj.cabj* zp; rhoy= yij- dataj.sabj* zp; rhoz= zij- salpr* zp; rh= sqrt( rhox* rhox+ rhoy* rhoy+ rhoz* rhoz+ ai* ai); if( rh <= 1.0e-10) { dataj.exk=0.0; dataj.eyk=0.0; dataj.ezk=0.0; dataj.exs=0.0; dataj.eys=0.0; dataj.ezs=0.0; dataj.exc=0.0; dataj.eyc=0.0; dataj.ezc=0.0; continue; } rhox= rhox/ rh; rhoy= rhoy/ rh; rhoz= rhoz/ rh; phx= dataj.sabj* rhoz- salpr* rhoy; phy= salpr* rhox- dataj.cabj* rhoz; phz= dataj.cabj* rhoy- dataj.sabj* rhox; hsflx( dataj.s, rh, zp, &hpk, &hps, &hpc); if( ip == 1 ) { if( gnd.iperf != 1 ) { zratx= gnd.zrati; rmag= sqrt( zp* zp+ rh* rh); xymag= sqrt( xij* xij+ yij* yij); /* set parameters for radial wire ground screen. */ if( gnd.nradl > 0) { xspec=( xi* dataj.zj+ zi* dataj.xj)/( zi+ dataj.zj); yspec=( yi* dataj.zj+ zi* dataj.yj)/( zi+ dataj.zj); rhospc= sqrt( xspec* xspec+ yspec* yspec+ gnd.t2* gnd.t2); if( rhospc <= gnd.scrwl) { rrv= gnd.t1* rhospc* log( rhospc/ gnd.t2); zratx=( rrv* gnd.zrati)/( ETA* gnd.zrati+ rrv); } } /* if( gnd.nradl > 0) */ /* calculation of reflection coefficients * when ground is specified. */ if( xymag <= 1.0e-6) { px=0.0; py=0.0; cth=1.0; rrv=CPLX_10; } else { px= -yij/ xymag; py= xij/ xymag; cth= zij/ rmag; rrv= csqrt(1.0- zratx* zratx*(1.0- cth* cth)); } rrh= zratx* cth; rrh=-( rrh- rrv)/( rrh+ rrv); rrv= zratx* rrv; rrv=( cth- rrv)/( cth+ rrv); qy=( phx* px+ phy* py)*( rrv- rrh); qx= qy* px+ phx* rrh; qy= qy* py+ phy* rrh; qz= phz* rrh; dataj.exk= dataj.exk- hpk* qx; dataj.eyk= dataj.eyk- hpk* qy; dataj.ezk= dataj.ezk- hpk* qz; dataj.exs= dataj.exs- hps* qx; dataj.eys= dataj.eys- hps* qy; dataj.ezs= dataj.ezs- hps* qz; dataj.exc= dataj.exc- hpc* qx; dataj.eyc= dataj.eyc- hpc* qy; dataj.ezc= dataj.ezc- hpc* qz; continue; } /* if( gnd.iperf != 1 ) */ else { xspec= 0.0; yspec= 0.0; rhospc= 0.0; rrv= 0.0; zratx= 0.0; } dataj.exk= dataj.exk- hpk* phx; dataj.eyk= dataj.eyk- hpk* phy; dataj.ezk= dataj.ezk- hpk* phz; dataj.exs= dataj.exs- hps* phx; dataj.eys= dataj.eys- hps* phy; dataj.ezs= dataj.ezs- hps* phz; dataj.exc= dataj.exc- hpc* phx; dataj.eyc= dataj.eyc- hpc* phy; dataj.ezc= dataj.ezc- hpc* phz; continue; } /* if( ip == 1 ) */ dataj.exk= hpk* phx; dataj.eyk= hpk* phy; dataj.ezk= hpk* phz; dataj.exs= hps* phx; dataj.eys= hps* phy; dataj.ezs= hps* phz; dataj.exc= hpc* phx; dataj.eyc= hpc* phy; dataj.ezc= hpc* phz; } /* for( ip = 0; ip < gnd.ksymp; ip++ ) */ return; } /*-----------------------------------------------------------------------*/ /* calculates h field of sine cosine, and constant current of segment */ void hsflx( double s, double rh, double zpx, complex double *hpk, complex double *hps, complex double *hpc ) { complex double fjk, ekr1, ekr2, t1, t2, cons; fjk = -TPJ; if( rh >= 1.0e-10) { double zp, z2a, hss, dh, z1; double rhz, dk, cdk, sdk, hkr, hki; if( zpx >= 0.0) { zp= zpx; hss=1.0; } else { zp= -zpx; hss=-1.0; } dh=.5* s; z1= zp+ dh; z2a= zp- dh; if( z2a >= 1.0e-7) rhz= rh/ z2a; else rhz=1.0; dk= TP* dh; cdk= cos( dk); sdk= sin( dk); hfk(- dk, dk, rh* TP, zp* TP, &hkr, &hki); *hpk= cmplx( hkr, hki); if( rhz >= 1.0e-3) { double rh2, r1, r2; rh2= rh* rh; r1= sqrt( rh2+ z1* z1); r2= sqrt( rh2+ z2a* z2a); ekr1= cexp( fjk* r1); ekr2= cexp( fjk* r2); t1= z1* ekr1/ r1; t2= z2a* ekr2/ r2; *hps=( cdk*( ekr2- ekr1)- CPLX_01* sdk*( t2+ t1))* hss; *hpc= -sdk*( ekr2+ ekr1)- CPLX_01* cdk*( t2- t1); cons= -CPLX_01/(2.0* TP* rh); *hps= cons* *hps; *hpc= cons* *hpc; return; } /* if( rhz >= 1.0e-3) */ ekr1= cmplx( cdk, sdk)/( z2a* z2a); ekr2= cmplx( cdk,- sdk)/( z1* z1); t1= TP*(1.0/ z1-1.0/ z2a); t2= cexp( fjk* zp)* rh/PI8; *hps= t2*( t1+( ekr1+ ekr2)* sdk)* hss; *hpc= t2*(- CPLX_01* t1+( ekr1- ekr2)* cdk); return; } /* if( rh >= 1.0e-10) */ *hps=CPLX_00; *hpc=CPLX_00; *hpk=CPLX_00; return; } /*-----------------------------------------------------------------------*/ /* nefld computes the near field at specified points in space after */ /* the structure currents have been computed. */ void nefld( double xob, double yob, double zob, complex double *ex, complex double *ey, complex double *ez ) { int i, ix, ipr, iprx, jc, ipa; double zp, xi, ax; complex double acx, bcx, ccx; *ex=CPLX_00; *ey=CPLX_00; *ez=CPLX_00; ax=0.0; if( data.n != 0) { for( i = 0; i < data.n; i++ ) { dataj.xj= xob- data.x[i]; dataj.yj= yob- data.y[i]; dataj.zj= zob- data.z[i]; zp= data.cab[i]* dataj.xj+ data.sab[i] * dataj.yj+ data.salp[i]* dataj.zj; if( fabs( zp) > 0.5001* data.si[i]) continue; zp= dataj.xj* dataj.xj+ dataj.yj* dataj.yj + dataj.zj* dataj.zj- zp* zp; dataj.xj= data.bi[i]; if( zp > 0.9* dataj.xj* dataj.xj) continue; ax= dataj.xj; break; } /* for( i = 0; i < n; i++ ) */ for( i = 0; i < data.n; i++ ) { ix = i+1; dataj.s= data.si[i]; dataj.b= data.bi[i]; dataj.xj= data.x[i]; dataj.yj= data.y[i]; dataj.zj= data.z[i]; dataj.cabj= data.cab[i]; dataj.sabj= data.sab[i]; dataj.salpj= data.salp[i]; if( dataj.iexk != 0) { ipr= data.icon1[i]; if (ipr > PCHCON) dataj.ind1 = 2; else if( ipr < 0 ) { ipr = -ipr; iprx = ipr-1; if( -data.icon1[iprx] != ix ) dataj.ind1=2; else { xi= fabs( dataj.cabj* data.cab[iprx]+ dataj.sabj* data.sab[iprx]+ dataj.salpj* data.salp[iprx]); if( (xi < 0.999999) || (fabs(data.bi[iprx]/dataj.b-1.0) > 1.0e-6) ) dataj.ind1=2; else dataj.ind1=0; } } /* if( ipr < 0 ) */ else if( ipr == 0 ) dataj.ind1=1; else { iprx = ipr-1; if( ipr != ix ) { if( data.icon2[iprx] != ix ) dataj.ind1=2; else { xi= fabs( dataj.cabj* data.cab[iprx]+ dataj.sabj* data.sab[iprx]+ dataj.salpj* data.salp[iprx]); if( (xi < 0.999999) || (fabs(data.bi[iprx]/dataj.b-1.0) > 1.0e-6) ) dataj.ind1=2; else dataj.ind1=0; } } /* if( ipr != ix ) */ else { if( dataj.cabj* dataj.cabj + dataj.sabj* dataj.sabj > 1.0e-8) dataj.ind1=2; else dataj.ind1=0; } } /* else */ ipr= data.icon2[i]; if (ipr > PCHCON) dataj.ind2 = 2; else if( ipr < 0 ) { ipr = -ipr; iprx = ipr-1; if( -data.icon2[iprx] != ix ) dataj.ind1=2; else { xi= fabs( dataj.cabj* data.cab[iprx]+ dataj.sabj* data.sab[iprx]+ dataj.salpj* data.salp[iprx]); if( (xi < 0.999999) || (fabs(data.bi[iprx]/dataj.b-1.0) > 1.0e-6) ) dataj.ind1=2; else dataj.ind1=0; } } /* if( ipr < 0 ) */ else if( ipr == 0 ) dataj.ind2=1; else { iprx = ipr-1; if( ipr != ix ) { if( data.icon1[iprx] != ix ) dataj.ind2=2; else { xi= fabs( dataj.cabj* data.cab[iprx]+ dataj.sabj* data.sab[iprx]+ dataj.salpj* data.salp[iprx]); if( (xi < 0.999999) || (fabs(data.bi[iprx]/dataj.b-1.0) > 1.0e-6) ) dataj.ind2=2; else dataj.ind2=0; } } /* if( ipr != (i+1) ) */ else { if( dataj.cabj* dataj.cabj + dataj.sabj* dataj.sabj > 1.0e-8) dataj.ind1=2; else dataj.ind1=0; } } /* else */ } /* if( dataj.iexk != 0) */ efld( xob, yob, zob, ax,1); acx= cmplx( crnt.air[i], crnt.aii[i]); bcx= cmplx( crnt.bir[i], crnt.bii[i]); ccx= cmplx( crnt.cir[i], crnt.cii[i]); *ex += dataj.exk* acx+ dataj.exs* bcx+ dataj.exc* ccx; *ey += dataj.eyk* acx+ dataj.eys* bcx+ dataj.eyc* ccx; *ez += dataj.ezk* acx+ dataj.ezs* bcx+ dataj.ezc* ccx; } /* for( i = 0; i < n; i++ ) */ if( data.m == 0) return; } /* if( n != 0) */ jc= data.n-1; for( i = 0; i < data.m; i++ ) { dataj.s= data.pbi[i]; dataj.xj= data.px[i]; dataj.yj= data.py[i]; dataj.zj= data.pz[i]; dataj.t1xj= data.t1x[i]; dataj.t1yj= data.t1y[i]; dataj.t1zj= data.t1z[i]; dataj.t2xj= data.t2x[i]; dataj.t2yj= data.t2y[i]; dataj.t2zj= data.t2z[i]; jc += 3; acx= dataj.t1xj* crnt.cur[jc-2]+ dataj.t1yj * crnt.cur[jc-1]+ dataj.t1zj* crnt.cur[jc]; bcx= dataj.t2xj* crnt.cur[jc-2]+ dataj.t2yj * crnt.cur[jc-1]+ dataj.t2zj* crnt.cur[jc]; for( ipa = 0; ipa < gnd.ksymp; ipa++ ) { dataj.ipgnd= ipa+1; unere( xob, yob, zob); *ex= *ex+ acx* dataj.exk+ bcx* dataj.exs; *ey= *ey+ acx* dataj.eyk+ bcx* dataj.eys; *ez= *ez+ acx* dataj.ezk+ bcx* dataj.ezs; } } /* for( i = 0; i < m; i++ ) */ return; } /*-----------------------------------------------------------------------*/ /* compute near e or h fields over a range of points */ void nfpat( int nfeh ) { int i, j, kk, idx; double znrt, cth=0.0, sth=0.0, ynrt, cph=0.0, sph=0.0, yob; double xnrt, xob,zob, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; complex double ex, ey, ez; double r; /* Distance of field point from xyz origin */ Alloc_Nearfield_Buffers( fpat.nrx, fpat.nry, fpat.nrz ); /* Initialize according to E/H flag */ if( nfeh == 1 ) near_field.max_hr = 0.0; else near_field.max_er = 0.0; near_field.r_max = 0.0; idx = 0; znrt= fpat.znr- fpat.dznr; for( i = 0; i < fpat.nrz; i++ ) { znrt += fpat.dznr; if( fpat.near != 0) { cth= cos( TA* znrt); sth= sin( TA* znrt); } ynrt= fpat.ynr- fpat.dynr; for( j = 0; j < fpat.nry; j++ ) { ynrt += fpat.dynr; if( fpat.near != 0) { cph= cos( TA* ynrt); sph= sin( TA* ynrt); } xnrt= fpat.xnr- fpat.dxnr; for( kk = 0; kk < fpat.nrx; kk++ ) { xnrt += fpat.dxnr; if( fpat.near != 0) { xob= xnrt* sth* cph; yob= xnrt* sth* sph; zob= xnrt* cth; } else { xob= xnrt; yob= ynrt; zob= znrt; } tmp1= xob/ data.wlam; tmp2= yob/ data.wlam; tmp3= zob/ data.wlam; if( nfeh == 1 ) /* Magnetic field */ nhfld( tmp1, tmp2, tmp3, &ex, &ey, &ez); else /* Electric field */ nefld( tmp1, tmp2, tmp3, &ex, &ey, &ez); /* Calculate total field vector */ Near_Field_Total( ex, ey, ez, nfeh, idx ); /* Save field point co-ordinates */ near_field.px[idx] = (double)xob; near_field.py[idx] = (double)yob; near_field.pz[idx] = (double)zob; /* Find max distance from xyz origin */ r = sqrt( near_field.px[idx] * near_field.px[idx] + near_field.py[idx] * near_field.py[idx] + near_field.pz[idx] * near_field.pz[idx] ); if( near_field.r_max < r ) near_field.r_max = r; tmp1= cabs(ex); tmp2= cang (ex); tmp3= cabs(ey); tmp4= cang (ey); tmp5= cabs(ez); tmp6= cang (ez); if( nfeh == 1 ) /* Magnetic field */ { near_field.hx[idx] = (double)tmp1; near_field.hy[idx] = (double)tmp3; near_field.hz[idx] = (double)tmp5; near_field.fhx[idx] = (double)(tmp2 * TA); near_field.fhy[idx] = (double)(tmp4 * TA); near_field.fhz[idx] = (double)(tmp6 * TA); } else /* Electric field */ { near_field.ex[idx] = (double)tmp1; near_field.ey[idx] = (double)tmp3; near_field.ez[idx] = (double)tmp5; near_field.fex[idx] = (double)(tmp2 * TA); near_field.fey[idx] = (double)(tmp4 * TA); near_field.fez[idx] = (double)(tmp6 * TA); } idx++; } /* for( kk = 0; kk < fpat.nrx; kk++ ) */ } /* for( j = 0; j < fpat.nry; j++ ) */ } /* for( i = 0; i < fpat.nrz; i++ ) */ /* Signal new valid near field data */ near_field.newer = near_field.valid = 1; /* Signal new E/H pattern data */ SetFlag( DRAW_NEW_EHFIELD ); return; } /*-----------------------------------------------------------------------*/ /* nhfld computes the near field at specified points in space after */ /* the structure currents have been computed. */ void nhfld( double xob, double yob, double zob, complex double *hx, complex double *hy, complex double *hz ) { int i, jc; double ax, zp; complex double acx, bcx, ccx; *hx=CPLX_00; *hy=CPLX_00; *hz=CPLX_00; ax=0.0; if( data.n != 0) { for( i = 0; i < data.n; i++ ) { dataj.xj= xob- data.x[i]; dataj.yj= yob- data.y[i]; dataj.zj= zob- data.z[i]; zp= data.cab[i]* dataj.xj+ data.sab[i] * dataj.yj+ data.salp[i]* dataj.zj; if( fabs( zp) > 0.5001* data.si[i]) continue; zp= dataj.xj* dataj.xj+ dataj.yj* dataj.yj + dataj.zj* dataj.zj- zp* zp; dataj.xj= data.bi[i]; if( zp > 0.9* dataj.xj* dataj.xj) continue; ax= dataj.xj; break; } for( i = 0; i < data.n; i++ ) { dataj.s= data.si[i]; dataj.b= data.bi[i]; dataj.xj= data.x[i]; dataj.yj= data.y[i]; dataj.zj= data.z[i]; dataj.cabj= data.cab[i]; dataj.sabj= data.sab[i]; dataj.salpj= data.salp[i]; hsfld( xob, yob, zob, ax); acx= cmplx( crnt.air[i], crnt.aii[i]); bcx= cmplx( crnt.bir[i], crnt.bii[i]); ccx= cmplx( crnt.cir[i], crnt.cii[i]); *hx += dataj.exk* acx+ dataj.exs* bcx+ dataj.exc* ccx; *hy += dataj.eyk* acx+ dataj.eys* bcx+ dataj.eyc* ccx; *hz += dataj.ezk* acx+ dataj.ezs* bcx+ dataj.ezc* ccx; } if( data.m == 0) return; } /* if( data.n != 0) */ jc= data.n-1; for( i = 0; i < data.m; i++ ) { dataj.s= data.pbi[i]; dataj.xj= data.px[i]; dataj.yj= data.py[i]; dataj.zj= data.pz[i]; dataj.t1xj= data.t1x[i]; dataj.t1yj= data.t1y[i]; dataj.t1zj= data.t1z[i]; dataj.t2xj= data.t2x[i]; dataj.t2yj= data.t2y[i]; dataj.t2zj= data.t2z[i]; hintg( xob, yob, zob); jc += 3; acx= dataj.t1xj* crnt.cur[jc-2]+ dataj.t1yj * crnt.cur[jc-1]+ dataj.t1zj* crnt.cur[jc]; bcx= dataj.t2xj* crnt.cur[jc-2]+ dataj.t2yj * crnt.cur[jc-1]+ dataj.t2zj* crnt.cur[jc]; *hx= *hx+ acx* dataj.exk+ bcx* dataj.exs; *hy= *hy+ acx* dataj.eyk+ bcx* dataj.eys; *hz= *hz+ acx* dataj.ezk+ bcx* dataj.ezs; } return; } /*-----------------------------------------------------------------------*/ /* integrate over patches at wire connection point */ void pcint( double xi, double yi, double zi, double cabi, double sabi, double salpi, complex double *e ) { int nint, i1, i2; double d, ds, da, gcon, fcon, xxj, xyj, xzj, xs, s1; double xss, yss, zss, s2x, s2, g1, g2, g3, g4, f2, f1; complex double e1, e2, e3, e4, e5, e6, e7, e8, e9; nint = 10; d= sqrt( dataj.s)*.5; ds=4.0* d/ (double) nint; da= ds* ds; gcon=1.0/ dataj.s; fcon=1.0/(2.0* TP* d); xxj= dataj.xj; xyj= dataj.yj; xzj= dataj.zj; xs= dataj.s; dataj.s= da; s1= d+ ds*.5; xss= dataj.xj+ s1*( dataj.t1xj+ dataj.t2xj); yss= dataj.yj+ s1*( dataj.t1yj+ dataj.t2yj); zss= dataj.zj+ s1*( dataj.t1zj+ dataj.t2zj); s1= s1+ d; s2x= s1; e1=CPLX_00; e2=CPLX_00; e3=CPLX_00; e4=CPLX_00; e5=CPLX_00; e6=CPLX_00; e7=CPLX_00; e8=CPLX_00; e9=CPLX_00; for( i1 = 0; i1 < nint; i1++ ) { s1= s1- ds; s2= s2x; xss= xss- ds* dataj.t1xj; yss= yss- ds* dataj.t1yj; zss= zss- ds* dataj.t1zj; dataj.xj= xss; dataj.yj= yss; dataj.zj= zss; for( i2 = 0; i2 < nint; i2++ ) { s2= s2- ds; dataj.xj= dataj.xj- ds* dataj.t2xj; dataj.yj= dataj.yj- ds* dataj.t2yj; dataj.zj= dataj.zj- ds* dataj.t2zj; unere( xi, yi, zi); dataj.exk= dataj.exk* cabi+ dataj.eyk * sabi+ dataj.ezk* salpi; dataj.exs= dataj.exs* cabi+ dataj.eys * sabi+ dataj.ezs* salpi; g1=( d+ s1)*( d+ s2)* gcon; g2=( d- s1)*( d+ s2)* gcon; g3=( d- s1)*( d- s2)* gcon; g4=( d+ s1)*( d- s2)* gcon; f2=( s1* s1+ s2* s2)* TP; f1= s1/ f2-( g1- g2- g3+ g4)* fcon; f2= s2/ f2-( g1+ g2- g3- g4)* fcon; e1= e1+ dataj.exk* g1; e2= e2+ dataj.exk* g2; e3= e3+ dataj.exk* g3; e4= e4+ dataj.exk* g4; e5= e5+ dataj.exs* g1; e6= e6+ dataj.exs* g2; e7= e7+ dataj.exs* g3; e8= e8+ dataj.exs* g4; e9= e9+ dataj.exk* f1+ dataj.exs* f2; } /* for( i2 = 0; i2 < nint; i2++ ) */ } /* for( i1 = 0; i1 < nint; i1++ ) */ e[0]= e1; e[1]= e2; e[2]= e3; e[3]= e4; e[4]= e5; e[5]= e6; e[6]= e7; e[7]= e8; e[8]= e9; dataj.xj= xxj; dataj.yj= xyj; dataj.zj= xzj; dataj.s= xs; return; } /*-----------------------------------------------------------------------*/ /* calculates the electric field due to unit current */ /* in the t1 and t2 directions on a patch */ void unere( double xob, double yob, double zob ) { double zr, t1zr, t2zr, rx, ry, rz, r, tt1; double tt2, rt, xymag, px, py, cth, r2; complex double er, q1, q2, rrv, rrh, edp; zr= dataj.zj; t1zr= dataj.t1zj; t2zr= dataj.t2zj; if( dataj.ipgnd == 2) { zr= -zr; t1zr= -t1zr; t2zr= -t2zr; } rx= xob- dataj.xj; ry= yob- dataj.yj; rz= zob- zr; r2= rx* rx+ ry* ry+ rz* rz; if( r2 <= 1.0e-20) { dataj.exk=CPLX_00; dataj.eyk=CPLX_00; dataj.ezk=CPLX_00; dataj.exs=CPLX_00; dataj.eys=CPLX_00; dataj.ezs=CPLX_00; return; } r= sqrt( r2); tt1= -TP* r; tt2= tt1* tt1; rt= r2* r; er= cmplx( sin( tt1),- cos( tt1))*( CONST2* dataj.s); q1= cmplx( tt2-1.0, tt1)* er/ rt; q2= cmplx(3.0- tt2,-3.0* tt1)* er/( rt* r2); er = q2*( dataj.t1xj* rx+ dataj.t1yj* ry+ t1zr* rz); dataj.exk= q1* dataj.t1xj+ er* rx; dataj.eyk= q1* dataj.t1yj+ er* ry; dataj.ezk= q1* t1zr+ er* rz; er= q2*( dataj.t2xj* rx+ dataj.t2yj* ry+ t2zr* rz); dataj.exs= q1* dataj.t2xj+ er* rx; dataj.eys= q1* dataj.t2yj+ er* ry; dataj.ezs= q1* t2zr+ er* rz; if( dataj.ipgnd == 1) return; if( gnd.iperf == 1) { dataj.exk= -dataj.exk; dataj.eyk= -dataj.eyk; dataj.ezk= -dataj.ezk; dataj.exs= -dataj.exs; dataj.eys= -dataj.eys; dataj.ezs= -dataj.ezs; return; } xymag= sqrt( rx* rx+ ry* ry); if( xymag <= 1.0e-6) { px=0.0; py=0.0; cth=1.0; rrv=CPLX_10; } else { px= -ry/ xymag; py= rx/ xymag; cth= rz/ sqrt( xymag* xymag+ rz* rz); rrv= csqrt(1.0- gnd.zrati* gnd.zrati*(1.0- cth* cth)); } rrh= gnd.zrati* cth; rrh=( rrh- rrv)/( rrh+ rrv); rrv= gnd.zrati* rrv; rrv=-( cth- rrv)/( cth+ rrv); edp=( dataj.exk* px+ dataj.eyk* py)*( rrh- rrv); dataj.exk= dataj.exk* rrv+ edp* px; dataj.eyk= dataj.eyk* rrv+ edp* py; dataj.ezk= dataj.ezk* rrv; edp=( dataj.exs* px+ dataj.eys* py)*( rrh- rrv); dataj.exs= dataj.exs* rrv+ edp* px; dataj.eys= dataj.eys* rrv+ edp* py; dataj.ezs= dataj.ezs* rrv; return; } /*-----------------------------------------------------------------------*/ /* Near_Field_Total() * * Calculates the value of Total Near Field vector */ void Near_Field_Total( complex double ex, complex double ey, complex double ez, int nfeh, int idx ) { /* Display a time-frozen "snapshot" of near field */ if( isFlagSet(NEAREH_SNAPSHOT) ) { if( nfeh == 1 ) /* Magnetic field */ { /* Near magnetic field components */ near_field.hrx[idx] = (double)creal(ex); near_field.hry[idx] = (double)creal(ey); near_field.hrz[idx] = (double)creal(ez); /* Near total magnetic field vector*/ near_field.hr[idx] = sqrt( near_field.hrx[idx] * near_field.hrx[idx] + near_field.hry[idx] * near_field.hry[idx] + near_field.hrz[idx] * near_field.hrz[idx] ); if( near_field.max_hr < near_field.hr[idx] ) near_field.max_hr = near_field.hr[idx]; } else /* Electric field */ { /* Near electric field components */ /* Near electric field components */ near_field.erx[idx] = (double)creal(ex); near_field.ery[idx] = (double)creal(ey); near_field.erz[idx] = (double)creal(ez); /* Near total electric field vector */ near_field.er[idx] = sqrt( near_field.erx[idx] * near_field.erx[idx] + near_field.ery[idx] * near_field.ery[idx] + near_field.erz[idx] * near_field.erz[idx] ); if( near_field.max_er < near_field.er[idx] ) near_field.max_er = near_field.er[idx]; } /* if( nfeh == 1 ) */ } /* if( isFlagSet(NEAREH_SNAPSHOT) ) */ else /* Display Total near field vector peak */ { double exm, eym, ezm, /* Near field magnitude in x, y, z */ exm2, eym2, ezm2, /* Near field magnitude^2 in x, y, z */ fx, fy, fz, /* Time phase of near field vectors */ fx2, fy2, fz2, /* Time phase of near field vectors*2 */ cp, sp, tp, wt; /* Some values needed in calculations */ exm = (double)cabs(ex); eym = (double)cabs(ey); ezm = (double)cabs(ez); /* Near total electric field vector */ fx = (double)cang(ex)/(double)TD; fy = (double)cang(ey)/(double)TD; fz = (double)cang(ez)/(double)TD; fx2 = fx * 2.0; fy2 = fy * 2.0; fz2 = fz * 2.0; exm2 = exm*exm; eym2 = eym*eym; ezm2 = ezm*ezm; cp = exm2*cos(fx2) + eym2*cos(fy2) + ezm2*cos(fz2); sp = exm2*sin(fx2) + eym2*sin(fy2) + ezm2*sin(fz2); tp = sqrt(cp*cp + sp*sp); wt = atan2(-sp, cp)/2.0; if( nfeh == 1 ) /* Magnetic field */ { /* Near magnetic field components */ near_field.hrx[idx] = exm * cos(wt + fx); near_field.hry[idx] = eym * cos(wt + fy); near_field.hrz[idx] = ezm * cos(wt + fz); /* Near total magnetic field vector, peak value */ near_field.hr[idx] = sqrt( (exm2 + eym2 + ezm2 + tp)/2.0 ); if( near_field.max_hr < near_field.hr[idx] ) near_field.max_hr = near_field.hr[idx]; } else /* Electric field */ { /* Near electric field components */ near_field.erx[idx] = exm * cos(wt + fx); near_field.ery[idx] = eym * cos(wt + fy); near_field.erz[idx] = ezm * cos(wt + fz); /* Near total electric field vector, peak value */ near_field.er[idx] = sqrt( (exm2 + eym2 + ezm2 + tp)/2.0 ); if( near_field.max_er < near_field.er[idx] ) near_field.max_er = near_field.er[idx]; } } } /* Near_Field_Total() */ /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/fields.h000066400000000000000000000022011257141547200147530ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef FIELDS_H #define FIELDS_H 1 #include "common.h" #define TPJ (0.0+I*6.283185308) #define PI8 25.13274123 #define FPI 12.56637062 #define CONST2 4.771341188 /* common /tmi/ */ typedef struct { int ij; double zpk, rkb2; } tmi_t; /*common /tmh/ */ typedef struct { double zpka, rhks; } tmh_t; #endif xnec2c-3.4/src/fork.c000066400000000000000000000467401257141547200144610ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* fork.c * * Functions for forking xnec2c in multiprocessor systems */ #include "fork.h" #include "shared.h" /*-----------------------------------------------------------------------*/ /* Child_Process() * * Destination of child processes, handles data * transfers between parent and children via pipes */ void Child_Process( int num_child ) __attribute__ ((noreturn)); void Child_Process( int num_child ) { ssize_t retval; /* Return from select()/read() etc */ char cmnd[8]; /* Command string received from parent */ char *buff; /* Passes address of variables to read()/write() */ size_t cnt; /* Size of data buffers for read()/write() */ /* Close unwanted pipe ends */ close( forked_proc_data[num_child]->pnt2child_pipe[WRITE] ); close( forked_proc_data[num_child]->child2pnt_pipe[READ] ); /* Watch read/write pipe for i/o */ FD_ZERO( &forked_proc_data[num_child]->read_fds ); FD_SET( forked_proc_data[num_child]->pnt2child_pipe[READ], &forked_proc_data[num_child]->read_fds ); FD_ZERO( &forked_proc_data[num_child]->write_fds ); FD_SET( forked_proc_data[num_child]->child2pnt_pipe[WRITE], &forked_proc_data[num_child]->write_fds ); /* Loop around select() in Read_Pipe() waiting for commands/data */ while( TRUE ) { retval = Read_Pipe( num_child, cmnd, 7, TRUE ); cmnd[retval]='\0'; switch( Fork_Command(cmnd) ) { case INFILE: /* Read input file */ retval = Read_Pipe( num_child, infile, 80, FALSE ); infile[retval] = '\0'; Child_Input_File(); break; case FRQDATA: /* Calculate currents and pass on */ /* Get new frequency */ buff = (char *)&calc_data.fmhz; cnt = sizeof( double ); Read_Pipe( num_child, buff, (ssize_t)cnt, TRUE ); /* Frequency buffers in children * are for current frequency only */ calc_data.fstep = 0; /* Clear "last-used-frequency" buffer */ save.last_freq = 0.0; /* Set flags */ SetFlag( FREQ_LOOP_RUNNING ); /* Calculate freq data and pass to parent */ New_Frequency(); Pass_Freq_Data(); break; case EHFIELD: /* Calcualte near field E/H data */ { /* Get near field flags */ char flag; /* Set near field flags */ cnt = sizeof( flag ); Read_Pipe( num_child, &flag, (ssize_t)cnt, TRUE ); if( flag & E_HFIELD ) SetFlag( DRAW_EHFIELD ); else ClearFlag( DRAW_EHFIELD ); if( flag & SNAPSHOT ) SetFlag( NEAREH_SNAPSHOT ); else ClearFlag( NEAREH_SNAPSHOT ); if( flag & EFIELD ) SetFlag( DRAW_EFIELD ); else ClearFlag( DRAW_EFIELD ); if( flag & HFIELD ) SetFlag( DRAW_HFIELD ); else ClearFlag( DRAW_HFIELD ); } } /* switch( Command(cmnd) ) */ } /* while( TRUE ) */ } /* Child_Process() */ /*-----------------------------------------------------------------------*/ /* Child_Input_File() * * Opens NEC2 input file for child processes */ void Child_Input_File( void ) { /* Close open files if any */ Close_File( &input_fp ); /* Open NEC2 input file */ Open_File( &input_fp, infile, "r" ); /* Read input file */ ClearFlag( ALL_FLAGS ); SetFlag( INPUT_PENDING ); Read_Comments(); Read_Geometry(); Read_Commands(); ClearFlag( INPUT_PENDING ); /* Initialize xnec2c child */ save.last_freq = 0.0; crnt.newer = crnt.valid = 0; } /* Child_Input_FIle() */ /*------------------------------------------------------------------------*/ /* Fork_Command() * * Identifies a command srting */ int Fork_Command( const char *cdstr ) { int idx; for( idx = 0; idx < NUM_FKCMNDS; idx++ ) if( strcmp(fork_commands[idx], cdstr) == 0 ) break; return( idx ); } /* Fork_Command() */ /*------------------------------------------------------------------------*/ /* Read_Pipe() * * Reads data from a pipe (child and parent processes) */ ssize_t Read_Pipe( int idx, char *str, ssize_t len, gboolean err ) { ssize_t retval; int pipefd; if(CHILD) pipefd = forked_proc_data[idx]->pnt2child_pipe[READ]; else pipefd = forked_proc_data[idx]->child2pnt_pipe[READ]; retval = select( 1024, &forked_proc_data[idx]->read_fds, NULL, NULL, NULL ); if( retval == -1 ) { perror( "xnec2c: select()" ); _exit(0); } retval = read( pipefd, str, (size_t)len ); if( (retval == -1) || ((retval != len) && err ) ) { perror( "xnec2c: Read_Pipe(): read()" ); fprintf( stderr, "xnec2c: Read_Pipe(): child %d length %d return %d\n", idx, (int)len, (int)retval ); _exit(0); } return( retval ); } /* Read_Pipe() */ /*------------------------------------------------------------------------*/ /* Write_Pipe() * * Writes data to a pipe (child and parent processes) */ ssize_t Write_Pipe( int idx, char *str, ssize_t len, gboolean err ) { ssize_t retval; int pipefd; if( CHILD ) pipefd = forked_proc_data[idx]->child2pnt_pipe[WRITE]; else pipefd = forked_proc_data[idx]->pnt2child_pipe[WRITE]; retval = select( 1024, NULL, &forked_proc_data[idx]->write_fds, NULL, NULL ); if( retval == -1 ) { perror( "xnec2c: select()" ); _exit(0); } retval = write( pipefd, str, (size_t)len ); if( (retval == -1) || ((retval != len) && err) ) { perror( "xnec2c: write()" ); _exit(0); } usleep(2); return( retval ); } /* Write_Pipe() */ /*------------------------------------------------------------------------*/ /* PRead_Pipe() * * Reads data from a pipe (used by parent process) */ ssize_t PRead_Pipe( int idx, char *str, ssize_t len, gboolean err ) { ssize_t retval; retval = read( forked_proc_data[idx]->child2pnt_pipe[READ], str, (size_t)len ); if( (retval == -1) || ((retval != len) && err ) ) { perror( "xnec2c: PRead_Pipe(): read()" ); _exit(0); } return( retval ); } /* PRead_Pipe() */ /*------------------------------------------------------------------------*/ /* Pass_Freq_Data() * * Passes frequency-dependent data (current, charge density, * input impedances etc) from child processes to parent. */ void Pass_Freq_Data( void ) { char *buff = NULL, flag; size_t cnt, buff_size; /*** Total of bytes to read/write thru pipe ***/ buff_size = /* Current & charge data (a, b, c, ir & ii) */ (size_t)(6 * data.npm) * sizeof( double ) + /* Complex current (crnt.cur) */ (size_t)data.np3m * sizeof( complex double ) + /* newer and valid flags */ 2 * sizeof(char) + /* Impedance data */ 4 * sizeof(double) + /* Network data */ sizeof(complex double); /* Radiation pattern data if enabled */ if( isFlagSet(ENABLE_RDPAT) ) { buff_size += /* Gain total, tilt, axial ratio */ (size_t)(3 * fpat.nph * fpat.nth) * sizeof(double) + /* max & min gain, tht & phi angles */ (size_t)(4 * NUM_POL) * sizeof(double) + /* max and min gain index */ (size_t)(2 * NUM_POL) * sizeof(int) + /* Polarization sens */ (size_t)(fpat.nph * fpat.nth) * sizeof(int) + /* New pattern flag */ sizeof( char ); } /* Near field data if enabled */ if( isFlagSet(DRAW_EHFIELD) ) { /* Notify parent to read near field data */ Write_Pipe( num_child_procs, "nfeh", 4, TRUE ); /* Near E field data */ if( fpat.nfeh & NEAR_EFIELD ) buff_size += (size_t)( 10 * fpat.nrx * fpat.nry * fpat.nrz + 1 ) * sizeof(double); /* Near H field data */ if( fpat.nfeh & NEAR_HFIELD ) buff_size += (size_t)( 10 * fpat.nrx * fpat.nry * fpat.nrz + 1 ) * sizeof(double); /* Co-ordinates of field points */ buff_size += (size_t)( 3 * fpat.nrx * fpat.nry * fpat.nrz + 1 ) * sizeof(double) + /* newer & valid flags */ 2 * sizeof(char); } else /* Notify parent not to read near field data */ Write_Pipe( num_child_procs, "noeh", 4, TRUE ); /* Allocate data buffers */ mem_alloc( (void **)&buff, buff_size, "in fork.c" ); /* Clear buffer index in this function */ Mem_Copy( buff, buff, 0, WRITE ); /* Pass on current and charge data */ cnt = (size_t)data.npm * sizeof( double ); Mem_Copy( buff, (char *)crnt.air, cnt, WRITE ); Mem_Copy( buff, (char *)crnt.aii, cnt, WRITE ); Mem_Copy( buff, (char *)crnt.bir, cnt, WRITE ); Mem_Copy( buff, (char *)crnt.bii, cnt, WRITE ); Mem_Copy( buff, (char *)crnt.cir, cnt, WRITE ); Mem_Copy( buff, (char *)crnt.cii, cnt, WRITE ); cnt = (size_t)data.np3m * sizeof( complex double ); Mem_Copy( buff, (char *)crnt.cur, cnt, WRITE ); cnt = sizeof( char ); Mem_Copy( buff, &crnt.newer, cnt, WRITE ); Mem_Copy( buff, &crnt.valid, cnt, WRITE ); /* Impedance data */ cnt = sizeof(double); Mem_Copy( buff, (char *)&impedance_data.zreal[0], cnt, WRITE ); Mem_Copy( buff, (char *)&impedance_data.zimag[0], cnt, WRITE ); Mem_Copy( buff, (char *)&impedance_data.zmagn[0], cnt, WRITE ); Mem_Copy( buff, (char *)&impedance_data.zphase[0], cnt, WRITE ); /* Network data */ cnt = sizeof(complex double); Mem_Copy( buff, (char *)&netcx.zped, cnt, WRITE ); /* Pass on radiation pattern data if enabled */ if( isFlagSet(ENABLE_RDPAT) ) { cnt = (size_t)(fpat.nph * fpat.nth) * sizeof(double); Mem_Copy( buff, (char *)rad_pattern[0].gtot, cnt, WRITE ); Mem_Copy( buff, (char *)rad_pattern[0].tilt, cnt, WRITE ); Mem_Copy( buff, (char *)rad_pattern[0].axrt, cnt, WRITE ); cnt = (size_t)NUM_POL * sizeof(double); Mem_Copy( buff, (char *)rad_pattern[0].max_gain, cnt, WRITE ); Mem_Copy( buff, (char *)rad_pattern[0].min_gain, cnt, WRITE ); Mem_Copy( buff, (char *)rad_pattern[0].max_gain_tht, cnt, WRITE ); Mem_Copy( buff, (char *)rad_pattern[0].max_gain_phi, cnt, WRITE ); cnt = (size_t)NUM_POL * sizeof(int); Mem_Copy( buff, (char *)rad_pattern[0].max_gain_idx, cnt, WRITE ); Mem_Copy( buff, (char *)rad_pattern[0].min_gain_idx, cnt, WRITE ); cnt = (size_t)(fpat.nph * fpat.nth) * sizeof(int); Mem_Copy( buff, (char *)rad_pattern[0].sens, cnt, WRITE ); if( isFlagSet(DRAW_NEW_RDPAT) ) flag = 1; else flag = 0; cnt = sizeof( char ); Mem_Copy( buff, &flag, cnt, WRITE ); } /* Near field data */ if( isFlagSet(DRAW_EHFIELD) ) { /* Magnitude and phase of E field */ if( fpat.nfeh & NEAR_EFIELD ) { cnt = (size_t)(fpat.nrx * fpat.nry * fpat.nrz) * sizeof(double); Mem_Copy( buff, (char *)near_field.ex, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.ey, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.ez, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.fex, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.fey, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.fez, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.erx, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.ery, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.erz, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.er, cnt, WRITE ); cnt = sizeof(double); Mem_Copy( buff, (char *)&near_field.max_er, cnt, WRITE ); } /* Magnitude and phase of H fields */ if( fpat.nfeh & NEAR_HFIELD ) { cnt = (size_t)(fpat.nrx * fpat.nry * fpat.nrz) * sizeof(double); Mem_Copy( buff, (char *)near_field.hx, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.hy, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.hz, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.fhx, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.fhy, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.fhz, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.hrx, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.hry, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.hrz, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.hr, cnt, WRITE ); cnt = sizeof(double); Mem_Copy( buff, (char *)&near_field.max_hr, cnt, WRITE ); } /* Co-ordinates of field points */ cnt = (size_t)(fpat.nrx * fpat.nry * fpat.nrz) * sizeof(double); Mem_Copy( buff, (char *)near_field.px, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.py, cnt, WRITE ); Mem_Copy( buff, (char *)near_field.pz, cnt, WRITE ); cnt = sizeof(double); Mem_Copy( buff, (char *)&near_field.r_max, cnt, WRITE ); cnt = sizeof( char ); Mem_Copy( buff, &near_field.newer, cnt, WRITE ); Mem_Copy( buff, &near_field.valid, cnt, WRITE ); } /* if( isFlagSet(DRAW_EHFIELD) ) */ /* Pass data accumulated in buffer if child */ Write_Pipe( num_child_procs, buff, (ssize_t)buff_size, TRUE ); free_ptr( (void **)&buff ); } /* Pass_Freq_Data() */ /*------------------------------------------------------------------------*/ /* Get_Freq_Data() * * Gets frequency-dependent data (current, charge density, * input impedances etc) from child processes. */ void Get_Freq_Data( int idx, int fstep ) { char *buff = NULL, flag; char nfeh[5]; size_t cnt, buff_size; /*** Total of bytes to read/write thru pipe ***/ buff_size = /* Current & charge data (a, b, c ir & ii) */ (size_t)(6 * data.npm) * sizeof( double ) + /* Complex current (crnt.cur) */ (size_t)data.np3m * sizeof( complex double ) + /* newer and valid flags */ 2 * sizeof(char) + /* Impedance data */ 4 * sizeof(double) + /* Network data */ sizeof(complex double); /* Radiation pattern data if enabled */ if( isFlagSet(ENABLE_RDPAT) ) { buff_size += /* Gain total, tilt, axial ratio */ (size_t)(3 * fpat.nph * fpat.nth) * sizeof(double) + /* max & min gain, tht & phi angles */ (size_t)(4 * NUM_POL) * sizeof(double) + /* max and min gain index */ (size_t)(2 * NUM_POL) * sizeof(int) + /* Polarization sens */ (size_t)(fpat.nph * fpat.nth) * sizeof(int) + /* New pattern flag */ sizeof( char ); } /* Notification to read near field data */ PRead_Pipe( idx, nfeh, 4, TRUE ); nfeh[4] = '\0'; /* Get near field data if enabled */ if( strcmp(nfeh, "nfeh") == 0 ) { /* Near E field data */ if( fpat.nfeh & NEAR_EFIELD ) buff_size += (size_t)( 10 * fpat.nrx * fpat.nry * fpat.nrz + 1 ) * sizeof(double); /* Near H field data */ if( fpat.nfeh & NEAR_HFIELD ) buff_size += (size_t)( 10 * fpat.nrx * fpat.nry * fpat.nrz + 1 ) * sizeof(double); /* Co-ordinates of field points */ buff_size += (size_t)( 3 * fpat.nrx * fpat.nry * fpat.nrz + 1 ) * sizeof(double) + /* newer & valid flags */ 2 * sizeof(char); } /* Allocate data buffer */ mem_alloc( (void **)&buff, buff_size, "in fork.c" ); /* Clear buffer index in this function */ Mem_Copy( buff, buff, 0, READ ); /* Get data accumulated in buffer if child */ PRead_Pipe( idx, buff, (ssize_t)buff_size, TRUE ); /* Get current and charge data */ cnt = (size_t)data.npm * sizeof( double ); Mem_Copy( buff, (char *)crnt.air, cnt, READ ); Mem_Copy( buff, (char *)crnt.aii, cnt, READ ); Mem_Copy( buff, (char *)crnt.bir, cnt, READ ); Mem_Copy( buff, (char *)crnt.bii, cnt, READ ); Mem_Copy( buff, (char *)crnt.cir, cnt, READ ); Mem_Copy( buff, (char *)crnt.cii, cnt, READ ); cnt = (size_t)data.np3m * sizeof( complex double ); Mem_Copy( buff, (char *)crnt.cur, cnt, READ ); cnt = sizeof( char ); Mem_Copy( buff, &crnt.newer, cnt, READ ); Mem_Copy( buff, &crnt.valid, cnt, READ ); /* Get impedance data */ cnt = sizeof(double); Mem_Copy( buff, (char *)&impedance_data.zreal[fstep], cnt, READ ); Mem_Copy( buff, (char *)&impedance_data.zimag[fstep], cnt, READ ); Mem_Copy( buff, (char *)&impedance_data.zmagn[fstep], cnt, READ ); Mem_Copy( buff, (char *)&impedance_data.zphase[fstep], cnt, READ ); /* Get network data */ cnt = sizeof(complex double); Mem_Copy( buff, (char *)&netcx.zped, cnt, READ ); /* Get radiation pattern data if enabled */ if( isFlagSet(ENABLE_RDPAT) ) { cnt = (size_t)(fpat.nph * fpat.nth) * sizeof(double); Mem_Copy( buff, (char *)rad_pattern[fstep].gtot, cnt, READ ); Mem_Copy( buff, (char *)rad_pattern[fstep].tilt, cnt, READ ); Mem_Copy( buff, (char *)rad_pattern[fstep].axrt, cnt, READ ); cnt = (size_t)NUM_POL * sizeof(double); Mem_Copy( buff, (char *)rad_pattern[fstep].max_gain, cnt, READ ); Mem_Copy( buff, (char *)rad_pattern[fstep].min_gain, cnt, READ ); Mem_Copy( buff, (char *)rad_pattern[fstep].max_gain_tht, cnt, READ ); Mem_Copy( buff, (char *)rad_pattern[fstep].max_gain_phi, cnt, READ ); cnt = (size_t)NUM_POL * sizeof(int); Mem_Copy( buff, (char *)rad_pattern[fstep].max_gain_idx, cnt, READ ); Mem_Copy( buff, (char *)rad_pattern[fstep].min_gain_idx, cnt, READ ); cnt = (size_t)(fpat.nph * fpat.nth) * sizeof(int); Mem_Copy( buff, (char *)rad_pattern[fstep].sens, cnt, READ ); Mem_Copy( buff, &flag, sizeof(flag), READ ); if( flag ) SetFlag( DRAW_NEW_RDPAT ); } /* Get near field data if signaled by child */ if( strcmp(nfeh, "nfeh") == 0 ) { /* Magnitude and phase of E field */ if( fpat.nfeh & NEAR_EFIELD ) { cnt = (size_t)(fpat.nrx * fpat.nry * fpat.nrz) * sizeof(double); Mem_Copy( buff, (char *)near_field.ex, cnt, READ ); Mem_Copy( buff, (char *)near_field.ey, cnt, READ ); Mem_Copy( buff, (char *)near_field.ez, cnt, READ ); Mem_Copy( buff, (char *)near_field.fex, cnt, READ ); Mem_Copy( buff, (char *)near_field.fey, cnt, READ ); Mem_Copy( buff, (char *)near_field.fez, cnt, READ ); Mem_Copy( buff, (char *)near_field.erx, cnt, READ ); Mem_Copy( buff, (char *)near_field.ery, cnt, READ ); Mem_Copy( buff, (char *)near_field.erz, cnt, READ ); Mem_Copy( buff, (char *)near_field.er, cnt, READ ); cnt = sizeof(double); Mem_Copy( buff, (char *)&near_field.max_er, cnt, READ ); } /* Magnitude and phase of H fields */ if( fpat.nfeh & NEAR_HFIELD ) { cnt = (size_t)(fpat.nrx * fpat.nry * fpat.nrz) * sizeof(double); Mem_Copy( buff, (char *)near_field.hx, cnt, READ ); Mem_Copy( buff, (char *)near_field.hy, cnt, READ ); Mem_Copy( buff, (char *)near_field.hz, cnt, READ ); Mem_Copy( buff, (char *)near_field.fhx, cnt, READ ); Mem_Copy( buff, (char *)near_field.fhy, cnt, READ ); Mem_Copy( buff, (char *)near_field.fhz, cnt, READ ); Mem_Copy( buff, (char *)near_field.hrx, cnt, READ ); Mem_Copy( buff, (char *)near_field.hry, cnt, READ ); Mem_Copy( buff, (char *)near_field.hrz, cnt, READ ); Mem_Copy( buff, (char *)near_field.hr, cnt, READ ); cnt = sizeof(double); Mem_Copy( buff, (char *)&near_field.max_hr, cnt, READ ); } /* Co-ordinates of field points */ cnt = (size_t)(fpat.nrx * fpat.nry * fpat.nrz) * sizeof(double); Mem_Copy( buff, (char *)near_field.px, cnt, READ ); Mem_Copy( buff, (char *)near_field.py, cnt, READ ); Mem_Copy( buff, (char *)near_field.pz, cnt, READ ); cnt = sizeof(double); Mem_Copy( buff, (char *)&near_field.r_max, cnt, READ ); cnt = sizeof( char ); Mem_Copy( buff, &near_field.newer, cnt, READ ); Mem_Copy( buff, &near_field.valid, cnt, READ ); } /*if( isFlagSet(DRAW_EHFIELD) ) */ free_ptr( (void **)&buff ); } /* Get_Freq_Data() */ /*------------------------------------------------------------------------*/ /* Mem_Copy() * * Copies between buffers using memcpy() */ void Mem_Copy( char *buff, char *var, size_t cnt, gboolean wrt ) { static int idx; /* Clear idx to buffer */ if( !cnt ) { idx = 0; return; } /* If child process writing data */ if( wrt ) memcpy( &buff[idx], var, cnt ); else /* Parent reading data */ memcpy( var, &buff[idx], cnt ); idx += (int)cnt; } /* Mem_Copy() */ /*------------------------------------------------------------------------*/ xnec2c-3.4/src/fork.h000066400000000000000000000022431257141547200144540ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef FORK_H #define FORK_H 1 #include "common.h" /* Parent/child commands */ #define FORK_CMNDS { "inpfile", "frqdata", "nearehf" } /* Indices for parent/child commands */ enum P2CH_COMND { INFILE = 0, FRQDATA, EHFIELD, NUM_FKCMNDS }; /* Near Field select flags */ #define E_HFIELD 0x01 #define SNAPSHOT 0x02 #define EFIELD 0x04 #define HFIELD 0x08 #endif xnec2c-3.4/src/geom_edit.c000066400000000000000000001754171257141547200154600ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* geom_edit.c * * Structure/Geometry editor functions for xnec2c */ #include "geom_edit.h" #include "shared.h" /*------------------------------------------------------------------------*/ /* Wire_Editor() * * Handles all actions of the wire editor window */ void Wire_Editor( int action ) { /* For looking up spinbuttons */ GtkSpinButton *spin; /* Frame of tapered wire data */ GtkWidget *frame; /* For reading/writing to GW & GC rows */ static GtkTreeIter iter_gw, iter_gc; int idx, idi; static gboolean load = FALSE, /* Enable wire loading (conductivity specified) */ taper = FALSE, /* Editing a tapered wire */ save = FALSE, /* Enable saving of editor data */ busy = FALSE, /* Block callbacks. Must be a better way to do this? */ newpcl = TRUE, /* New percent-of-lambda value */ newrdm = TRUE, /* New diameter ratio value */ newwln = TRUE; /* New wire length value */ /* Float type data, wire conductivity */ static gdouble fv[14], s = 0.0; /* Integer type data */ static gint iv[4]; /* Wire's projection on xyz axes */ gdouble dx, dy, dz; /* Card (row) name */ gchar name[3]; /* Spin button names, int & float data */ gchar *ispin[2] = { "wire_tagnum_spinbutton", "wire_numseg_spinbutton" }; gchar *fspin[14] = { "wire_x1_spinbutton", "wire_y1_spinbutton", "wire_z1_spinbutton", "wire_x2_spinbutton", "wire_y2_spinbutton", "wire_z2_spinbutton", "wire_dia_spinbutton", "wire_rlen_spinbutton", "wire_dia1_spinbutton", "wire_dian_spinbutton", "wire_rdia_spinbutton", "wire_pcl_spinbutton", "wire_len_spinbutton", "wire_res_spinbutton" }; /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, wire_editor) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { /* Clear data not used in GC card */ iv[SPIN_COL_I3] = iv[SPIN_COL_I4] = 0; for( idx = WIRE_RDIA; idx <= WIRE_RES; idx++ ) fv[idx] = 0.0; /* Set GW data to treeview */ Set_Geometry_Data( geom_store, &iter_gw, iv, fv ); /* Set GC card data to treeview if taper */ if( taper ) Set_Geometry_Data( geom_store, &iter_gc, &iv[SPIN_COL_I3], &fv[WIRE_RLEN] ); /* Set wire conductivity (loading card) */ if( load ) Set_Wire_Conductivity( iv[SPIN_COL_I1], s, cmnd_store ); save = load = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Read int data from the wire editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I2; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(wire_editor, ispin[idi]) ); iv[idi] = gtk_spin_button_get_value_as_int( spin ); } /* Read float data from the wire editor */ for( idx = WIRE_X1; idx <= WIRE_RES; idx++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(wire_editor, fspin[idx]) ); fv[idx] = gtk_spin_button_get_value( spin ); } fv[WIRE_DIA] /= 2.0; fv[WIRE_DIA1] /= 2.0; fv[WIRE_DIAN] /= 2.0; /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New wire row(s) to create */ /* Insert a default GE card if list is empty */ Insert_GE_Card( geom_store, &iter_gw ); /* Insert a new blank GW row after a selected row, * if any, otherwise before the last (GE) row */ Insert_Blank_Geometry_Row( geom_treeview, geom_store, &iter_gw, "GW" ); /* Some default values */ iv[SPIN_COL_I1] = ++gbl_tag_num; iv[SPIN_COL_I3] = iv[SPIN_COL_I4] = 0; if( taper ) { /* Insert a new blank GC row if tapered wire */ Insert_Blank_Geometry_Row( geom_treeview, geom_store, &iter_gc, "GC" ); fv[WIRE_DIA] = 0.0; } /* Scroll tree view to bottom */ gtk_adjustment_set_value( geom_adjustment, geom_adjustment->upper ); break; case EDITOR_EDIT: /* Edit a wire row (GW/GC) */ /* Get selected row */ Get_Selected_Row( geom_treeview, geom_store, &iter_gw, name ); iter_gc = iter_gw; /*** Editing a GC card ***/ if( strcmp(name, "GC") == 0 ) { taper = TRUE; /* Get tapered wire data from tree view */ Get_Geometry_Data( geom_store, &iter_gc, &iv[SPIN_COL_I3], &fv[WIRE_RLEN] ); fv[WIRE_RDIA] = fv[WIRE_RLEN]; /* Check for a preceding GW card. * If card is GW, get wire data */ if( Check_Card_Name(geom_store, &iter_gw, PREVIOUS, "GW") ) { Get_Geometry_Data( geom_store, &iter_gw, iv, fv ); /* Warn user if wire radius not 0 */ if( fv[WIRE_DIA] != 0.0 ) stop( _("GC card preceded by GW card\n"\ "with non-zero wire radius"), ERR_OK ); } /* if( strcmp(name, "GC") == 0 ) */ else stop( _("No GW card before GC card"), ERR_OK ); } else /*** Editing a GW card ***/ { taper = FALSE; /* Get wire data from tree view */ Get_Geometry_Data( geom_store, &iter_gw, iv, fv ); /* Get wire conductivity if specified in LD card */ Get_Wire_Conductivity(iv[SPIN_COL_I1], &s, cmnd_store); fv[WIRE_RES] = s; /*** Get tapered wire data if dia = 0 ***/ if( fv[WIRE_DIA] == 0.0 ) { /* If next card is GC, get data */ if( Check_Card_Name(geom_store, &iter_gc, NEXT, "GC") ) { taper = TRUE; /* Get wire taper data from tree view */ Get_Geometry_Data( geom_store, &iter_gc, &iv[SPIN_COL_I3], &fv[WIRE_RLEN] ); fv[WIRE_RDIA] = fv[WIRE_RLEN]; } else stop( _("No GC card after a GW card\n"\ "with a zero wire radius"), ERR_OK ); } /* if( fv[WIRE_DIA] == 0.0 ) */ /* If radius != 0, next card should not be GC */ else if( Check_Card_Name(geom_store, &iter_gc, NEXT, "GC") ) stop( _("GC card follows a GW card\n"\ "with non-zero wire radius"), ERR_OK ); } /* if( strcmp(name, "GC") == 0 ) */ break; case WIRE_EDITOR_TAPR: /* Show taper wire data if button checked */ { /* Wire diameter */ static double diam; /* Read tapered wire checkbutton */ taper = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( lookup_widget(wire_editor, "wire_taper_checkbutton")) ); if( taper ) { /* Set wire dia to 0 */ diam = fv[WIRE_DIA]; fv[WIRE_DIA] = 0.0; /* Insert GC card if valid GW iteration */ if( gtk_list_store_iter_is_valid(geom_store, &iter_gw) ) Insert_Blank_Geometry_Row( geom_treeview, geom_store, &iter_gc, "GC"); } else { /* Restore wire diam */ fv[WIRE_DIA] = diam; /* Remove GC card if valid */ Remove_Row( geom_store, &iter_gc ); } /* if( taper ) */ } save = TRUE; break; case EDITOR_CANCEL: /* Cancel wire editor */ /* Remove cards */ Remove_Row( geom_store, &iter_gw ); if( taper ) Remove_Row( geom_store, &iter_gc ); save = busy = FALSE; return; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; break; case EDITOR_LOAD: /* Wire conductivity specified */ spin = GTK_SPIN_BUTTON( lookup_widget( wire_editor, fspin[WIRE_RES]) ); s = gtk_spin_button_get_value( spin ); if( s > 0.0 ) { save = TRUE; load = TRUE; } else load = FALSE; break; case EDITOR_TAGNUM: /* Tag number edited by user */ gbl_tag_num = iv[SPIN_COL_I1]; save = TRUE; if( s > 0.0 ) load = TRUE; break; case EDITOR_SEGPC: /* Segment length as % of smallest wavelength */ /* Calculate num of segs for given % of lambda */ if( calc_data.mxfrq != 0.0 ) { if( taper && ( fv[WIRE_RLEN] != 1.0) ) /* Taper ratio < 1 */ { double cnt = 1.0 / (fv[WIRE_PCL]/100.0) * (1.0-fv[WIRE_RLEN]); if( cnt < 1.0 ) { double i = ceil( log(1.0-cnt) / log(fv[WIRE_RLEN]) ); iv[SPIN_COL_I2] = (gint)i; } } else { double i = ceil( 100.0 * (fv[WIRE_LEN]/fv[WIRE_PCL]) / ((double)CVEL/calc_data.mxfrq) ); iv[SPIN_COL_I2] = (gint)i; } } newpcl = FALSE; save = TRUE; break; /* Calculate new wire end points on length change */ case WIRE_EDITOR_WLEN: { double l, dl; /* Length of wire's projection on axes */ dx = fv[WIRE_X2]-fv[WIRE_X1]; dy = fv[WIRE_Y2]-fv[WIRE_Y1]; dz = fv[WIRE_Z2]-fv[WIRE_Z1]; /* Wire's length */ l = (gdouble)sqrt( dx*dx + dy*dy + dz*dz ); /* 1/2 of change in wire's length / length */ dl = fv[WIRE_LEN] - l; dl /= 2.0 * l; /* Corresponding change in wire end co-ordinates */ dx *= dl; dy *= dl; dz *= dl; fv[WIRE_X1] -= dx; fv[WIRE_X2] += dx; fv[WIRE_Y1] -= dy; fv[WIRE_Y2] += dy; fv[WIRE_Z1] -= dz; fv[WIRE_Z2] += dz; } newwln = FALSE; save = TRUE; break; case WIRE_EDITOR_RLEN: /* Length taper ratio changed */ fv[WIRE_DIAN] = fv[WIRE_DIA1] * pow(fv[WIRE_RLEN], (double)(iv[SPIN_COL_I2]-1)); /* Nth seg dia */ break; case WIRE_EDITOR_RDIA: /* New diameter taper ratio */ fv[WIRE_DIAN] = fv[WIRE_DIA1] * pow(fv[WIRE_RDIA], (double)(iv[SPIN_COL_I2]-1)); /* Nth seg dia */ newrdm = FALSE; save = TRUE; } /* switch( action ) */ /* Frame of tapered wire data */ frame = lookup_widget(wire_editor, "wire_taperframe"); /* Show taper data if appropriate */ if( taper ) { gtk_widget_show( frame ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( lookup_widget(wire_editor, "wire_taper_checkbutton")), TRUE ); } else { gtk_widget_hide( frame ); gtk_window_resize( GTK_WINDOW(wire_editor), 10, 10 ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( lookup_widget(wire_editor, "wire_taper_checkbutton")), FALSE ); } /*** Calculate wire length ***/ if( newwln ) { /* Length of wire's projection on axes */ dx = fv[WIRE_X2]-fv[WIRE_X1]; dy = fv[WIRE_Y2]-fv[WIRE_Y1]; dz = fv[WIRE_Z2]-fv[WIRE_Z1]; /* Wire's length */ fv[WIRE_LEN] = (gdouble)sqrt( dx*dx + dy*dy + dz*dz ); } else newwln = TRUE; /*** Calculate seg length as % of smallest wavelength ***/ if( (calc_data.mxfrq != 0.0) && newpcl ) { if( taper && (fv[WIRE_RLEN] != 1.0) ) fv[WIRE_PCL] = 100.0 * fv[WIRE_LEN] * (1.0-fv[WIRE_RLEN]) / (1.0-(gdouble)pow(fv[WIRE_RLEN], (gdouble)iv[SPIN_COL_I2])) / ((gdouble)CVEL/calc_data.mxfrq); else fv[WIRE_PCL] = 100.0 * (fv[WIRE_LEN] / (gdouble)iv[SPIN_COL_I2]) / ((gdouble)CVEL/calc_data.mxfrq); } else newpcl = TRUE; /*** Calculate radius taper ratio ***/ if( (iv[SPIN_COL_I2] > 1) && newrdm ) fv[WIRE_RDIA] = pow( fv[WIRE_DIAN]/fv[WIRE_DIA1], 1.0/(double)(iv[SPIN_COL_I2]-1) ); else newrdm = TRUE; /* Write int data to the wire editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I2; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(wire_editor, ispin[idi]) ); gtk_spin_button_set_value( spin, iv[idi] ); } /* Write float data to the wire editor (F1 to F7 and taper) */ fv[WIRE_DIA] *= 2.0; fv[WIRE_DIA1] *= 2.0; fv[WIRE_DIAN] *= 2.0; for( idx = WIRE_X1; idx <= WIRE_RES; idx++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(wire_editor, fspin[idx]) ); gtk_spin_button_set_value( spin, fv[idx] ); } fv[WIRE_DIA] /= 2.0; fv[WIRE_DIA1] /= 2.0; fv[WIRE_DIAN] /= 2.0; /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Wire_Editor() */ /*------------------------------------------------------------------------*/ /* Patch_Editor() * * Handles all actions of the patch editor window */ void Patch_Editor( int action ) { /* For looking up spinbuttons */ GtkSpinButton *spin; /* For reading/writing to SP/SM & SC rows */ static GtkTreeIter iter_sp, iter_sc; int idx, idi; /* Patch type */ static int ptype = PATCH_ARBT; /* Integer type data */ static gint iv[4]; /* Float type data */ static gdouble fv[14]; /* Card (row) name */ static gchar name[3] = "SP"; /* Spin button names, int data */ gchar *ispin[2] = { "patch_nx_spinbutton", "patch_ny_spinbutton", }; /* Spin button names, float data */ gchar *fspin[12] = { "patch_x1_spinbutton", "patch_y1_spinbutton", "patch_z1_spinbutton", "patch_x2_spinbutton", "patch_y2_spinbutton", "patch_z2_spinbutton", "patch_x3_spinbutton", "patch_y3_spinbutton", "patch_z3_spinbutton", "patch_x4_spinbutton", "patch_y4_spinbutton", "patch_z4_spinbutton", }; gchar *rbutton[5] = { "patch_arbitrary_radiobutton", "patch_rectangular_radiobutton", "patch_triangular_radiobutton", "patch_quadrilateral_radiobutton", "patch_surface_radiobutton" }; static gboolean save = FALSE, /* Enable saving of editor data */ busy = FALSE, /* Block callbacks. Must be a better way to do this? */ ptset = FALSE; /* Set patch type radio buttons */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, patch_editor) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { /* Clear data not used in SC card */ iv[SPIN_COL_I3] = iv[SPIN_COL_I4] = 0; fv[UNUSED_F1] = fv[UNUSED_F2] = 0.0; /* Set SP data to treeview */ Set_Geometry_Data( geom_store, &iter_sp, iv, fv ); /* Set SC card data to treeview if non arbitrary */ if( ptype != PATCH_ARBT ) Set_Geometry_Data(geom_store, &iter_sc, &iv[SPIN_COL_I3], &fv[PATCH_X3]); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Set int data from the patch editor (SP card) */ if( ptype != PATCH_SURF ) { iv[SPIN_COL_I1] = 0; /* Not used in SP */ iv[SPIN_COL_I2] = ptype; /* Patch type */ } /* Read int data from the patch editor (SM card) */ else for( idi = SPIN_COL_I1; idi <= SPIN_COL_I2; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(patch_editor, ispin[idi]) ); double i = gtk_spin_button_get_value( spin ); iv[idi] = (gint)i; } /* Read float data from the patch editor */ for( idx = PATCH_X1; idx <= PATCH_Z2; idx++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(patch_editor, fspin[idx]) ); fv[idx] = gtk_spin_button_get_value( spin ); } for( idx = PATCH_X3; idx <= PATCH_Z4; idx++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(patch_editor, fspin[idx-1]) ); fv[idx] = gtk_spin_button_get_value( spin ); } /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New patch to edit, enter some default data */ /* Insert a default GE card if list is empty */ Insert_GE_Card( geom_store, &iter_sp ); /* Insert a new blank SP row after a selected row, * if any, otherwise before the last (GE) row */ Insert_Blank_Geometry_Row( geom_treeview, geom_store, &iter_sp, name ); /* Insert an SC card for non-arbitrary patch */ if( ptype != PATCH_ARBT ) Insert_Blank_Geometry_Row( geom_treeview, geom_store, &iter_sc, "SC" ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( geom_adjustment, geom_adjustment->upper ); ptset = TRUE; break; case EDITOR_EDIT: /* Edit a selected geometry row */ /* Get selected row */ Get_Selected_Row( geom_treeview, geom_store, &iter_sp, name ); iter_sc = iter_sp; /*** Editing an SC card ***/ if( strcmp(name, "SC") == 0 ) { /* Get patch data from SC row in tree view */ Get_Geometry_Data( geom_store, &iter_sc, &iv[SPIN_COL_I3], &fv[PATCH_X3] ); /* Check for a preceding SP | SM card. * If card is SP, get patch data */ if( Check_Card_Name(geom_store, &iter_sp, PREVIOUS, "SP") ) { Get_Geometry_Data( geom_store, &iter_sp, iv, fv ); ptype = iv[SPIN_COL_I2]; /* Warn user if SP card with arbitrary * patch is followed by an SC card */ if( ptype == PATCH_ARBT ) stop( _("SC card preceded by SP card\n"\ "with arbitrary patch type"), ERR_OK ); } /* if( Check_Card_Name(geom_store, &iter_sp, PREVIOUS, "SP") ) */ else /* Look for a previous SM card */ { iter_sp = iter_sc; if( Check_Card_Name(geom_store, &iter_sp, PREVIOUS, "SM") ) { Get_Geometry_Data( geom_store, &iter_sp, iv, fv ); ptype = PATCH_SURF; } else stop( _("No SP or SM card before SC card"), ERR_OK ); } } /* if( strcmp(name, "SC") == 0 ) */ /*** Editing an SP|SM card ***/ else if( strcmp(name, "SP") == 0 ) { /* Get patch data from treeview */ Get_Geometry_Data( geom_store, &iter_sp, iv, fv ); ptype = iv[SPIN_COL_I2]; /*** Get SC card data if patch type non-arbitrary ***/ if( ptype != PATCH_ARBT ) { /* If next card is SC, get data */ if( Check_Card_Name(geom_store, &iter_sc, NEXT, "SC") ) Get_Geometry_Data( geom_store, &iter_sc, &iv[SPIN_COL_I3], &fv[PATCH_X3] ); else { ptype = PATCH_ARBT; stop( _("No SC card after an SP card\n"\ "with non-arbitrary patch type"), ERR_OK ); } } /* if( ptype != PATCH_ARBT ) */ /* If patch type arbitrary, no SC card should follow */ else if( Check_Card_Name(geom_store, &iter_sc, NEXT, "SC") ) stop( _("SC card follows an SP card\n"\ "with arbitrary patch type"), ERR_OK ); } /* if( strcmp(name, "SP") == 0 ) */ else /* SM card */ { /* Get patch data from treeview */ Get_Geometry_Data( geom_store, &iter_sp, iv, fv ); ptype = PATCH_SURF; /* If next card is SC, get data */ if( Check_Card_Name(geom_store, &iter_sc, NEXT, "SC") ) Get_Geometry_Data( geom_store, &iter_sc, &iv[SPIN_COL_I3], &fv[PATCH_X3] ); else stop( _("No SC card after an SM card"), ERR_OK ); } /* if( strcmp(name, "SP") == 0 ) */ ptset = TRUE; break; case EDITOR_CANCEL: /* Cancel patch editor */ /* Remove cards */ Remove_Row( geom_store, &iter_sp ); if( ptype != PATCH_ARBT ) Remove_Row( geom_store, &iter_sc ); save = busy = FALSE; return; case EDITOR_DATA: /* Some editor data changed */ save = TRUE; break; case PATCH_EDITOR_ARBT: /* Arbitary-shaped patch */ ptype = PATCH_ARBT; ptset = FALSE; save = TRUE; for( idx = PATCH_X3; idx <= UNUSED_F2; idx++ ) fv[idx] = 0.0; /* Remove SC card */ Remove_Row( geom_store, &iter_sc ); break; case PATCH_EDITOR_RECT: /* Rectangular patch */ ptype = PATCH_RECT; ptset = FALSE; save = TRUE; for( idx = PATCH_X4; idx <= UNUSED_F2; idx++ ) fv[idx] = 0.0; break; case PATCH_EDITOR_TRIA: /* Triangular patch */ ptype = PATCH_TRIA; ptset = FALSE; save = TRUE; for( idx = PATCH_X4; idx <= UNUSED_F2; idx++ ) fv[idx] = 0.0; break; case PATCH_EDITOR_QUAD: /* Quadrilateral patch */ ptype = PATCH_QUAD; ptset = FALSE; save = TRUE; break; case PATCH_EDITOR_SURF: /* Multi-patch surface */ iv[SPIN_COL_I1] = iv[SPIN_COL_I2] = 8; ptype = PATCH_SURF; ptset = FALSE; save = TRUE; break; case PATCH_EDITOR_SCCD: /* Insert SC card (non-arbitrary patch case) */ if( gtk_list_store_iter_is_valid( geom_store, &iter_sp) ) Insert_Blank_Geometry_Row( geom_treeview, geom_store, &iter_sc, "SC"); } /* switch( action ) */ /* Change labels as needed */ if( ptype == PATCH_ARBT ) { gtk_label_set_text( GTK_LABEL( lookup_widget(patch_editor, "patch_x1_label")), _("Center - X") ); gtk_label_set_text( GTK_LABEL( lookup_widget(patch_editor, "patch_y1_label")), _("Center - Y") ); gtk_label_set_text( GTK_LABEL( lookup_widget(patch_editor, "patch_z1_label")), _("Center - Z") ); gtk_label_set_text( GTK_LABEL( lookup_widget(patch_editor, "patch_x2_label")), _("Normal - Elev.") ); gtk_label_set_text( GTK_LABEL( lookup_widget(patch_editor, "patch_y2_label")), _("Normal - Azim.") ); gtk_label_set_text( GTK_LABEL( lookup_widget(patch_editor, "patch_z2_label")), _("Patch Area") ); } else { gtk_label_set_text( GTK_LABEL( lookup_widget(patch_editor, "patch_x1_label")), _("Corner 1 - X") ); gtk_label_set_text( GTK_LABEL( lookup_widget(patch_editor, "patch_y1_label")), _("Corner 1 - Y") ); gtk_label_set_text( GTK_LABEL( lookup_widget(patch_editor, "patch_z1_label")), _("Corner 1 - Z") ); gtk_label_set_text( GTK_LABEL( lookup_widget(patch_editor, "patch_x2_label")), _("Corner 2 - X") ); gtk_label_set_text( GTK_LABEL( lookup_widget(patch_editor, "patch_y2_label")), _("Corner 2 - Y") ); gtk_label_set_text( GTK_LABEL( lookup_widget(patch_editor, "patch_z2_label")), _("Corner 2 - Z") ); } /* Hide/Show parts of window as needed */ switch( ptype ) { case PATCH_ARBT: /* Arbitary shaped patch */ gtk_widget_hide( lookup_widget(patch_editor, "patch_sc_frame") ); gtk_widget_hide( lookup_widget(patch_editor, "patch_sm_frame") ); gtk_window_resize( GTK_WINDOW(patch_editor), 10, 10 ); break; case PATCH_RECT: /* Rectangular patch */ gtk_widget_show( lookup_widget(patch_editor, "patch_sc_frame") ); gtk_widget_hide( lookup_widget(patch_editor, "patch_sc_table") ); gtk_widget_hide( lookup_widget(patch_editor, "patch_sm_frame") ); gtk_window_resize( GTK_WINDOW(patch_editor), 10, 10 ); break; case PATCH_TRIA: /* Triangular patch */ gtk_widget_show( lookup_widget(patch_editor, "patch_sc_frame") ); gtk_widget_hide( lookup_widget(patch_editor, "patch_sc_table") ); gtk_widget_hide( lookup_widget(patch_editor, "patch_sm_frame") ); gtk_window_resize( GTK_WINDOW(patch_editor), 10, 10 ); break; case PATCH_QUAD: /* Quadrilateral patch */ gtk_widget_show( lookup_widget(patch_editor, "patch_sc_frame") ); gtk_widget_show( lookup_widget(patch_editor, "patch_sc_table") ); gtk_widget_hide( lookup_widget(patch_editor, "patch_sm_frame") ); gtk_window_resize( GTK_WINDOW(patch_editor), 10, 10 ); break; case PATCH_SURF: /* Multi-patch surface */ gtk_widget_show( lookup_widget(patch_editor, "patch_sm_frame") ); gtk_widget_show( lookup_widget(patch_editor, "patch_sc_frame") ); gtk_widget_hide( lookup_widget(patch_editor, "patch_sc_table") ); gtk_window_resize( GTK_WINDOW(patch_editor), 10, 10 ); } /* switch( ptype ) */ /* Set patch type radio button */ if( ptset ) { ptset = FALSE; gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( lookup_widget(patch_editor, rbutton[ptype])), TRUE ); } /* Set card name */ Strlcpy( name, (ptype == PATCH_SURF ? "SM" : "SP"), sizeof(name) ); if( gtk_list_store_iter_is_valid(geom_store, &iter_sp) && save ) gtk_list_store_set( geom_store, &iter_sp, GEOM_COL_NAME, name, -1 ); /* Write int data for SM card */ if( ptype == PATCH_SURF ) for( idi = SPIN_COL_I1; idi <= SPIN_COL_I2; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(patch_editor, ispin[idi]) ); gtk_spin_button_set_value( spin, iv[idi] ); } /* Write float data to the patch editor */ for( idx = PATCH_X1; idx <= PATCH_Z2; idx++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(patch_editor, fspin[idx]) ); gtk_spin_button_set_value( spin, fv[idx] ); } for( idx = PATCH_X3; idx <= PATCH_Z4; idx++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(patch_editor, fspin[idx-1]) ); gtk_spin_button_set_value( spin, fv[idx] ); } /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Patch_Editor() */ /*------------------------------------------------------------------------*/ /* Arc_Editor() * * Handles all actions of the arc editor window */ void Arc_Editor( int action ) { /* For looking up spinbuttons */ GtkSpinButton *spin; /* For reading/writing to GA rows */ static GtkTreeIter iter_ga; int idx, idi; static gboolean load = FALSE, /* Enable wire loading (conductivity specified) */ newpcl = TRUE, /* New percent-of-lambda value */ save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Float type data */ static gdouble fv[7] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; /* Wire conductivity */ static gdouble s = 0.0; /* Integer type data */ static gint iv[2]; /* Card (row) name */ gchar name[3]; /* Spin button names, int & float data */ gchar *ispin[2] = { "arc_tagnum_spinbutton", "arc_numseg_spinbutton" }; gchar *fspin[6] = { "arc_rad_spinbutton", "arc_end1_spinbutton", "arc_end2_spinbutton", "arc_dia_spinbutton", "arc_pcl_spinbutton", "arc_res_spinbutton" }; /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, arc_editor) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { Set_Geometry_Data( geom_store, &iter_ga, iv, fv ); /* Set wire conductivity (loading card) */ if( load ) Set_Wire_Conductivity( iv[SPIN_COL_I1], s, cmnd_store ); save = load = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Read int data from the arc editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I2; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(arc_editor, ispin[idi]) ); iv[idi] = gtk_spin_button_get_value_as_int( spin ); } /* Read float data from the arc editor */ for( idx = ARC_RAD; idx <= ARC_PCL; idx++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(arc_editor, fspin[idx]) ); fv[idx] = gtk_spin_button_get_value( spin ); } fv[ARC_DIA] /= 2.0; /* Get wire conductivity */ spin = GTK_SPIN_BUTTON( lookup_widget(arc_editor, fspin[idx]) ); s = gtk_spin_button_get_value( spin ); /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New arc row to create */ /* Insert a default GE card if list is empty */ Insert_GE_Card( geom_store, &iter_ga ); /* Insert a new blank GA row after a selected row, * if any, otherwise before the last (GE) row */ Insert_Blank_Geometry_Row( geom_treeview, geom_store, &iter_ga, "GA"); /* Some default values */ iv[SPIN_COL_I1] = ++gbl_tag_num; spin = GTK_SPIN_BUTTON( lookup_widget(arc_editor, ispin[SPIN_COL_I1])); gtk_spin_button_set_value( spin, iv[SPIN_COL_I1] ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( geom_adjustment, geom_adjustment->upper); break; case EDITOR_EDIT: /* Edit an arc row (GA) selected in treeview */ /* Get selected row */ Get_Selected_Row( geom_treeview, geom_store, &iter_ga, name ); /* Get arc data from tree view */ Get_Geometry_Data( geom_store, &iter_ga, iv, fv ); /* Get wire conductivity if specified in LD card */ Get_Wire_Conductivity(iv[SPIN_COL_I1], &s, cmnd_store); break; case EDITOR_CANCEL: /* Cancel arc editor */ /* Remove cards */ Remove_Row( geom_store, &iter_ga ); save = busy = FALSE; return; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; break; case EDITOR_LOAD: /* Wire conductivity specified */ spin = GTK_SPIN_BUTTON( lookup_widget( arc_editor, fspin[SPIN_COL_F6]) ); s = gtk_spin_button_get_value( spin ); if( s > 0.0 ) { save = TRUE; load = TRUE; } else load = FALSE; break; case EDITOR_TAGNUM: /* Tag number edited by user */ gbl_tag_num = iv[SPIN_COL_I1]; save = TRUE; if( s > 0.0 ) load = TRUE; break; case EDITOR_SEGPC: /* Segment length as % of smallest wavelength */ /* Calculate num of segs for given % of lambda */ if( calc_data.mxfrq != 0.0 ) { gdouble len = fv[ARC_RAD] * (gdouble)fabs( fv[ARC_END1]-fv[ARC_END2] )/(gdouble)TD; double i = ceil(100.0 / fv[ARC_PCL] * len /((gdouble)CVEL/(gdouble)calc_data.mxfrq)); iv[SPIN_COL_I2] = (gint)i; } newpcl = FALSE; save = TRUE; } /* switch( action ) */ /*** Calculate seg length as % of smallest wavelength ***/ if( (calc_data.mxfrq != 0.0) && newpcl ) { gdouble len = fv[ARC_RAD] * (gdouble)fabs( fv[ARC_END1]-fv[ARC_END2] )/(gdouble)TD; fv[ARC_PCL] = 100.0 * (len/(gdouble)iv[SPIN_COL_I2]) / ((gdouble)CVEL/(gdouble)calc_data.mxfrq); } else newpcl = TRUE; /* Write int data to the arc editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I2; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(arc_editor, ispin[idi]) ); gtk_spin_button_set_value( spin, iv[idi] ); } /* Write float data to the arc editor (F1 to F4 & pcl/resistance) */ fv[ARC_DIA] *= 2.0; for( idx = ARC_RAD; idx <= ARC_PCL; idx++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(arc_editor, fspin[idx]) ); gtk_spin_button_set_value( spin, fv[idx] ); } fv[ARC_DIA] /= 2.0; spin = GTK_SPIN_BUTTON( lookup_widget(arc_editor, fspin[idx]) ); gtk_spin_button_set_value( spin, s ); /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Arc_Editor() */ /*------------------------------------------------------------------------*/ /* Helix_Editor() * * Handles all actions of the helix editor window */ void Helix_Editor( int action ) { /* For looking up spinbuttons */ GtkSpinButton *spin; /* For reading/writing to GH rows */ static GtkTreeIter iter_gh; gint idx, idi; gdouble ftmp; static gboolean load = FALSE, /* Enable wire loading (conductivity specified) */ linkall = TRUE, /* Link all radius spinbuttons */ linkzo = FALSE, /* Link X, Y @ Z=0 spinbuttons */ linkzhl = FALSE, /* Link X, Y @ Z=HL spinbuttons */ helixlh = FALSE, /* Specify a left hand helix */ newpcl = TRUE, /* New percent-of-lambda value */ newspc = TRUE, /* New percent-of-lambda value */ save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Float type data, wire conductivity */ static gdouble fv[10], s = 0.0; /* Integer type data */ static gint iv[2]; /* Card (row) name */ gchar name[3]; /* Spin button names, int & float data */ gchar *ispin[2] = { "helix_tagnum_spinbutton", "helix_numseg_spinbutton" }; gchar *fspin[10] = { "helix_tspace_spinbutton", "helix_len_spinbutton", "helix_radxzo_spinbutton", "helix_radyzo_spinbutton", "helix_radxzhl_spinbutton", "helix_radyzhl_spinbutton", "helix_dia_spinbutton", "helix_pcl_spinbutton", "helix_nturns_spinbutton", "helix_res_spinbutton" }; /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, helix_editor) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { /* Change seg/turn to total number of segs */ gint tmp = iv[SPIN_COL_I2]; double i = ceil( (gdouble)iv[SPIN_COL_I2] * fv[HELIX_NTURN] ); iv[SPIN_COL_I2] = (gint)i; /* Change to left hand helix */ if( helixlh ) fv[HELIX_LEN] = -fv[HELIX_LEN]; Set_Geometry_Data( geom_store, &iter_gh, iv, fv ); /* Change back */ iv[SPIN_COL_I2] = tmp; fv[HELIX_LEN] = fabs( fv[HELIX_LEN] ); /* Set wire conductivity (loading card) */ if( load ) Set_Wire_Conductivity( iv[SPIN_COL_I1], s, cmnd_store ); save = load = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Read int data from the helix editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I2; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(helix_editor, ispin[idi]) ); iv[idi] = gtk_spin_button_get_value_as_int( spin ); } /* Read float data from the helix editor */ for( idx = HELIX_TSPACE; idx <= HELIX_RES; idx++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(helix_editor, fspin[idx]) ); fv[idx] = gtk_spin_button_get_value( spin ); } fv[HELIX_DIA] /= 2.0; /* Link all radius spinbuttons to X @ Z=0 */ if( linkall ) fv[HELIX_RYZO] = fv[HELIX_RXZHL] = fv[HELIX_RYZHL] = fv[HELIX_RXZO]; /* Link X, Y @ Z=0 spinbuttons */ if( linkzo ) fv[HELIX_RYZO] = fv[HELIX_RXZO]; /* Link X, Y @ Z=0 spinbuttons */ if( linkzhl ) fv[HELIX_RYZHL] = fv[HELIX_RXZHL]; /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New helix row to create */ /* Insert a default GE card if list is empty */ Insert_GE_Card( geom_store, &iter_gh ); /* Insert a new blank GH row after a selected row, * if any, otherwise before the last (GE) row */ Insert_Blank_Geometry_Row( geom_treeview, geom_store, &iter_gh, "GH"); /* Some default values */ iv[SPIN_COL_I1] = ++gbl_tag_num; spin = GTK_SPIN_BUTTON( lookup_widget( helix_editor, ispin[SPIN_COL_I1]) ); gtk_spin_button_set_value( spin, iv[SPIN_COL_I1] ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( geom_adjustment, geom_adjustment->upper); break; case EDITOR_EDIT: /* Edit a helix row (GH) */ /* Get selected row */ Get_Selected_Row( geom_treeview, geom_store, &iter_gh, name ); /* Get helix data from tree view */ Get_Geometry_Data( geom_store, &iter_gh, iv, fv ); /* Get wire conductivity if specified in LD card */ Get_Wire_Conductivity(iv[SPIN_COL_I1], &s, cmnd_store); fv[HELIX_RES] = s; /* Set LH/RH helix check button */ { GtkToggleButton *toggle = GTK_TOGGLE_BUTTON( lookup_widget( helix_editor, "helix_lh_checkbutton") ); if( fv[HELIX_LEN] < 0.0 ) gtk_toggle_button_set_active( toggle, TRUE ); else gtk_toggle_button_set_active( toggle, FALSE ); } /* If left hand helix */ fv[HELIX_LEN] = fabs( fv[HELIX_LEN] ); /* Change to number of segs/turn */ fv[HELIX_NTURN] = fv[HELIX_LEN] / fv[HELIX_TSPACE]; iv[SPIN_COL_I2] = (gint)((gdouble)iv[SPIN_COL_I2] / fv[HELIX_NTURN]); break; case EDITOR_CANCEL: /* Cancel helix editor */ /* Remove cards */ Remove_Row( geom_store, &iter_gh ); save = busy = FALSE; return; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; break; case EDITOR_LOAD: /* Wire conductivity specified */ spin = GTK_SPIN_BUTTON(lookup_widget( helix_editor, fspin[HELIX_RES])); s = gtk_spin_button_get_value( spin ); if( s > 0.0 ) { save = TRUE; load = TRUE; } else load = FALSE; break; case EDITOR_TAGNUM: /* Tag number edited by user */ gbl_tag_num = iv[SPIN_COL_I1]; save = TRUE; if( s > 0.0 ) load = TRUE; break; case HELIX_EDITOR_LH: /* Left hand helix */ helixlh = TRUE; save = TRUE; break; case HELIX_EDITOR_RH: /* Right hand helix */ helixlh = FALSE; save = TRUE; break; case HELIX_EDITOR_LINKALL: /* Link all radius spinbuttons */ linkall = TRUE; linkzo = linkzhl = FALSE; break; case HELIX_EDITOR_LINKZO: /* Link X, Y @ Z=0 spinbuttons */ linkzo = TRUE; linkall = linkzhl = FALSE; break; case HELIX_EDITOR_LINKZHL: /* Link X, Y @ Z=HL spinbuttons */ linkzhl = TRUE; linkzo = linkall = FALSE; break; case HELIX_EDITOR_NTURN: /* New number of turns */ fv[HELIX_TSPACE] = fv[HELIX_LEN] / fv[HELIX_NTURN]; newspc = FALSE; save = TRUE; break; case EDITOR_SEGPC: /* Segment length as % of smallest wavelength */ /* Calculate num of segs for given % of lambda */ if( calc_data.mxfrq != 0.0 ) { gdouble len, f; /* Pitch angle of helix, assumes untapered helix */ f = asin( fv[HELIX_TSPACE] / (gdouble)TP / fv[HELIX_RXZO] ); /* Helix turn length */ len = (gdouble)TP * fv[HELIX_RXZO] / (gdouble)cos( f ); /* New number of segments */ double i = ceil(100.0 / fv[HELIX_PCL]*len / ((gdouble)CVEL / (gdouble)calc_data.mxfrq) ); iv[SPIN_COL_I2] = (gint)i; } newpcl = FALSE; save = TRUE; } /* switch( action ) */ /*** Calculate seg length as % of smallest wavelength ***/ if( (calc_data.mxfrq != 0.0) && newpcl ) { gdouble len, f; /* Pitch angle of helix, assumes untapered helix */ f = asin( fv[HELIX_TSPACE]/(gdouble)TP/fv[HELIX_RXZO] ); /* Helix turn length */ len = (gdouble)TP * fv[HELIX_RXZO] / (gdouble)cos( f ); fv[HELIX_PCL] = 100.0 * (len/(gdouble)iv[SPIN_COL_I2]) / ((gdouble)CVEL / (gdouble)calc_data.mxfrq); } else newpcl = TRUE; /* Calculate new turn spacing */ if( newspc ) fv[HELIX_NTURN] = fv[HELIX_LEN] / fv[HELIX_TSPACE]; else newspc = TRUE; /* Write int data to the helix editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I2; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( helix_editor, ispin[idi]) ); gtk_spin_button_set_value( spin, iv[idi] ); } /* Write float data to the helix editor */ ftmp = fv[HELIX_DIA]; fv[HELIX_DIA] *= 2.0; for( idx = HELIX_TSPACE; idx <= HELIX_RES; idx++ ) { spin = GTK_SPIN_BUTTON( lookup_widget( helix_editor, fspin[idx]) ); gtk_spin_button_set_value( spin, fv[idx] ); } fv[HELIX_DIA] = ftmp; /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Helix_Editor() */ /*------------------------------------------------------------------------*/ /* Reflect_Editor() * * Handles all actions of the reflect editor window */ void Reflect_Editor( int action ) { /* For looking up spinbuttons/checkbuttons */ GtkSpinButton *spin; GtkToggleButton *toggle; /* For reading/writing to GX row */ static GtkTreeIter iter_gx; int idx, ck; /* Integer type data */ static gint iv[2]; /* Check button names */ gchar *ckbutton[3] = { "reflect_z_checkbutton", "reflect_y_checkbutton", "reflect_x_checkbutton" }; /* Card (row) name */ gchar name[3]; static gboolean save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, reflect_editor) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { Set_Geometry_Int_Data( geom_store, &iter_gx, iv ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New reflect row to create */ /* Insert a default GE card if list is empty */ Insert_GE_Card( geom_store, &iter_gx ); /* Insert a new blank GX row after a selected row, * if any, otherwise before the last (GE) row */ Insert_Blank_Geometry_Row( geom_treeview, geom_store, &iter_gx, "GX"); /* Scroll tree view to bottom */ gtk_adjustment_set_value( geom_adjustment, geom_adjustment->upper); break; case EDITOR_EDIT: /* Edit a reflect row (GX) selected in treeview */ /* Get selected row */ Get_Selected_Row( geom_treeview, geom_store, &iter_gx, name ); /* Get reflect data from tree view */ Get_Geometry_Int_Data( geom_store, &iter_gx, iv ); /* Set reflection axes check buttons */ { ck = iv[SPIN_COL_I2]; for( idx = 0; idx < 3; idx++ ) { toggle = GTK_TOGGLE_BUTTON( lookup_widget(reflect_editor, ckbutton[idx]) ); if( ck & 1 ) gtk_toggle_button_set_active( toggle, TRUE ); else gtk_toggle_button_set_active( toggle, FALSE ); ck /= 10; } } /* Set tag num increment */ spin = GTK_SPIN_BUTTON( lookup_widget(reflect_editor, "reflect_taginc_spinbutton") ); gtk_spin_button_set_value( spin, iv[SPIN_COL_I1] ); break; case EDITOR_CANCEL: /* Cancel reflect editor */ /* Remove cards */ Remove_Row( geom_store, &iter_gx ); save = busy = FALSE; return; case REFLECT_EDITOR_TOGGLE: /* Reflect button toggled */ save = TRUE; break; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; } /* switch( action ) */ /* Work out the I2 value needed by GX card */ ck = 1; iv[SPIN_COL_I2] = 0; for( idx = 0; idx < 3; idx++ ) { toggle = GTK_TOGGLE_BUTTON( lookup_widget(reflect_editor, ckbutton[idx]) ); if( gtk_toggle_button_get_active(toggle) ) iv[SPIN_COL_I2] += ck; ck *= 10; } /* Read tag inc from the reflect editor */ spin = GTK_SPIN_BUTTON( lookup_widget(reflect_editor, "reflect_taginc_spinbutton") ); iv[SPIN_COL_I1] = gtk_spin_button_get_value_as_int( spin ); /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Reflection_Editor() */ /*------------------------------------------------------------------------*/ /* Scale_Editor() * * Handles all actions of the scale editor window */ void Scale_Editor( int action ) { /* For looking up spinbuttons */ GtkSpinButton *spin; /* For reading/writing to GS row */ static GtkTreeIter iter_gs; /* Integer type data */ static gint iv[2]; /* Spin button names, int data */ gchar *ispin[2] = { "scale_from_spinbutton", "scale_to_spinbutton" }; int idx, idi; /* Scale factor */ static gdouble scale = 1.0; /* Card (row) name, strings for convertions */ gchar name[3], sf[13], *str; static gboolean save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, scale_editor) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { /* Clear all GS columns */ for( idx = GEOM_COL_I1; idx <= GEOM_COL_F7; idx++ ) gtk_list_store_set( geom_store, &iter_gs, idx, "0", -1 ); /* Enter tag from-to data */ Set_Geometry_Int_Data( geom_store, &iter_gs, iv ); /* Enter scale factor */ snprintf( sf, sizeof(sf), "%12.5E", scale ); gtk_list_store_set( geom_store, &iter_gs, GEOM_COL_F1, sf, -1 ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New scale row to create */ /* Insert a default GE card if list is empty */ Insert_GE_Card( geom_store, &iter_gs ); /* Insert a new blank GS row after a selected row, * if any, otherwise before the last (GE) row */ Insert_Blank_Geometry_Row( geom_treeview, geom_store, &iter_gs, "GS"); /* Scroll tree view to bottom */ gtk_adjustment_set_value( geom_adjustment, geom_adjustment->upper); save = FALSE; break; case EDITOR_EDIT: /* Edit a scale row (GS) selected in treeview */ /* Get selected row */ Get_Selected_Row( geom_treeview, geom_store, &iter_gs, name ); /* Get tag from-to data from tree view */ Get_Geometry_Int_Data( geom_store, &iter_gs, iv ); /* Get scale data from tree view */ if( gtk_list_store_iter_is_valid(geom_store, &iter_gs) ) { gtk_tree_model_get( GTK_TREE_MODEL(geom_store), &iter_gs, GEOM_COL_F1, &str, -1); scale = Strtod( str, NULL ); g_free( str ); } else stop( _("Error reading row data\n"\ "Invalid list iterator"), ERR_OK ); /* Enter tag from-to data to scale editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I2; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(scale_editor, ispin[idi]) ); gtk_spin_button_set_value( spin, iv[idi] ); } /* Set scale factor to scale editor */ spin = GTK_SPIN_BUTTON( lookup_widget(scale_editor, "scale_factor_spinbutton") ); gtk_spin_button_set_value( spin, scale ); break; case EDITOR_CANCEL: /* Cancel scale editor */ /* Remove cards */ Remove_Row( geom_store, &iter_gs ); save = busy = FALSE; return; case EDITOR_DATA: /* Some data changed in editor window */ /* Read int data from the scale editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I2; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(scale_editor, ispin[idi]) ); iv[idi] = gtk_spin_button_get_value_as_int( spin ); } /* Read scale from the scale editor */ spin = GTK_SPIN_BUTTON( lookup_widget(scale_editor, "scale_factor_spinbutton") ); scale = gtk_spin_button_get_value( spin ); save = TRUE; } /* switch( action ) */ /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Scale_Editor() */ /*------------------------------------------------------------------------*/ /* Cylinder_Editor() * * Handles all actions of the cylinder editor window */ void Cylinder_Editor( int action ) { /* For looking up spinbuttons */ GtkSpinButton *spin; /* For reading/writing to GR row */ static GtkTreeIter iter_gr; int idi; /* Integer data (I1 & I2) */ static gint iv[2]; /* Cylinder data spinbuttons */ static gchar *ispin[2] = { "cylinder_taginc_spinbutton", "cylinder_total_spinbutton" }; /* Card (row) name, strings for convertions */ gchar name[3]; static gboolean save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, cylinder_editor) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { Set_Geometry_Int_Data( geom_store, &iter_gr, iv ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New cylinder row to create */ /* Insert a default GE card if list is empty */ Insert_GE_Card( geom_store, &iter_gr ); /* Insert a new blank GR row after a selected row, * if any, otherwise before the last (GE) row */ Insert_Blank_Geometry_Row( geom_treeview, geom_store, &iter_gr, "GR"); /* Scroll tree view to bottom */ gtk_adjustment_set_value( geom_adjustment, geom_adjustment->upper); save = TRUE; break; case EDITOR_EDIT: /* Edit a cylinder row (GR) selected in treeview */ /* Get selected row */ Get_Selected_Row( geom_treeview, geom_store, &iter_gr, name); /* Get integer data from cylinder editor */ Get_Geometry_Int_Data( geom_store, &iter_gr, iv ); /* Write int data to the cylinder editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I2; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(cylinder_editor, ispin[idi])); gtk_spin_button_set_value( spin, iv[idi] ); } break; case EDITOR_CANCEL: /* Cancel cylinder editor */ /* Remove cards */ Remove_Row( geom_store, &iter_gr ); save = busy = FALSE; return; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; } /* switch( action ) */ /* Read int data from the cylinder editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I2; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(cylinder_editor, ispin[idi])); iv[idi] = gtk_spin_button_get_value_as_int( spin ); } /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Cylinder_Editor() */ /*------------------------------------------------------------------------*/ /* Transform_Editor() * * Handles all actions of the transform editor window */ void Transform_Editor( int action ) { /* For looking up spinbuttons */ GtkSpinButton *spin; /* For reading/writing to GM row */ static GtkTreeIter iter_gm; int idx, idi, idf; /* Integer data (I1 to I3) */ static gint iv[3]; /* Float data (F1 to F7) */ static gdouble fv[7]; /* Transform int data spinbuttons */ static gchar *ispin[3] = { "transform_taginc_spinbutton", "transform_new_spinbutton", "transform_start_spinbutton" }; /* Transform float data spinbuttons */ static gchar *fspin[6] = { "transform_rx_spinbutton", "transform_ry_spinbutton", "transform_rz_spinbutton", "transform_mx_spinbutton", "transform_my_spinbutton", "transform_mz_spinbutton" }; /* Card (row) name, strings for convertions */ gchar name[3]; static gboolean save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, transform_editor) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save ) { Set_Geometry_Data( geom_store, &iter_gm, iv, fv ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_NEW: /* New transform row to create */ /* Insert a default GE card if list is empty */ Insert_GE_Card( geom_store, &iter_gm ); /* Insert a new blank GM row after a selected row, * if any, otherwise before the last (GE) row */ Insert_Blank_Geometry_Row( geom_treeview, geom_store, &iter_gm, "GM"); /* Scroll tree view to bottom */ gtk_adjustment_set_value( geom_adjustment, geom_adjustment->upper); break; case EDITOR_EDIT: /* Edit transform row (GM) selected in treeview */ /* Get selected row */ Get_Selected_Row(geom_treeview, geom_store, &iter_gm, name); /* Get integer data from transform editor */ Get_Geometry_Data( geom_store, &iter_gm, iv, fv ); /* Write int data to the transform editor */ iv[SPIN_COL_I3] = (gint)fv[SPIN_COL_F7]; for( idi = SPIN_COL_I1; idi <= SPIN_COL_I3; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(transform_editor, ispin[idi])); gtk_spin_button_set_value( spin, iv[idi] ); } /* Write float data to the transform editor */ for( idf = SPIN_COL_F1; idf <= SPIN_COL_F6; idf++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(transform_editor, fspin[idf])); gtk_spin_button_set_value( spin, fv[idf] ); } break; case EDITOR_CANCEL: /* Cancel transform editor */ /* Remove cards */ Remove_Row( geom_store, &iter_gm ); save = busy = FALSE; return; case EDITOR_DATA: /* Some data changed in editor window */ save = TRUE; } /* switch( action ) */ /* Read int data from the transform editor */ for( idi = SPIN_COL_I1; idi <= SPIN_COL_I3; idi++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(transform_editor, ispin[idi])); iv[idi] = gtk_spin_button_get_value_as_int( spin ); } /* Read float data from the transform editor */ for( idx = 0; idx < 6; idx++ ) { spin = GTK_SPIN_BUTTON( lookup_widget(transform_editor, fspin[idx])); fv[idx] = gtk_spin_button_get_value( spin ); } fv[SPIN_COL_F7] = (gdouble)iv[SPIN_COL_I3]; /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Transform_Editor() */ /*------------------------------------------------------------------------*/ /* Gend_Editor() * * Edits the GE card */ void Gend_Editor( int action ) { /* For reading/writing to GE row */ static GtkTreeIter iter_ge; /* For checking radio buttons */ GtkToggleButton *toggle; /* Ground type radio buttons */ #define GE_RDBTN 3 static gchar *rdbutton[GE_RDBTN] = { "gend_noimg_radiobutton", "gend_nognd_radiobutton", "gend_img_radiobutton" }; /* Card (row) name, strings for convertions */ gchar name[3], *sv; static gchar si[6]; int idx; static gboolean save = FALSE, /* Enable saving of editor data */ busy = FALSE; /* Block callbacks. Must be a better way to do this? */ /* Block callbacks. (Should be a better way to do this) */ if( Give_Up( &busy, gend_editor) ) return; /* Save data to nec2 editor if appropriate */ if( (action & EDITOR_SAVE) && save && gtk_list_store_iter_is_valid(geom_store, &iter_ge)) { gtk_list_store_set( geom_store, &iter_ge, GEOM_COL_I1, si, -1 ); save = FALSE; } /* if( (action & EDITOR_SAVE) && save ) */ /* Respond to user action */ switch( action ) { case EDITOR_EDIT: /* Edit geom end row (GE) */ /* Open GE Editor */ if( gend_editor == NULL ) { gend_editor = create_gend_editor(); gtk_widget_show( gend_editor ); } /* Get selected row */ Get_Selected_Row( geom_treeview, geom_store, &iter_ge, name ); /* Get integer data from transform editor */ if( gtk_list_store_iter_is_valid(geom_store, &iter_ge) ) { gtk_tree_model_get( GTK_TREE_MODEL(geom_store), &iter_ge, GEOM_COL_I1, &sv, -1 ); idx = atoi(sv) + 1; g_free(sv); toggle = GTK_TOGGLE_BUTTON( lookup_widget( gend_editor, rdbutton[idx]) ); gtk_toggle_button_set_active( toggle, TRUE ); } else stop( _("Error reading row data\n"\ "Invalid list iterator"), ERR_OK ); break; case EDITOR_CANCEL: /* Cancel transform editor */ /* Remove card */ Remove_Row( geom_store, &iter_ge ); save = busy = FALSE; return; case EDITOR_RDBUTTON: /* Radio button toggled in editor window */ /* Test radio buttons */ for( idx = 0; idx < GE_RDBTN; idx++ ) { toggle = GTK_TOGGLE_BUTTON( lookup_widget( gend_editor, rdbutton[idx]) ); if( gtk_toggle_button_get_active(toggle) ) break; } snprintf( si, sizeof(si), "%5d", idx-1 ); save = TRUE; } /* switch( action ) */ /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); busy = FALSE; } /* Gend_Editor() */ /*------------------------------------------------------------------------*/ /* Insert_GE_Card() * * Inserts a default GE card if missing */ void Insert_GE_Card( GtkListStore *store, GtkTreeIter *iter ) { gint idx, idi; /* Insert default GE card if list is clear */ idx = gtk_tree_model_iter_n_children( GTK_TREE_MODEL(store), NULL ); if( !idx ) { gtk_list_store_append( store, iter ); gtk_list_store_set( store, iter, GEOM_COL_NAME, "GE", -1 ); for( idi = GEOM_COL_I1; idi < GEOM_NUM_COLS; idi++ ) gtk_list_store_set( store, iter, idi, "0", -1 ); } } /* Insert_GE_Card() */ /*------------------------------------------------------------------------*/ /* Get_Geometry_Data() * * Gets geometry data from a treeview row */ void Get_Geometry_Data( GtkListStore *store, GtkTreeIter *iter, int *iv, double *fv ) { gint idi, idf; gchar *sv; /* Get data from tree view (I1,I2, F1-F7)*/ if( gtk_list_store_iter_is_valid(store, iter) ) { for( idi = GEOM_COL_I1; idi <= GEOM_COL_I2; idi++ ) { gtk_tree_model_get( GTK_TREE_MODEL(store), iter, idi, &sv, -1); iv[idi-GEOM_COL_I1] = atoi(sv); g_free(sv); } for( idf = GEOM_COL_F1; idf <= GEOM_COL_F7; idf++ ) { gtk_tree_model_get( GTK_TREE_MODEL(store), iter, idf, &sv, -1); fv[idf-GEOM_COL_F1] = Strtod( sv, NULL ); g_free(sv); } } else stop( _("Error reading row data\n"\ "Invalid list iterator"), ERR_OK ); } /* Get_Geometry_Data() */ /*------------------------------------------------------------------------*/ /* Get_Geometry_Int_Data() * * Gets integer (I1, I2) geometry data from a treeview row */ void Get_Geometry_Int_Data( GtkListStore *store, GtkTreeIter *iter, int *iv ) { gint idi; gchar *sv; /* Get data from tree view (I1, I2) */ if( gtk_list_store_iter_is_valid(store, iter) ) { for( idi = GEOM_COL_I1; idi <= GEOM_COL_I2; idi++ ) { gtk_tree_model_get( GTK_TREE_MODEL(store), iter, idi, &sv, -1); iv[idi-GEOM_COL_I1] = atoi(sv); g_free(sv); } } else stop( _("Error reading row data\n"\ "Invalid list iterator"), ERR_OK ); } /* Get_Geometry_Int_Data() */ /*------------------------------------------------------------------------*/ /* Set_Geometry_Data() * * Sets data into a geometry row */ void Set_Geometry_Data( GtkListStore *store, GtkTreeIter *iter, int *iv, double *fv ) { gchar str[13]; gint idi, idf; /* Format and set editor data to treeview (I1, I2 & F1-F7) */ if( gtk_list_store_iter_is_valid(store, iter) ) { for( idi = GEOM_COL_I1; idi <= GEOM_COL_I2; idi++ ) { snprintf( str, 6, "%5d", iv[idi-GEOM_COL_I1] ); gtk_list_store_set( store, iter, idi, str, -1 ); } for( idf = GEOM_COL_F1; idf <= GEOM_COL_F7; idf++ ) { snprintf( str, 13, "%12.5E", fv[idf-GEOM_COL_F1] ); gtk_list_store_set( store, iter, idf, str, -1 ); } } else stop( _("Error writing row data\n"\ "Please re-select row"), ERR_OK ); SetFlag( NEC2_EDIT_SAVE ); } /* Set_Geometry_Data() */ /*------------------------------------------------------------------------*/ /* Set_Geometry_Int_Data() * * Sets integer (I1, I2) data into a geometry row */ void Set_Geometry_Int_Data( GtkListStore *store, GtkTreeIter *iter, int *iv ) { gchar str[6]; gint idi, idf; /* Format and set editor data to treeview (I1, I2) */ if( gtk_list_store_iter_is_valid(store, iter) ) { for( idi = GEOM_COL_I1; idi <= GEOM_COL_I2; idi++ ) { snprintf( str, sizeof(str), "%5d", iv[idi-GEOM_COL_I1] ); gtk_list_store_set( store, iter, idi, str, -1 ); } /* Clear unused float columns */ for( idf = GEOM_COL_F1; idf <= GEOM_COL_F7; idf++ ) gtk_list_store_set( store, iter, idf, "0.0", -1 ); } else stop( _("Error writing row data\n"\ "Please re-select row"), ERR_OK ); SetFlag( NEC2_EDIT_SAVE ); } /* Set_Geometry_Int_Data() */ /*------------------------------------------------------------------------*/ /* Check_Card_Name() * * Checks previous or next card's name, returns TRUE on match */ gboolean Check_Card_Name( GtkListStore *store, GtkTreeIter *iter, gboolean next, const gchar *name ) { gboolean retv; char *str; retv = FALSE; if( gtk_list_store_iter_is_valid(store, iter) ) { if( next ) { if( gtk_tree_model_iter_next(GTK_TREE_MODEL(store), iter) ) { gtk_tree_model_get( GTK_TREE_MODEL(store), iter, GEOM_COL_NAME, &str, -1); if( strcmp(name, str) == 0 ) retv = TRUE; g_free(str); } } else { if( gtk_tree_model_iter_previous(GTK_TREE_MODEL(store), iter) ) { gtk_tree_model_get( GTK_TREE_MODEL(store), iter, GEOM_COL_NAME, &str, -1); if( strcmp(name, str) == 0 ) retv = TRUE; g_free(str); } } } return( retv ); } /* Check_Card_Name() */ /*------------------------------------------------------------------------*/ /* Give_Up() * * Signals functon to abort if busy or no NEC2 editor window */ gboolean Give_Up( int *busy, GtkWidget *widget ) { /* Block callbacks. (Should be a better way to do this) */ if( *busy ) return( TRUE ); *busy = TRUE; /* Abort if NEC2 editor window is closed */ if( nec2_edit_window == NULL ) { stop( _("NEC2 editor window not open"), ERR_OK ); gtk_widget_destroy( widget ); *busy = FALSE; return( TRUE ); } return( FALSE ); } /* Give_Up() */ /*------------------------------------------------------------------------*/ /* Insert_Blank_Geometry_Row() * * Inserts a blank row in a tree view with only its name (GW ... ) */ void Insert_Blank_Geometry_Row( GtkTreeView *view, GtkListStore *store, GtkTreeIter *iter, const gchar *name ) { GtkTreeSelection *selection; gboolean retv; gint n; gchar *str; if( nec2_edit_window == NULL ) return; /* Get selected row, if any */ selection = gtk_tree_view_get_selection( view ); retv = gtk_tree_selection_get_selected( selection, NULL, iter ); /* If no selected row, insert new row into list * store before last row, else after the selected row, * but if this is a GE row, then insert before it */ if( !retv ) { n = gtk_tree_model_iter_n_children( GTK_TREE_MODEL(store), NULL ); gtk_tree_model_iter_nth_child( GTK_TREE_MODEL(store), iter, NULL, n-1 ); gtk_list_store_insert_before( store, iter, iter ); } else { gtk_tree_model_get( GTK_TREE_MODEL(store), iter, GEOM_COL_NAME, &str, -1 ); if( strcmp(str, "GE") == 0 ) gtk_list_store_insert_before( store, iter, iter ); else gtk_list_store_insert_after( store, iter, iter ); g_free(str); } gtk_list_store_set( store, iter, GEOM_COL_NAME, name, -1 ); for( n = GEOM_COL_I1; n < GEOM_NUM_COLS; n++ ) gtk_list_store_set( store, iter, n, "--", -1 ); gtk_tree_selection_select_iter( selection, iter ); } /* Insert_Blank_Geometry_Row() */ /*------------------------------------------------------------------------*/ /* Remove_Row() * * Removes a row and selects previous or next row */ void Remove_Row( GtkListStore *store, GtkTreeIter *iter ) { if( gtk_list_store_iter_is_valid(store, iter) ) gtk_list_store_remove( store, iter ); } /* Remove_Row() */ /*------------------------------------------------------------------------*/ /* Get_Selected_Row() * * Gets the selected row in a tree view */ gboolean Get_Selected_Row( GtkTreeView *view, GtkListStore *store, GtkTreeIter *iter, gchar *name ) { gchar *str; GtkTreeSelection *selection; /* Get selected row, if any */ selection = gtk_tree_view_get_selection( view ); if( !gtk_tree_selection_get_selected(selection, NULL, iter) ) return( FALSE ); /* Get row name */ gtk_tree_model_get( GTK_TREE_MODEL(store), iter, GEOM_COL_NAME, &str, -1); Strlcpy( name, str, 3 ); g_free( str ); return( TRUE ); } /* Get_Selected_Row() */ /*------------------------------------------------------------------------*/ /* Set_Wire_Conductivity() * * Sets the wire conductivity specified in a geometry editor * (wire, arc, helix) to a loading card (LD row) in commands treview */ void Set_Wire_Conductivity( int tag, double s, GtkListStore *store ) { int idx, idi, nchld; GtkTreeIter iter_ld; gchar *str, sv[13]; /* Find num of rows and first iter, abort if tree empty */ nchld = gtk_tree_model_iter_n_children( GTK_TREE_MODEL(store), NULL); if(!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter_ld)) return; /* Look for an LD card with tag number = tag */ for( idx = 0; idx < nchld; ) { gtk_tree_model_get( GTK_TREE_MODEL(store), &iter_ld, GEOM_COL_NAME, &str, -1 ); if( strcmp(str, "LD") == 0 ) { g_free( str ); gtk_tree_model_get( GTK_TREE_MODEL(store), &iter_ld, GEOM_COL_I2, &str, -1 ); if( atoi( str ) == tag ) { g_free( str ); break; } else g_free( str ); } else g_free( str ); idx++; if( !gtk_tree_model_iter_next( GTK_TREE_MODEL(store), &iter_ld) ) break; } /* for( idx = 0; idx < nchld; idx++ ) */ /* If not found LD card with tagnum = tag, insert new */ if( idx >= nchld ) { gtk_tree_model_iter_nth_child( GTK_TREE_MODEL(store), &iter_ld, NULL, nchld-1 ); gtk_list_store_insert_before( store, &iter_ld, &iter_ld ); gtk_list_store_set( store, &iter_ld, CMND_COL_NAME, "LD", -1 ); /* Clear rest of LD row */ for( idi = CMND_COL_I1; idi <= CMND_COL_F6; idi++ ) gtk_list_store_set( store, &iter_ld, idi, "0", -1 ); } /* Set LD card parameters */ gtk_list_store_set( store, &iter_ld, CMND_COL_I1, "5", -1 ); snprintf( sv, 6, "%5d", tag ); gtk_list_store_set( store, &iter_ld, CMND_COL_I2, sv, -1 ); snprintf( sv, 13, "%12.5E", s ); gtk_list_store_set( store, &iter_ld, CMND_COL_F1, sv, -1 ); /* Scroll tree view to bottom */ gtk_adjustment_set_value( cmnd_adjustment, cmnd_adjustment->upper ); } /* Set_Wire_Conductivity() */ /*------------------------------------------------------------------------*/ /* Get_Wire_Conductivity() * * Gets the wire conductivity specified in a loading * card (LD row) in commands treview for a given tag # */ gboolean Get_Wire_Conductivity( int tag, double *s, GtkListStore *store ) { int idx, type, nchld; GtkTreeIter iter_ld; gchar *str; static int t = -1; /* Find num of rows and first iter, abort if tree empty */ nchld = gtk_tree_model_iter_n_children( GTK_TREE_MODEL(store), NULL ); if( !gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter_ld) ) return( FALSE ); /* Look for an LD card with tag number = tag */ for( idx = 0; idx < nchld; ) { gtk_tree_model_get( GTK_TREE_MODEL(store), &iter_ld, GEOM_COL_NAME, &str, -1 ); if( strcmp(str, "LD") == 0 ) { g_free( str ); gtk_tree_model_get( GTK_TREE_MODEL(store), &iter_ld, GEOM_COL_I2, &str, -1 ); if( atoi(str) == tag ) { g_free( str ); break; } else g_free( str ); } else g_free( str ); idx++; if( !gtk_tree_model_iter_next( GTK_TREE_MODEL(store), &iter_ld) ) break; } /* for( idx = 0; idx < nchld; idx++ ) */ /* If not found LD card with tagnum = tag, return s=0 */ if( idx >= nchld ) { *s = 0.0; t = tag; return( FALSE ); } /* If LD card for given tag is already read, abort */ if( t == tag ) return( FALSE ); else t = tag; /* Get the loading type (we want LDTYP 5) */ gtk_tree_model_get( GTK_TREE_MODEL(store), &iter_ld, GEOM_COL_I1, &str, -1 ); type = atoi( str ); g_free( str ); if( type != 5 ) return( FALSE ); /* Get the wire conductivity S/m */ gtk_tree_model_get( GTK_TREE_MODEL(store), &iter_ld, CMND_COL_F1, &str, -1 ); *s = Strtod( str, NULL ); g_free( str ); return( TRUE ); } /* Get_Wire_Conductivity() */ /*------------------------------------------------------------------------*/ xnec2c-3.4/src/geom_edit.h000066400000000000000000000016661257141547200154570ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef GEOM_EDIT_H #define GEOM_EDIT_H 1 #include "common.h" #include "interface.h" #include "support.h" #include "editors.h" #endif xnec2c-3.4/src/geometry.c000066400000000000000000001203151257141547200153420ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /******* Translated to the C language by N. Kyriazis 20 Aug 2003 ****** Program NEC(input,tape5=input,output,tape11,tape12,tape13,tape14, tape15,tape16,tape20,tape21) Numerical Electromagnetics Code (NEC2) developed at Lawrence Livermore lab., Livermore, CA. (contact G. Burke at 415-422-8414 for problems with the NEC code. For problems with the vax implem- entation, contact J. Breakall at 415-422-8196 or E. Domning at 415 422-5936) file created 4/11/80. ***********Notice********** This computer code material was prepared as an account of work sponsored by the United States government. Neither the United States nor the United States Department Of Energy, nor any of their employees, nor any of their contractors, subcontractors, or their employees, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness or usefulness of any information, apparatus, product or process disclosed, or represents that its use would not infringe privately-owned rights. ***********************************************************************/ #include "geometry.h" #include "shared.h" /*-------------------------------------------------------------------*/ /* arc generates segment geometry data for an arc of ns segments */ gboolean arc( int itg, int ns, double rada, double ang1, double ang2, double rad ) { int ist; ist= data.n; data.n += ns; data.np= data.n; data.mp= data.m; data.ipsym=0; if( ns < 1) { fprintf( stderr, "xnec2c: arc(): number of segments less than 1 (ns < 1)\n"); stop( _("arc(): Number of segments < 1"), ERR_OK ); return( FALSE ); } if( fabs( ang2- ang1) < 360.00001) { int i; double ang, dang, xs1, xs2, zs1, zs2; size_t mreq; /* Reallocate tags buffer */ mreq = (size_t)(data.n + data.m) * sizeof(int); mem_realloc( (void **)&data.itag, mreq, "in geometry.c" ); /* Reallocate wire buffers */ mreq = (size_t)data.n * sizeof(double); mem_realloc( (void **)&data.x1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.x2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.bi, mreq, "in geometry.c" ); ang= ang1* TA; dang=( ang2- ang1)* TA/ ns; xs1= rada* cos( ang); zs1= rada* sin( ang); for( i = ist; i < data.n; i++ ) { ang += dang; xs2= rada* cos( ang); zs2= rada* sin( ang); data.x1[i]= xs1; data.y1[i]=0.0; data.z1[i]= zs1; data.x2[i]= xs2; data.y2[i]=0.0; data.z2[i]= zs2; xs1= xs2; zs1= zs2; data.bi[i]= rad; data.itag[i]= itg; } /* for( i = ist; i < data.n; i++ ) */ } /* if( fabs( ang2- ang1) < 360.00001) */ else { fprintf( stderr, "xnec2c: arc(): arc angle exceeds 360 degrees\n"); stop( _("arc(): Arc angle exceeds 360 degrees"), ERR_OK ); return( FALSE ); } return( TRUE ); } /*-----------------------------------------------------------------------*/ /* connect sets up segment connection data in arrays icon1 and */ /* icon2 by searching for segment ends that are in contact. */ gboolean conect( int ignd ) { int i, iz, ic, j, jx, ix, ixx, iseg, iend, jend, jump; double sep=0.0, xi1, yi1, zi1, xi2, yi2, zi2; double slen, xa, ya, za, xs, ys, zs; size_t mreq; segj.maxcon = 1; if( ignd != 0) { if( data.ipsym == 2) { data.np=2* data.np; data.mp=2* data.mp; } if( abs(data.ipsym) > 2 ) { data.np= data.n; data.mp= data.m; } /*** possibly should be error condition?? **/ if( data.np > data.n) { fprintf( stderr, "xnec2c: conect(): np > n\n" ); stop( _("Error in conect(): np > n"), ERR_OK ); return( FALSE ); } if( (data.np == data.n) && (data.mp == data.m) ) data.ipsym=0; } /* if( ignd != 0) */ if( data.n != 0) { /* Allocate memory to connections */ mreq = (size_t)(data.n + data.m) * sizeof(int); mem_realloc( (void **)&data.icon1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.icon2, mreq, "in geometry.c" ); for( i = 0; i < data.n; i++ ) { data.icon1[i] = data.icon2[i] = 0; iz = i+1; xi1= data.x1[i]; yi1= data.y1[i]; zi1= data.z1[i]; xi2= data.x2[i]; yi2= data.y2[i]; zi2= data.z2[i]; slen= sqrt( (xi2- xi1)*(xi2- xi1) + (yi2- yi1) * (yi2- yi1) + (zi2- zi1)*(zi2- zi1) ) * SMIN; /* determine connection data for end 1 of segment. */ jump = FALSE; if( ignd > 0) { if( zi1 <= -slen) { fprintf( stderr, "xnec2c: conect(): geometry data error\n" "Segment %d extends below ground\n", iz ); stop( _("conect(): Geometry data error\n"\ "Segment extends below ground"), ERR_OK ); return( FALSE ); } if( zi1 <= slen) { data.icon1[i]= iz; data.z1[i]=0.0; jump = TRUE; } /* if( zi1 <= slen) */ } /* if( ignd > 0) */ if( ! jump ) { ic= i; for( j = 1; j < data.n; j++) { ic++; if( ic >= data.n) ic=0; sep= fabs( xi1- data.x1[ic]) + fabs(yi1- data.y1[ic])+ fabs(zi1- data.z1[ic]); if( sep <= slen) { data.icon1[i]= -(ic+1); break; } sep= fabs( xi1- data.x2[ic]) + fabs(yi1- data.y2[ic])+ fabs(zi1- data.z2[ic]); if( sep <= slen) { data.icon1[i]= (ic+1); break; } } /* for( j = 1; j < data.n; j++) */ } /* if( ! jump ) */ /* determine connection data for end 2 of segment. */ if( (ignd > 0) || jump ) { if( zi2 <= -slen) { fprintf( stderr, "xnec2c: conect(): geometry data error\n" "segment %d extends below ground\n", iz ); stop( _("conect(): Geometry data error\n"\ "Segment extends below ground"), ERR_OK ); return( FALSE ); } if( zi2 <= slen) { if( data.icon1[i] == iz ) { fprintf( stderr, "xnec2c: conect(): geometry data error\n" "segment %d lies in ground plane\n", iz ); stop( _("conect(): Geometry data error\n"\ "Segment lies in ground plane"), ERR_OK ); return( FALSE ); } data.icon2[i]= iz; data.z2[i]=0.0; continue; } /* if( zi2 <= slen) */ } /* if( ignd > 0) */ ic= i; for( j = 1; j < data.n; j++ ) { ic++; if( ic >= data.n) ic=0; sep= fabs(xi2- data.x1[ic]) + fabs(yi2- data.y1[ic])+ fabs(zi2- data.z1[ic]); if( sep <= slen) { data.icon2[i]= (ic+1); break; } sep= fabs(xi2- data.x2[ic]) + fabs(yi2- data.y2[ic])+ fabs(zi2- data.z2[ic]); if( sep <= slen) { data.icon2[i]= -(ic+1); break; } } /* for( j = 1; j < data.n; j++ ) */ } /* for( i = 0; i < data.n; i++ ) */ /* find wire-surface connections for new patches */ if( data.m != 0) { ix = -1; i = 0; while( ++i <= data.m ) { ix++; xs= data.px[ix]; ys= data.py[ix]; zs= data.pz[ix]; for( iseg = 0; iseg < data.n; iseg++ ) { xi1= data.x1[iseg]; yi1= data.y1[iseg]; zi1= data.z1[iseg]; xi2= data.x2[iseg]; yi2= data.y2[iseg]; zi2= data.z2[iseg]; /* for first end of segment */ slen=( fabs(xi2- xi1) + fabs(yi2- yi1)+ fabs(zi2- zi1))* SMIN; sep= fabs(xi1- xs)+ fabs(yi1- ys)+ fabs(zi1- zs); /* connection - divide patch into 4 * patches at present array loc. */ if( sep <= slen) { data.icon1[iseg]=PCHCON+ i; ic=0; subph( i, ic ); break; } sep= fabs(xi2- xs)+ fabs(yi2- ys)+ fabs(zi2- zs); if( sep <= slen) { data.icon2[iseg]=PCHCON+ i; ic=0; subph( i, ic ); break; } } /* for( iseg = 0; iseg < data.n; iseg++ ) */ } /* while( ++i <= data.m ) */ } /* if( data.m != 0) */ } /* if( data.n != 0) */ iseg=( data.n+ data.m)/( data.np+ data.mp); if( iseg != 1) { /*** may be error condition?? ***/ if( data.ipsym == 0 ) { fprintf( stderr, "xnec2c: conect(): ipsym = 0\n" ); stop( _("conect(): Error: ipsym = 0"), ERR_OK ); return( FALSE ); } } /* if( iseg != 1) */ /* No wire segments */ if( data.n <= 0) return( TRUE ); /* Allocate to connection buffers */ mreq = (size_t)segj.maxcon * sizeof(int); mem_realloc( (void **)&segj.jco, mreq, "in geometry.c" ); /* Adjust connected segment ends to exactly coincide. * Also find old seg. connecting to new segment */ iseg = 0; for( j = 0; j < data.n; j++ ) { jx = j+1; iend=-1; jend=-1; ix= data.icon1[j]; ic=1; segj.jco[0]= -jx; xa= data.x1[j]; ya= data.y1[j]; za= data.z1[j]; while( TRUE ) { if( (ix != 0) && (ix != (j+1)) && (ix <= PCHCON) ) { do { if( ix < 0 ) ix= -ix; else jend= -jend; jump = FALSE; if( ix == jx ) break; if( ix < jx ) { jump = TRUE; break; } /* Record max. no. of connections */ ic++; if( ic >= segj.maxcon ) { segj.maxcon = ic+1; mreq = (size_t)segj.maxcon * sizeof(int); mem_realloc( (void **)&segj.jco, mreq, "in geometry.c" ); } segj.jco[ic-1]= ix* jend; ixx = ix-1; if( jend != 1) { xa= xa+ data.x1[ixx]; ya= ya+ data.y1[ixx]; za= za+ data.z1[ixx]; ix= data.icon1[ixx]; continue; } xa= xa+ data.x2[ixx]; ya= ya+ data.y2[ixx]; za= za+ data.z2[ixx]; ix= data.icon2[ixx]; } /* do */ while( ix != 0 ); if( jump && (iend == 1) ) break; else if( jump ) { iend=1; jend=1; ix= data.icon2[j]; ic=1; segj.jco[0]= jx; xa= data.x2[j]; ya= data.y2[j]; za= data.z2[j]; continue; } sep= (double)ic; xa= xa/ sep; ya= ya/ sep; za= za/ sep; for( i = 0; i < ic; i++ ) { ix= segj.jco[i]; if( ix <= 0) { ix= -ix; ixx = ix-1; data.x1[ixx]= xa; data.y1[ixx]= ya; data.z1[ixx]= za; continue; } ixx = ix-1; data.x2[ixx]= xa; data.y2[ixx]= ya; data.z2[ixx]= za; } /* for( i = 0; i < ic; i++ ) */ if( ic >= 3) iseg++; } /*if( (ix != 0) && (ix != j) && (ix <= PCHCON) ) */ if( iend == 1) break; iend=1; jend=1; ix= data.icon2[j]; ic=1; segj.jco[0]= jx; xa= data.x2[j]; ya= data.y2[j]; za= data.z2[j]; } /* while( TRUE ) */ } /* for( j = 0; j < data.n; j++ ) */ mreq = (size_t)segj.maxcon * sizeof(double); mem_realloc( (void **)&segj.ax, mreq, "in geometry.c" ); mem_realloc( (void **)&segj.bx, mreq, "in geometry.c" ); mem_realloc( (void **)&segj.cx, mreq, "in geometry.c" ); return( TRUE ); } /*-----------------------------------------------------------------------*/ /* subroutine helix generates segment geometry */ /* data for a helix of ns segments */ void helix( double s, double hl, double a1, double b1, double a2, double b2, double rad, int ns, int itg ) { int ist, i; size_t mreq; double zinc, copy; ist = data.n; data.n += ns; data.np = data.n; data.mp = data.m; data.ipsym = 0; if( ns < 1) return; zinc= fabs( hl/ ns); /* Reallocate tags buffer */ mreq = (size_t)data.n * sizeof(int); mem_realloc( (void **)&data.itag, mreq, "in geometry.c" ); /* Reallocate wire buffers */ mreq = (size_t)data.n * sizeof(double); mem_realloc( (void **)&data.x1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.x2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.bi, mreq, "in geometry.c" ); data.z1[ist] = 0.0; for( i = ist; i < data.n; i++ ) { data.bi[i]= rad; data.itag[i]= itg; if( i != ist ) data.z1[i]= data.z1[i-1]+ zinc; data.z2[i]= data.z1[i]+ zinc; if( a2 == a1) { if( b1 == 0.0) b1= a1; data.x1[i]= a1* cos(2.0* PI* data.z1[i]/ s); data.y1[i]= b1* sin(2.0* PI* data.z1[i]/ s); data.x2[i]= a1* cos(2.0* PI* data.z2[i]/ s); data.y2[i]= b1* sin(2.0* PI* data.z2[i]/ s); } else { if( b2 == 0.0) b2= a2; data.x1[i]=( a1+( a2- a1)* data.z1[i] / fabs( hl))* cos(2.0* PI* data.z1[i]/ s); data.y1[i]=( b1+( b2- b1)* data.z1[i] / fabs( hl))* sin(2.0* PI* data.z1[i]/ s); data.x2[i]=( a1+( a2- a1)* data.z2[i] / fabs( hl))* cos(2.0* PI* data.z2[i]/ s); data.y2[i]=( b1+( b2- b1)* data.z2[i] / fabs( hl))* sin(2.0* PI* data.z2[i]/ s); } /* if( a2 == a1) */ if( hl > 0.0) continue; copy= data.x1[i]; data.x1[i]= data.y1[i]; data.y1[i]= copy; copy= data.x2[i]; data.x2[i]= data.y2[i]; data.y2[i]= copy; } /* for( i = ist; i < data.n; i++ ) */ return; } /*-----------------------------------------------------------------------*/ /* isegno returns the segment number of the mth segment having the */ /* tag number itagi. if itagi=0 segment number m is returned. */ int isegno( int itagi, int mx) { int icnt, iseg; if( mx <= 0) { fprintf( stderr, "xnec2c: isegno(): check data, parameter specifying segment\n" "position in a group of equal tags must not be zero\n" ); stop( _("isegno(): Parameter specifying segment\n"\ "position in a group of equal tags is zero"), ERR_OK ); return( -1 ); } icnt=0; if( itagi == 0) { iseg = mx; return( iseg ); } if( data.n > 0) { int i; for( i = 0; i < data.n; i++ ) { if( data.itag[i] != itagi ) continue; icnt++; if( icnt == mx) { iseg= i+1; return( iseg ); } } /* for( i = 0; i < data.n; i++ ) */ } /* if( data.n > 0) */ fprintf( stderr, "xnec2c: isegno(): no segment has an itag of %d\n", itagi ); stop( _("isegno(): Segment tag number error"), ERR_OK ); return( -1 ); } /*-----------------------------------------------------------------------*/ /* subroutine move moves the structure with respect to its */ /* coordinate system or reproduces structure in new positions. */ /* structure is rotated about x,y,z axes by rox,roy,roz */ /* respectively, then shifted by xs,ys,zs */ gboolean move( double rox, double roy, double roz, double xs, double ys, double zs, int its, int nrpt, int itgi ) { int nrp, ix, i1, k, i; size_t mreq; double sps, cps, sth, cth, sph, cph, xx, xy; double xz, yx, yy, yz, zx, zy, zz, xi, yi, zi; if( fabs( rox)+ fabs( roy) > 1.0e-10) data.ipsym= data.ipsym*3; sps= sin( rox); cps= cos( rox); sth= sin( roy); cth= cos( roy); sph= sin( roz); cph= cos( roz); xx= cph* cth; xy= cph* sth* sps- sph* cps; xz= cph* sth* cps+ sph* sps; yx= sph* cth; yy= sph* sth* sps+ cph* cps; yz= sph* sth* cps- cph* sps; zx= -sth; zy= cth* sps; zz= cth* cps; if( nrpt == 0) nrp=1; else nrp= nrpt; ix=1; if( data.n > 0) { int ir; i1= isegno( its, 1); if( i1 < 0 ) return( FALSE ); /* my addition, error */ if( i1 < 1) i1= 1; ix= i1; if( nrpt == 0) k= i1-1; else { k= data.n; /* Reallocate tags buffer */ mreq = (size_t)(data.n + data.m + (data.n + 1 - i1) * nrpt) * sizeof(int); mem_realloc( (void **)&data.itag, mreq, "in geometry.c" ); /* Reallocate wire buffers */ mreq = (size_t)(data.n + (data.n + 1 - i1) * nrpt) * sizeof(double); mem_realloc( (void **)&data.x1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.x2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.bi, mreq, "in geometry.c" ); } for( ir = 0; ir < nrp; ir++ ) { for( i = i1-1; i < data.n; i++ ) { xi= data.x1[i]; yi= data.y1[i]; zi= data.z1[i]; data.x1[k]= xi* xx+ yi* xy+ zi* xz+ xs; data.y1[k]= xi* yx+ yi* yy+ zi* yz+ ys; data.z1[k]= xi* zx+ yi* zy+ zi* zz+ zs; xi= data.x2[i]; yi= data.y2[i]; zi= data.z2[i]; data.x2[k]= xi* xx+ yi* xy+ zi* xz+ xs; data.y2[k]= xi* yx+ yi* yy+ zi* yz+ ys; data.z2[k]= xi* zx+ yi* zy+ zi* zz+ zs; data.bi[k]= data.bi[i]; data.itag[k]= data.itag[i]; if( data.itag[i] != 0) data.itag[k]= data.itag[i]+ itgi; k++; } /* for( i = i1; i < data.n; i++ ) */ i1= data.n+1; data.n= k; } /* for( ir = 0; ir < nrp; ir++ ) */ } /* if( data.n >= n2) */ if( data.m > 0) { int ii; i1 = 0; if( nrpt == 0) k= 0; else k = data.m; /* Reallocate patch buffers */ mreq = (size_t)(data.m * (nrpt + 1)) * sizeof(double); mem_realloc( (void **)&data.px, mreq, "in geometry.c" ); mem_realloc( (void **)&data.py, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pz, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pbi, mreq, "in geometry.c" ); mem_realloc( (void **)&data.psalp, mreq, "in geometry.c" ); for( ii = 0; ii < nrp; ii++ ) { for( i = i1; i < data.m; i++ ) { xi= data.px[i]; yi= data.py[i]; zi= data.pz[i]; data.px[k]= xi* xx+ yi* xy+ zi* xz+ xs; data.py[k]= xi* yx+ yi* yy+ zi* yz+ ys; data.pz[k]= xi* zx+ yi* zy+ zi* zz+ zs; xi= data.t1x[i]; yi= data.t1y[i]; zi= data.t1z[i]; data.t1x[k]= xi* xx+ yi* xy+ zi* xz; data.t1y[k]= xi* yx+ yi* yy+ zi* yz; data.t1z[k]= xi* zx+ yi* zy+ zi* zz; xi= data.t2x[i]; yi= data.t2y[i]; zi= data.t2z[i]; data.t2x[k]= xi* xx+ yi* xy+ zi* xz; data.t2y[k]= xi* yx+ yi* yy+ zi* yz; data.t2z[k]= xi* zx+ yi* zy+ zi* zz; data.psalp[k]= data.psalp[i]; data.pbi[k]= data.pbi[i]; k++; } /* for( i = i1; i < data.m; i++ ) */ i1= data.m; data.m = k; } /* for( ii = 0; ii < nrp; ii++ ) */ } /* if( data.m >= m2) */ if( (nrpt == 0) && (ix == 1) ) return( TRUE ); data.np= data.n; data.mp= data.m; data.ipsym=0; return( TRUE ); } /*-----------------------------------------------------------------------*/ /* patch generates and modifies patch geometry data */ gboolean patch( int nx, int ny, double ax1, double ay1, double az1, double ax2, double ay2, double az2, double ax3, double ay3, double az3, double ax4, double ay4, double az4 ) { int mi, ntp; size_t mreq; double s1x=0.0, s1y=0.0, s1z=0.0; double s2x=0.0, s2y=0.0, s2z=0.0, xst=0.0; double znv, xnv, ynv, xa, xn2, yn2; double zn2; /* new patches. for nx=0, ny=1,2,3,4 patch is (respectively) */; /* arbitrary, rectagular, triangular, or quadrilateral. */ /* for nx and ny > 0 a rectangular surface is produced with */ /* nx by ny rectangular patches. */ data.m++; mi= data.m-1; /* Reallocate patch buffers */ mreq = (size_t)data.m * sizeof(double); mem_realloc( (void **)&data.px, mreq, "in geometry.c" ); mem_realloc( (void **)&data.py, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pz, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2y, mreq, "in geometry.c"); mem_realloc( (void **)&data.t2z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pbi, mreq, "in geometry.c" ); mem_realloc( (void **)&data.psalp, mreq, "in geometry.c" ); if( nx > 0) ntp=2; else ntp= ny; if( ntp <= 1) { data.px[mi]= ax1; data.py[mi]= ay1; data.pz[mi]= az1; data.pbi[mi]= az2; znv= cos( ax2); xnv= znv* cos( ay2); ynv= znv* sin( ay2); znv= sin( ax2); xa= sqrt( xnv* xnv+ ynv* ynv); if( xa >= 1.0e-6) { data.t1x[mi]= -ynv/ xa; data.t1y[mi]= xnv/ xa; data.t1z[mi]=0.0; } else { data.t1x[mi]=1.0; data.t1y[mi]=0.0; data.t1z[mi]=0.0; } } /* if( ntp <= 1) */ else { s1x= ax2- ax1; s1y= ay2- ay1; s1z= az2- az1; s2x= ax3- ax2; s2y= ay3- ay2; s2z= az3- az2; if( nx != 0) { s1x= s1x/ nx; s1y= s1y/ nx; s1z= s1z/ nx; s2x= s2x/ ny; s2y= s2y/ ny; s2z= s2z/ ny; } xnv= s1y* s2z- s1z* s2y; ynv= s1z* s2x- s1x* s2z; znv= s1x* s2y- s1y* s2x; xa= sqrt( xnv* xnv+ ynv* ynv+ znv* znv); xnv= xnv/ xa; ynv= ynv/ xa; znv= znv/ xa; xst= sqrt( s1x* s1x+ s1y* s1y+ s1z* s1z); data.t1x[mi]= s1x/ xst; data.t1y[mi]= s1y/ xst; data.t1z[mi]= s1z/ xst; if( ntp <= 2) { data.px[mi]= ax1+.5*( s1x+ s2x); data.py[mi]= ay1+.5*( s1y+ s2y); data.pz[mi]= az1+.5*( s1z+ s2z); data.pbi[mi]= xa; } else { if( ntp != 4) { data.px[mi]=( ax1+ ax2+ ax3)/3.0; data.py[mi]=( ay1+ ay2+ ay3)/3.0; data.pz[mi]=( az1+ az2+ az3)/3.0; data.pbi[mi]=.5* xa; } else { s1x= ax3- ax1; s1y= ay3- ay1; s1z= az3- az1; s2x= ax4- ax1; s2y= ay4- ay1; s2z= az4- az1; xn2= s1y* s2z- s1z* s2y; yn2= s1z* s2x- s1x* s2z; zn2= s1x* s2y- s1y* s2x; xst= sqrt( xn2* xn2+ yn2* yn2+ zn2* zn2); double salpn=1.0/(3.0*( xa+ xst)); data.px[mi]=( xa*( ax1+ ax2+ ax3) + xst*( ax1+ ax3+ ax4))* salpn; data.py[mi]=( xa*( ay1+ ay2+ ay3) + xst*( ay1+ ay3+ ay4))* salpn; data.pz[mi]=( xa*( az1+ az2+ az3) + xst*( az1+ az3+ az4))* salpn; data.pbi[mi]=.5*( xa+ xst); s1x=( xnv* xn2+ ynv* yn2+ znv* zn2)/ xst; if( s1x <= 0.9998) { fprintf( stderr, "xnec2c: patch(): corners of quadrilateral\n" "patch do not lie in a plane\n" ); stop( _("patch(): Corners of quadrilateral\n"\ "patch do not lie in a plane"), ERR_OK ); return( FALSE ); } } /* if( ntp != 4) */ } /* if( ntp <= 2) */ } /* if( ntp <= 1) */ data.t2x[mi]= ynv* data.t1z[mi]- znv* data.t1y[mi]; data.t2y[mi]= znv* data.t1x[mi]- xnv* data.t1z[mi]; data.t2z[mi]= xnv* data.t1y[mi]- ynv* data.t1x[mi]; data.psalp[mi]=1.0; if( nx != 0) { int iy, ix; double xs, ys, zs, xt, yt, zt; data.m += nx*ny-1; /* Reallocate patch buffers */ mreq = (size_t)data.m * sizeof(double); mem_realloc( (void **)&data.px, mreq, "in geometry.c" ); mem_realloc( (void **)&data.py, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pz, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pbi, mreq, "in geometry.c" ); mem_realloc( (void **)&data.psalp, mreq, "in geometry.c" ); xn2= data.px[mi]- s1x- s2x; yn2= data.py[mi]- s1y- s2y; zn2= data.pz[mi]- s1z- s2z; xs= data.t1x[mi]; ys= data.t1y[mi]; zs= data.t1z[mi]; xt= data.t2x[mi]; yt= data.t2y[mi]; zt= data.t2z[mi]; for( iy = 0; iy < ny; iy++ ) { xn2 += s2x; yn2 += s2y; zn2 += s2z; for( ix = 1; ix <= nx; ix++ ) { xst= (double)ix; data.px[mi]= xn2+ xst* s1x; data.py[mi]= yn2+ xst* s1y; data.pz[mi]= zn2+ xst* s1z; data.pbi[mi]= xa; data.psalp[mi]=1.0; data.t1x[mi]= xs; data.t1y[mi]= ys; data.t1z[mi]= zs; data.t2x[mi]= xt; data.t2y[mi]= yt; data.t2z[mi]= zt; mi++; } /* for( ix = 0; ix < nx; ix++ ) */ } /* for( iy = 0; iy < ny; iy++ ) */ } /* if( nx != 0) */ data.ipsym=0; data.np= data.n; data.mp= data.m; return( TRUE ); } /*-----------------------------------------------------------------------*/ /*** this function was an 'entry point' (part of) 'patch()' ***/ void subph( int nx, int ny ) { int mia, ix, iy, mi; size_t mreq; double xs, ys, zs, xa, xst, s1x, s1y; double s1z, s2x, s2y, s2z, saln, xt, yt; /* Reallocate patch buffers */ if( ny == 0 ) data.m += 3; else data.m += 4; mreq = (size_t)data.m * sizeof(double); mem_realloc( (void **)&data.px, mreq, "in geometry.c" ); mem_realloc( (void **)&data.py, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pz, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pbi, mreq, "in geometry.c" ); mem_realloc( (void **)&data.psalp, mreq, "in geometry.c" ); if( !CHILD ) { mreq = (size_t)(data.n + 2 * data.m) * sizeof(GdkSegment); mem_realloc( (void **)&structure_segs, mreq, "in geometry.c" ); } /* Shift patches to make room for new ones */ if( (ny == 0) && (nx != data.m) ) { for( iy = data.m-1; iy > nx+2; iy-- ) { ix = iy-3; data.px[iy]= data.px[ix]; data.py[iy]= data.py[ix]; data.pz[iy]= data.pz[ix]; data.pbi[iy]= data.pbi[ix]; data.psalp[iy]= data.psalp[ix]; data.t1x[iy]= data.t1x[ix]; data.t1y[iy]= data.t1y[ix]; data.t1z[iy]= data.t1z[ix]; data.t2x[iy]= data.t2x[ix]; data.t2y[iy]= data.t2y[ix]; data.t2z[iy]= data.t2z[ix]; } } /* if( (ny == 0) || (nx != m) ) */ /* divide patch for connection */ mi= nx-1; xs= data.px[mi]; ys= data.py[mi]; zs= data.pz[mi]; xa= data.pbi[mi]/4.0; xst= sqrt( xa)/2.0; s1x= data.t1x[mi]; s1y= data.t1y[mi]; s1z= data.t1z[mi]; s2x= data.t2x[mi]; s2y= data.t2y[mi]; s2z= data.t2z[mi]; saln= data.psalp[mi]; xt= xst; yt= xst; if( ny == 0) mia= mi; else { data.mp++; mia= data.m-1; } for( ix = 1; ix <= 4; ix++ ) { data.px[mia]= xs+ xt* s1x+ yt* s2x; data.py[mia]= ys+ xt* s1y+ yt* s2y; data.pz[mia]= zs+ xt* s1z+ yt* s2z; data.pbi[mia]= xa; data.t1x[mia]= s1x; data.t1y[mia]= s1y; data.t1z[mia]= s1z; data.t2x[mia]= s2x; data.t2y[mia]= s2y; data.t2z[mia]= s2z; data.psalp[mia]= saln; if( ix == 2) yt= -yt; if( (ix == 1) || (ix == 3) ) xt= -xt; mia++; } if( nx <= data.mp) data.mp += 3; if( ny > 0 ) data.pz[mi]=10000.0; /* Process new patches created */ if( ! CHILD ) New_Patch_Data(); return; } /*-----------------------------------------------------------------------*/ /* reflc reflects partial structure along x,y, or z axes */ /* or rotates structure to complete a symmetric structure. */ gboolean reflc( int ix, int iy, int iz, int iti, int nop ) { int i, nx, itagi, k; size_t mreq; double e1, e2, fnop, sam, cs, ss, xk, yk; if( nop == 0) return( TRUE ); data.np= data.n; data.mp= data.m; data.ipsym=0; if( ix >= 0) { data.ipsym=1; /* reflect along z axis */ if( iz != 0) { data.ipsym=2; if( data.n > 0 ) { /* Reallocate tags buffer */ mreq = (size_t)(2 * data.n + data.m) * sizeof(int); mem_realloc( (void **)&data.itag, mreq, "in geometry.c" ); /* Reallocate wire buffers */ mreq = (size_t)(2 * data.n) * sizeof(double); mem_realloc( (void **)&data.x1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.x2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.bi, mreq, "in geometry.c" ); for( i = 0; i < data.n; i++ ) { nx= i+ data.n; e1= data.z1[i]; e2= data.z2[i]; if( (fabs(e1)+fabs(e2) <= 1.0e-5) || (e1*e2 < -1.0e-6) ) { fprintf( stderr, "xnec2c: reflc(): geometry data error\n" "segment %d lies in plane of symmetry\n", i+1 ); stop( _("reflc(): Geometry data error\n"\ "Segment lies in plane of symmetry"), ERR_OK ); return( FALSE ); } data.x1[nx]= data.x1[i]; data.y1[nx]= data.y1[i]; data.z1[nx]= -e1; data.x2[nx]= data.x2[i]; data.y2[nx]= data.y2[i]; data.z2[nx]= -e2; itagi= data.itag[i]; if( itagi == 0) data.itag[nx]=0; if( itagi != 0) data.itag[nx]= itagi+ iti; data.bi[nx]= data.bi[i]; } /* for( i = 0; i < data.n; i++ ) */ data.n= data.n*2; iti= iti*2; } /* if( data.n > 0) */ if( data.m > 0 ) { /* Reallocate patch buffers */ mreq = (size_t)(2 * data.m) * sizeof(double); mem_realloc( (void **)&data.px, mreq, "in geometry.c" ); mem_realloc( (void **)&data.py, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pz, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pbi, mreq, "in geometry.c" ); mem_realloc( (void **)&data.psalp, mreq, "in geometry.c" ); for( i = 0; i < data.m; i++ ) { nx = i+data.m; if( fabs(data.pz[i]) <= 1.0e-10) { fprintf( stderr, "xnec2c: reflc(): geometry data error\n" "patch %d lies in plane of symmetry\n", i+1 ); stop( _("reflc(): Geometry data error\n"\ "Patch lies in plane of symmetry"), ERR_OK ); return( FALSE ); } data.px[nx]= data.px[i]; data.py[nx]= data.py[i]; data.pz[nx]= -data.pz[i]; data.t1x[nx]= data.t1x[i]; data.t1y[nx]= data.t1y[i]; data.t1z[nx]= -data.t1z[i]; data.t2x[nx]= data.t2x[i]; data.t2y[nx]= data.t2y[i]; data.t2z[nx]= -data.t2z[i]; data.psalp[nx]= -data.psalp[i]; data.pbi[nx]= data.pbi[i]; } data.m= data.m*2; } /* if( data.m >= m2) */ } /* if( iz != 0) */ /* reflect along y axis */ if( iy != 0) { if( data.n > 0) { /* Reallocate tags buffer */ mreq = (size_t)(2 * data.n) * sizeof(int); mem_realloc( (void **)&data.itag, mreq, "in geometry.c" ); /* Reallocate wire buffers */ mreq = (size_t)(2 * data.n) * sizeof(double); mem_realloc( (void **)&data.x1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.x2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.bi, mreq, "in geometry.c" ); for( i = 0; i < data.n; i++ ) { nx= i+ data.n; e1= data.y1[i]; e2= data.y2[i]; if( (fabs(e1)+fabs(e2) <= 1.0e-5) || (e1*e2 < -1.0e-6) ) { fprintf( stderr, "xnec2c: reflc(): geometry data error\n" "segment %d lies in plane of symmetry\n", i+1 ); stop( _("reflc(): Geometry data error\n"\ "Segment lies in plane of symmetry"), ERR_OK ); return( FALSE ); } data.x1[nx]= data.x1[i]; data.y1[nx]= -e1; data.z1[nx]= data.z1[i]; data.x2[nx]= data.x2[i]; data.y2[nx]= -e2; data.z2[nx]= data.z2[i]; itagi= data.itag[i]; if( itagi == 0) data.itag[nx]=0; if( itagi != 0) data.itag[nx]= itagi+ iti; data.bi[nx]= data.bi[i]; } /* for( i = n2-1; i < data.n; i++ ) */ data.n= data.n*2; iti= iti*2; } /* if( data.n >= n2) */ if( data.m > 0 ) { /* Reallocate patch buffers */ mreq = (size_t)(2 * data.m) * sizeof(double); mem_realloc( (void **)&data.px, mreq, "in geometry.c" ); mem_realloc( (void **)&data.py, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pz, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pbi, mreq, "in geometry.c" ); mem_realloc( (void **)&data.psalp, mreq, "in geometry.c" ); for( i = 0; i < data.m; i++ ) { nx= i+data.m; if( fabs( data.py[i]) <= 1.0e-10) { fprintf( stderr, "xnec2c: reflc(): geometry data error\n" "patch %d lies in plane of symmetry\n", i+1 ); stop( _("reflc(): Geometry data error\n"\ "Patch lies in plane of symmetry"), ERR_OK ); return( FALSE ); } data.px[nx]= data.px[i]; data.py[nx]= -data.py[i]; data.pz[nx]= data.pz[i]; data.t1x[nx]= data.t1x[i]; data.t1y[nx]= -data.t1y[i]; data.t1z[nx]= data.t1z[i]; data.t2x[nx]= data.t2x[i]; data.t2y[nx]= -data.t2y[i]; data.t2z[nx]= data.t2z[i]; data.psalp[nx]= -data.psalp[i]; data.pbi[nx]= data.pbi[i]; } /* for( i = m2; i <= data.m; i++ ) */ data.m= data.m*2; } /* if( data.m >= m2) */ } /* if( iy != 0) */ /* reflect along x axis */ if( ix == 0 ) return( TRUE ); if( data.n > 0 ) { /* Reallocate tags buffer */ mreq = (size_t)(2 * data.n) * sizeof(int); mem_realloc( (void **)&data.itag, mreq, "in geometry.c" ); /* Reallocate wire buffers */ mreq = (size_t)(2 * data.n) * sizeof(double); mem_realloc( (void **)&data.x1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.x2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.bi, mreq, "in geometry.c" ); for( i = 0; i < data.n; i++ ) { nx= i+ data.n; e1= data.x1[i]; e2= data.x2[i]; if( (fabs(e1)+fabs(e2) <= 1.0e-5) || (e1*e2 < -1.0e-6) ) { fprintf( stderr, "xnec2c: reflc(): geometry data error\n" "segment %d lies in plane of symmetry\n", i+1 ); stop( _("reflc(): Geometry data error\n"\ "Segment lies in plane of symmetry"), ERR_OK ); return( FALSE ); } data.x1[nx]= -e1; data.y1[nx]= data.y1[i]; data.z1[nx]= data.z1[i]; data.x2[nx]= -e2; data.y2[nx]= data.y2[i]; data.z2[nx]= data.z2[i]; itagi= data.itag[i]; if( itagi == 0) data.itag[nx]=0; if( itagi != 0) data.itag[nx]= itagi+ iti; data.bi[nx]= data.bi[i]; } data.n= data.n*2; } /* if( data.n > 0) */ if( data.m == 0 ) return( TRUE ); /* Reallocate patch buffers */ mreq = (size_t)(2 * data.m) * sizeof(double); mem_realloc( (void **)&data.px, mreq, "in geometry.c" ); mem_realloc( (void **)&data.py, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pz, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pbi, mreq, "in geometry.c" ); mem_realloc( (void **)&data.psalp, mreq, "in geometry.c" ); for( i = 0; i < data.m; i++ ) { nx= i+data.m; if( fabs( data.px[i]) <= 1.0e-10) { fprintf( stderr, "xnec2c: reflc(): geometry data error\n" "patch %d lies in plane of symmetry\n", i+1 ); stop( _("reflc(): Geometry data error\n"\ "Patch lies in plane of symmetry"), ERR_OK ); return( FALSE ); } data.px[nx]= -data.px[i]; data.py[nx]= data.py[i]; data.pz[nx]= data.pz[i]; data.t1x[nx]= -data.t1x[i]; data.t1y[nx]= data.t1y[i]; data.t1z[nx]= data.t1z[i]; data.t2x[nx]= -data.t2x[i]; data.t2y[nx]= data.t2y[i]; data.t2z[nx]= data.t2z[i]; data.psalp[nx]= -data.psalp[i]; data.pbi[nx]= data.pbi[i]; } data.m= data.m*2; return( TRUE ); } /* if( ix >= 0) */ /* reproduce structure with rotation to form cylindrical structure */ fnop= (double)nop; data.ipsym=-1; sam=TP/ fnop; cs= cos( sam); ss= sin( sam); if( data.n > 0) { data.n *= nop; nx= data.np; /* Reallocate tags buffer */ mreq = (size_t)data.n * sizeof(int); mem_realloc( (void **)&data.itag, mreq, "in geometry.c" ); /* Reallocate wire buffers */ mreq = (size_t)data.n * sizeof(double); mem_realloc( (void **)&data.x1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.x2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.bi, mreq, "in geometry.c" ); for( i = nx; i < data.n; i++ ) { k= i- data.np; xk= data.x1[k]; yk= data.y1[k]; data.x1[i]= xk* cs- yk* ss; data.y1[i]= xk* ss+ yk* cs; data.z1[i]= data.z1[k]; xk= data.x2[k]; yk= data.y2[k]; data.x2[i]= xk* cs- yk* ss; data.y2[i]= xk* ss+ yk* cs; data.z2[i]= data.z2[k]; data.bi[i]= data.bi[k]; itagi= data.itag[k]; if( itagi == 0) data.itag[i]=0; if( itagi != 0) data.itag[i]= itagi+ iti; } } /* if( data.n >= n2) */ if( data.m == 0 ) return( TRUE ); data.m *= nop; nx= data.mp; /* Reallocate patch buffers */ mreq = (size_t)data.m * sizeof(double); mem_realloc( (void **)&data.px, mreq, "in geometry.c" ); mem_realloc( (void **)&data.py, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pz, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t1z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2x, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2y, mreq, "in geometry.c" ); mem_realloc( (void **)&data.t2z, mreq, "in geometry.c" ); mem_realloc( (void **)&data.pbi, mreq, "in geometry.c" ); mem_realloc( (void **)&data.psalp, mreq, "in geometry.c" ); for( i = nx; i < data.m; i++ ) { k = i-data.mp; xk= data.px[k]; yk= data.py[k]; data.px[i]= xk* cs- yk* ss; data.py[i]= xk* ss+ yk* cs; data.pz[i]= data.pz[k]; xk= data.t1x[k]; yk= data.t1y[k]; data.t1x[i]= xk* cs- yk* ss; data.t1y[i]= xk* ss+ yk* cs; data.t1z[i]= data.t1z[k]; xk= data.t2x[k]; yk= data.t2y[k]; data.t2x[i]= xk* cs- yk* ss; data.t2y[i]= xk* ss+ yk* cs; data.t2z[i]= data.t2z[k]; data.psalp[i]= data.psalp[k]; data.pbi[i]= data.pbi[k]; } /* for( i = nx; i < data.m; i++ ) */ return( TRUE ); } /*-----------------------------------------------------------------------*/ /* subroutine wire generates segment geometry */ /* data for a straight wire of ns segments. */ void wire( double xw1, double yw1, double zw1, double xw2, double yw2, double zw2, double rad, double rdel, double rrad, int ns, int itg ) { int ist, i; size_t mreq; double xd, yd, zd, delz, rd, fns, radz; double xs1, ys1, zs1, xs2, ys2, zs2; if( ns < 1) return; ist= data.n; data.n= data.n+ ns; data.np= data.n; data.mp= data.m; data.ipsym=0; /* Reallocate tags buffer */ mreq = (size_t)data.n * sizeof(int); mem_realloc( (void **)&data.itag, mreq, "in geometry.c" ); /* Reallocate wire buffers */ mreq = (size_t)data.n * sizeof(double); mem_realloc( (void **)&data.x1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z1, mreq, "in geometry.c" ); mem_realloc( (void **)&data.x2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.y2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.z2, mreq, "in geometry.c" ); mem_realloc( (void **)&data.bi, mreq, "in geometry.c" ); xd= xw2- xw1; yd= yw2- yw1; zd= zw2- zw1; if( fabs( rdel-1.0) >= 1.0e-6) { delz= sqrt( xd* xd+ yd* yd+ zd* zd); xd= xd/ delz; yd= yd/ delz; zd= zd/ delz; delz= delz*(1.0- rdel)/(1.0- pow(rdel, ns) ); rd= rdel; } else { fns= ns; xd= xd/ fns; yd= yd/ fns; zd= zd/ fns; delz=1.0; rd=1.0; } radz= rad; xs1= xw1; ys1= yw1; zs1= zw1; for( i = ist; i < data.n; i++ ) { data.itag[i]= itg; xs2= xs1+ xd* delz; ys2= ys1+ yd* delz; zs2= zs1+ zd* delz; data.x1[i]= xs1; data.y1[i]= ys1; data.z1[i]= zs1; data.x2[i]= xs2; data.y2[i]= ys2; data.z2[i]= zs2; data.bi[i]= radz; delz= delz* rd; radz= radz* rrad; xs1= xs2; ys1= ys2; zs1= zs2; } data.x2[data.n-1]= xw2; data.y2[data.n-1]= yw2; data.z2[data.n-1]= zw2; return; } /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/geometry.h000066400000000000000000000016101257141547200153430ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef GEOMETRY_H #define GEOMETRY_H 1 #include "common.h" #include "support.h" #endif xnec2c-3.4/src/gnuplot.c000066400000000000000000000363231257141547200152040ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* * gnuplot.c * * gnuplot routines for xnec2c */ #include "gnuplot.h" #include "shared.h" /*-----------------------------------------------------------------------*/ /* Save_FreqPlots_Gnuplot_Data() * * Saves frequency plots data to a file for gnuplot */ void Save_FreqPlots_Gnuplot_Data( char *filename ) { /* Abort if plot data not available */ if( isFlagClear(FREQ_LOOP_DONE) ) return; /* Used to calculate net gain */ double Zr, Zo, Zi; /* Open gplot file, abort on error */ FILE *fp = NULL; if( !Open_File(&fp, filename, "w") ) return; /* Plot max gain vs frequency, if possible */ if( isFlagSet(PLOT_GMAX) && isFlagSet(ENABLE_RDPAT) ) { int nth, nph, idx, pol; gboolean no_fbr; double gmax, /* Max gain buffer */ netgain, /* Viewer direction net gain buffer */ gdir_phi, /* Direction in phi of gain */ fbratio; /* Front to back ratio */ /* Find max gain and direction, F/B ratio */ no_fbr = FALSE; netgain = 0; /* Polarization type and impedance */ pol = calc_data.pol_type; Zo = calc_data.zo; /* Save data for all frequency steps that were used */ fprintf( fp, _("# Gain and F/B Ratio vs Frequency\n") ); for( idx = 0; idx <= calc_data.lastf; idx++ ) { double fbdir; int fbidx, mgidx; /* Index to gtot buffer where max gain * occurs for given polarization type */ mgidx = rad_pattern[idx].max_gain_idx[pol]; /* Max gain for given polarization type */ gmax = rad_pattern[idx].gtot[mgidx] + Polarization_Factor(pol, idx, mgidx); /* Net gain if selected */ if( isFlagSet(PLOT_NETGAIN) ) { Zr = impedance_data.zreal[idx]; Zi = impedance_data.zimag[idx]; netgain = gmax + 10*log10(4*Zr*Zo/(pow(Zr+Zo,2)+pow(Zi,2))); } /* Radiation angle/phi where max gain occurs */ gdir_phi = rad_pattern[idx].max_gain_phi[pol]; /* Find F/B direction in theta */ fbdir = 180.0 - rad_pattern[idx].max_gain_tht[pol]; if( fpat.dth == 0.0 ) nth = 0; else nth = (int)( fbdir/fpat.dth + 0.5 ); /* If the antenna is modelled over ground, then use the same * theta as the max gain direction, relying on phi alone to * take us to the back. Patch supplied by Rik van Riel AB1KW */ if( (nth >= fpat.nth) || (nth < 0) ) { fbdir = rad_pattern[idx].max_gain_tht[pol]; if( fpat.dth == 0.0 ) nth = 0; else nth = (int)( fbdir/fpat.dth + 0.5 ); } /* Find F/B direction in phi */ fbdir = gdir_phi + 180.0; if( fbdir >= 360.0 ) fbdir -= 360.0; nph = (int)( fbdir/fpat.dph + 0.5 ); /* No F/B calc. possible if no phi step at +180 from max gain */ if( (nph >= fpat.nph) || (nph < 0) ) no_fbr = TRUE; /* Index to gtot buffer for gain in back direction */ fbidx = nth + nph*fpat.nth; /* Front to back ratio */ fbratio = pow( 10.0, gmax / 10.0 ); fbratio /= pow( 10.0, (rad_pattern[idx].gtot[fbidx] + Polarization_Factor(pol, idx, fbidx)) / 10.0 ); fbratio = 10.0 * log10( fbratio ); if( no_fbr && isFlagClear(PLOT_NETGAIN) ) /* Plot max gain only */ fprintf( fp, "%13.6E %10.3E\n", save.freq[idx], gmax ); else if( isFlagSet(PLOT_NETGAIN) ) /* Plot max gain and net gain */ fprintf( fp, "%13.6E %10.3E %10.3E\n", save.freq[idx], gmax, netgain ); else if( !no_fbr ) /* Plot max gain and F/B ratio */ fprintf( fp, "%13.6E %10.3E %10.3E\n", save.freq[idx], gmax, fbratio ); } /* for( idx = 0; idx < calc_data.lastf; idx++ ) */ /* Plot gain direction in phi and theta */ if( isFlagSet(PLOT_GAIN_DIR) ) { fprintf( fp, "\n\n" ); fprintf( fp, _("# Direction of gain in theta and phi\n") ); for( idx = 0; idx < calc_data.lastf; idx++ ) { double gdir_tht; /* Direction in theta of gain */ /* Radiation angle/phi where max gain occurs */ gdir_tht = 90.0 - rad_pattern[idx].max_gain_tht[pol]; gdir_phi = rad_pattern[idx].max_gain_phi[pol]; fprintf( fp, "%13.6E %10.3E %10.3E\n", save.freq[idx], gdir_tht, gdir_phi ); } /* for( idx = 0; idx < calc_data.lastf; idx++ ) */ } /* if( isFlagSet(PLOT_GAIN_DIR) ) */ fprintf( fp, "\n\n" ); } /* if( isFlagSet(PLOT_GMAX) && isFlagSet(ENABLE_RDPAT) ) */ /* Plot VSWR vs freq */ if( isFlagSet(PLOT_VSWR) ) { int idx; double vswr, gamma; double zrpro2, zrmro2, zimag2; /* Calculate VSWR */ fprintf( fp, _("# VSWR vs Frequency\n") ); for(idx = 0; idx <= calc_data.lastf; idx++ ) { zrpro2 = impedance_data.zreal[idx] + calc_data.zo; zrpro2 *= zrpro2; zrmro2 = impedance_data.zreal[idx] - calc_data.zo; zrmro2 *= zrmro2; zimag2 = impedance_data.zimag[idx] * impedance_data.zimag[idx]; gamma = sqrt( (zrmro2 + zimag2)/(zrpro2 + zimag2) ); vswr = (1+gamma)/(1-gamma); if( vswr > 10.0 ) vswr = 10.0; fprintf( fp, "%13.6E %10.3E\n", save.freq[idx], vswr ); } fprintf( fp, "\n\n" ); } /* if( isFlagSet(PLOT_VSWR) ) */ /* Plot z-real and z-imag */ if( isFlagSet(PLOT_ZREAL_ZIMAG) ) { int idx; fprintf( fp, _("# Z real & Z imaginary vs Frequency\n") ); for(idx = 0; idx <= calc_data.lastf; idx++ ) fprintf( fp, "%13.6E %10.3E %10.3E\n", save.freq[idx], impedance_data.zreal[idx], impedance_data.zimag[idx] ); fprintf( fp, "\n\n" ); } /* if( isFlagSet(PLOT_ZREAL_ZIMAG) ) */ /* Plot z-magn and z-phase */ if( isFlagSet(PLOT_ZMAG_ZPHASE) ) { int idx; fprintf( fp, _("# Z magnitude & Z phase vs Frequency\n") ); for(idx = 0; idx <= calc_data.lastf; idx++ ) fprintf( fp, "%13.6E %10.3E %10.3E\n", save.freq[idx], impedance_data.zmagn[idx], impedance_data.zphase[idx] ); } /* if( isFlagSet(PLOT_ZREAL_ZIMAG) ) */ fclose(fp); } /* Save_FreqPlots_Gnuplot_Data() */ /*-----------------------------------------------------------------------*/ /* Save_RadPattern_Gnuplot_Data() * * Saves radiation pattern data to a file for gnuplot */ void Save_RadPattern_Gnuplot_Data( char *filename ) { int idx, npts; /* Number of points to plot */ /* Scale factor ref, for normalizing field strength values */ double dr; double fx, fy, fz, /* Co-ordinates of "free" end of field lines */ fscale; /* Scale factor for equalizing field line segments */ FILE *fp = NULL; /* Draw near field pattern if possible */ if( isFlagSet(ENABLE_NEAREH) && near_field.valid ) { /* Open gplot file, abort on error */ if( !Open_File(&fp, filename, "w") ) return; /* Reference for scale factor used in * normalizing field strength values */ if( fpat.near ) /* Spherical co-ordinates */ dr = (double)fpat.dxnr; /* Rectangular co-ordinates */ else dr = sqrt( (double)fpat.dxnr * (double)fpat.dxnr + (double)fpat.dynr * (double)fpat.dynr + (double)fpat.dznr * (double)fpat.dznr )/1.75; npts = fpat.nrx * fpat.nry * fpat.nrz; /*** Draw Near E Field ***/ if( isFlagSet(DRAW_EFIELD) && (fpat.nfeh & NEAR_EFIELD) ) { fprintf( fp, _("# Near E field\n") ); /* Write e-field out to file [DJS] */ for( idx = 0; idx < npts; idx++ ) { fscale = dr / near_field.er[idx]; fx = near_field.px[idx] + near_field.erx[idx] * fscale; fy = near_field.py[idx] + near_field.ery[idx] * fscale; fz = near_field.pz[idx] + near_field.erz[idx] * fscale; /* Print as x, y, z, dx, dy, dz for gnuplot */ fprintf( fp, "%f %f %f %f %f %f\n", near_field.px[idx], near_field.py[idx], near_field.pz[idx], fx - near_field.px[idx], fy - near_field.py[idx], fz - near_field.pz[idx] ); } } /* if( isFlagSet(DRAW_EFIELD) */ /*** Draw Near H Field ***/ if( isFlagSet(DRAW_HFIELD) && (fpat.nfeh & NEAR_HFIELD) ) { fprintf( fp, _("# Near H field\n") ); /* Write h-field out to file [DJS] */ for( idx = 0; idx < npts; idx++ ) { fscale = dr / near_field.hr[idx]; fx = near_field.px[idx] + near_field.hrx[idx] * fscale; fy = near_field.py[idx] + near_field.hry[idx] * fscale; fz = near_field.pz[idx] + near_field.hrz[idx] * fscale; /* Print as x, y, z, dx, dy, dz for gnuplot */ fprintf( fp, "%f %f %f %f %f %f\n", near_field.px[idx], near_field.py[idx], near_field.pz[idx], fx - near_field.px[idx], fy - near_field.py[idx], fz - near_field.pz[idx] ); } } /* if( isFlagSet(DRAW_HFIELD) && (fpat.nfeh & NEAR_HFIELD) ) */ /*** Draw Poynting Vector ***/ if( isFlagSet(DRAW_POYNTING) && (fpat.nfeh & NEAR_EFIELD) && (fpat.nfeh & NEAR_HFIELD) ) { int ipv; static size_t mreq = 0; /* Co-ordinates of Poynting vectors */ static double *pov_x = NULL, *pov_y = NULL; static double *pov_z = NULL, *pov_r = NULL; /* Range of Poynting vector values, * its max and min and log of max/min */ static double pov_max = 0; /* Allocate on new near field matrix size */ if( mreq != (size_t)npts * sizeof( double ) ) { mreq = (size_t)npts * sizeof( double ); mem_realloc( (void **)&pov_x, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&pov_y, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&pov_z, mreq, "in draw_radiation.c" ); mem_realloc( (void **)&pov_r, mreq, "in draw_radiation.c" ); } /* Calculate Poynting vector and its max and min */ fprintf( fp, _("# Poynting Vector\n") ); for( idx = 0; idx < npts; idx++ ) { pov_max = 0; for( ipv = 0; ipv < npts; ipv++ ) { pov_x[ipv] = near_field.ery[ipv] * near_field.hrz[ipv] - near_field.hry[ipv] * near_field.erz[ipv]; pov_y[ipv] = near_field.erz[ipv] * near_field.hrx[ipv] - near_field.hrz[ipv] * near_field.erx[ipv]; pov_z[ipv] = near_field.erx[ipv] * near_field.hry[ipv] - near_field.hrx[ipv] * near_field.ery[ipv]; pov_r[ipv] = sqrt( pov_x[ipv] * pov_x[ipv] + pov_y[ipv] * pov_y[ipv] + pov_z[ipv] * pov_z[ipv] ); if( pov_max < pov_r[ipv] ) pov_max = pov_r[ipv]; } /* for( ipv = 0; ipv < npts; ipv++ ) */ /* Scale factor for each field point, to make * near field direction lines equal-sized */ fscale = dr / pov_r[idx]; /* Scaled field values are used to set one end of a * line segment that represents direction of field. * The other end is set by the field point co-ordinates */ fx = near_field.px[idx] + pov_x[idx] * fscale; fy = near_field.py[idx] + pov_y[idx] * fscale; fz = near_field.pz[idx] + pov_z[idx] * fscale; /* Print as x, y, z, dx, dy, dz for gnuplot */ fprintf( fp, "%f %f %f %f %f %f\n", near_field.px[idx], near_field.py[idx], near_field.pz[idx], fx - near_field.px[idx], fy - near_field.py[idx], fz - near_field.pz[idx] ); } /* for( idx = 0; idx < npts; idx++ ) */ } /* if( isFlagSet(DRAW_POYNTING) ) */ } /* if( isFlagSet(ENABLE_NEAREH) && near_field.valid ) */ /* Save radiation pattern data if possible */ if( isFlagSet(ENABLE_RDPAT) && (calc_data.fstep >= 0) ) { int nth, /* Theta step count */ nph; /* Phi step count */ /* Frequency step and polarization type */ int fstep = calc_data.fstep; /* Theta and phi angles defining a rad pattern point * and distance of its projection from xyz origin */ double theta, phi, r; /* theta and phi step in rads */ double dth = (double)fpat.dth * (double)TA; double dph = (double)fpat.dph * (double)TA; /* Open gplot file, abort on error */ if( !Open_File(&fp, filename, "w") ) return; fprintf( fp, _("# Radiation Pattern") ); /* Distance of rdpattern point nearest to xyz origin */ /*** Convert radiation pattern values * to points in 3d space in x,y,z axis ***/ phi = (double)fpat.phis * (double)TA; /* In rads */ /* Step phi angle */ idx = 0; for( nph = 0; nph < fpat.nph; nph++ ) { theta = (double)fpat.thets * (double)TA; /* In rads */ /* Step theta angle */ for( nth = 0; nth < fpat.nth; nth++ ) { double x, y, z; /* Distance of pattern point from the xyz origin */ r = Scale_Gain( rad_pattern[fstep].gtot[idx], fstep, idx ); /* Distance of point's projection on xyz axis, from origin */ z = r * cos(theta); r *= sin(theta); x = r * cos(phi); y = r * sin(phi); /* Print to file */ fprintf( fp, "%10.3E %10.3E %10.3E\n", x, y, z ); /* Step theta in rads */ theta += dth; idx++; } /* for( nth = 0; nth < fpat.nth; nth++ ) */ /* Step phi in rads */ phi += dph; } /* for( nph = 0; nph < fpat.nph; nph++ ) */ } /* if( isFlagSet(ENABLE_RDPAT) && (calc_data.fstep >= 0) ) */ if( fp != NULL ) fclose(fp); } /* Save_RadPattern_Gnuplot_Data() */ /*-----------------------------------------------------------------------*/ /* Save_Struct_Gnuplot_Data() * * Saves antenna structure data for gnuplot */ void Save_Struct_Gnuplot_Data( char *filename ) { FILE *fp = NULL; /* Open gplot file, abort on error */ if( !Open_File(&fp, filename, "w") ) return; /* Output if patch segs and no new input pending */ if( data.m && isFlagClear(INPUT_PENDING) ) { int idx, m2; /* Output segments data */ fprintf( fp, _("# structure patch segmenets\n") ); /* Output first segment outside loop to enable separation of wires */ fprintf( fp, "%10.3E %10.3E %10.3E\n%10.3E %10.3E %10.3E\n", (double)data.px1[0], (double)data.py1[0], (double)data.pz1[0], (double)data.px2[0], (double)data.py2[0], (double)data.pz2[0] ); /* Start from second segment and check for connection of ends */ m2 = data.m * 2; for( idx = 1; idx < m2; idx++ ) { fprintf( fp, "%10.3E %10.3E %10.3E\n%10.3E %10.3E %10.3E\n", (double)data.px1[idx], (double)data.py1[idx], (double)data.pz1[idx], (double)data.px2[idx], (double)data.py2[idx], (double)data.pz2[idx] ); } /* for( idx = 1; idx < m2; idx++ ) */ fprintf( fp, "\n\n" ); } /* if( data.m && isFlagSet(INPUT_PENDING) ) */ /* Output if wire segs and no new input pending */ if( data.n && isFlagClear(INPUT_PENDING) ) { int idx; /* Output segments data */ fprintf( fp, _("# structure wire segmenets\n") ); /* Output first segment outside loop to enable separation of wires */ fprintf( fp, "%10.3E %10.3E %10.3E\n%10.3E %10.3E %10.3E\n", (double)data.x1[0], (double)data.y1[0], (double)data.z1[0], (double)data.x2[0], (double)data.y2[0], (double)data.z2[0] ); /* Start from second segment and check for connection of ends */ for( idx = 1; idx < data.n; idx++ ) { /* Leave a 2-line gap to next segment */ if( (data.icon1[idx] == 0) || (data.icon1[idx] == (idx+1)) ) fprintf( fp, "\n\n" ); fprintf( fp, "%10.3E %10.3E %10.3E\n%10.3E %10.3E %10.3E\n", (double)data.x1[idx], (double)data.y1[idx], (double)data.z1[idx], (double)data.x2[idx], (double)data.y2[idx], (double)data.z2[idx] ); /* Leave a 2-line gap to next segment */ if( (data.icon2[idx] == 0) || (data.icon2[idx] == (idx+1)) ) fprintf( fp, "\n\n" ); } /* for( idx = 1; idx < data.n; idx++ ) */ } /* if( data.n && isFlagSet(INPUT_PENDING) ) */ fclose( fp ); } /* Save_Struct_Gnuplot_Data() */ /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/gnuplot.h000066400000000000000000000016061257141547200152050ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef GNUPLOT_H #define GNUPLOT_H 1 #include "common.h" #include "support.h" #endif xnec2c-3.4/src/ground.c000066400000000000000000000210431257141547200150030ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /******* Translated to the C language by N. Kyriazis 20 Aug 2003 ****** Program NEC(input,tape5=input,output,tape11,tape12,tape13,tape14, tape15,tape16,tape20,tape21) Numerical Electromagnetics Code (NEC2) developed at Lawrence Livermore lab., Livermore, CA. (contact G. Burke at 415-422-8414 for problems with the NEC code. For problems with the vax implem- entation, contact J. Breakall at 415-422-8196 or E. Domning at 415 422-5936) file created 4/11/80. ***********Notice********** This computer code material was prepared as an account of work sponsored by the United States government. Neither the United States nor the United States Department Of Energy, nor any of their employees, nor any of their contractors, subcontractors, or their employees, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness or usefulness of any information, apparatus, product or process disclosed, or represents that its use would not infringe privately-owned rights. ***********************************************************************/ #include "ground.h" #include "shared.h" /*-------------------------------------------------------------------*/ /* segment to obtain the total field due to ground. the method of */ /* variable interval width romberg integration is used. there are 9 */ /* field components - the x, y, and z components due to constant, */ /* sine, and cosine current distributions. */ void rom2( double a, double b, complex double *sum, double dmin ) { int i, ns, nt, flag = TRUE; int nts = 4, nx = 1, n = 9; double ze, ep, zend, dz=0.0, dzot=0.0, tmag1, tmag2, tr, ti; double z, s; /***also global***/ double rx = 1.0e-4; complex double t00, t02, t11; static complex double *g1 = NULL, *g2 = NULL; static complex double *g3 = NULL, *g4 = NULL; static complex double *t01 = NULL, *t10 = NULL; static complex double *t20 = NULL, *g5 = NULL; static gboolean first_call = TRUE; if( first_call ) { first_call = FALSE; size_t mreq = 9 * sizeof(complex double); mem_alloc( (void **)&g1, mreq, "in ground.c"); mem_alloc( (void **)&g2, mreq, "in ground.c"); mem_alloc( (void **)&g3, mreq, "in ground.c"); mem_alloc( (void **)&g4, mreq, "in ground.c"); mem_alloc( (void **)&g5, mreq, "in ground.c"); mem_alloc( (void **)&t01, mreq, "in ground.c"); mem_alloc( (void **)&t10, mreq, "in ground.c"); mem_alloc( (void **)&t20, mreq, "in ground.c"); } z= a; ze= b; s= b- a; if( s < 0.0) { fprintf( stderr, "xnec2c: b less than a in rom2\n" ); stop( _("rom2(): b less than a"), ERR_STOP ); } ep= s/(1.0e4* data.npm); zend= ze- ep; for( i = 0; i < n; i++ ) sum[i]=CPLX_00; ns= nx; nt=0; sflds( z, g1); while( TRUE ) { if( flag ) { dz= s/ ns; if( z+ dz > ze) { dz= ze- z; if( dz <= ep) return; } dzot= dz*.5; sflds( z+ dzot, g3); sflds( z+ dz, g5); } /* if( flag ) */ tmag1=0.0; tmag2=0.0; /* evaluate 3 point romberg result and test convergence. */ for( i = 0; i < n; i++ ) { t00=( g1[i]+ g5[i])* dzot; t01[i]=( t00+ dz* g3[i])*.5; t10[i]=(4.0* t01[i]- t00)/3.0; if( i > 2) continue; tr= creal( t01[i]); ti= cimag( t01[i]); tmag1= tmag1+ tr* tr+ ti* ti; tr= creal( t10[i]); ti= cimag( t10[i]); tmag2= tmag2+ tr* tr+ ti* ti; } /* for( i = 0; i < n; i++ ) */ tmag1= sqrt( tmag1); tmag2= sqrt( tmag2); test( tmag1, tmag2, &tr, 0.0, 0.0, &ti, dmin); if( tr <= rx) { for( i = 0; i < n; i++ ) sum[i] += t10[i]; nt += 2; z += dz; if( z > zend) return; for( i = 0; i < n; i++ ) g1[i]= g5[i]; if( (nt >= nts) && (ns > nx) ) { ns= ns/2; nt=1; } flag = TRUE; continue; } /* if( tr <= rx) */ sflds( z+ dz*.25, g2); sflds( z+ dz*.75, g4); tmag1=0.0; tmag2=0.0; /* evaluate 5 point romberg result and test convergence. */ for( i = 0; i < n; i++ ) { t02=( t01[i]+ dzot*( g2[i]+ g4[i]))*.5; t11=( 4.0 * t02- t01[i] )/3.0; t20[i]=(16.0* t11- t10[i])/15.0; if( i > 2) continue; tr= creal( t11); ti= cimag( t11); tmag1= tmag1+ tr* tr+ ti* ti; tr= creal( t20[i]); ti= cimag( t20[i]); tmag2= tmag2+ tr* tr+ ti* ti; } /* for( i = 0; i < n; i++ ) */ tmag1= sqrt( tmag1); tmag2= sqrt( tmag2); test( tmag1, tmag2, &tr, 0.0,0.0, &ti, dmin); if( tr > rx) { nt=0; if( ns < data.npm ) { ns= ns*2; dz= s/ ns; dzot= dz*.5; for( i = 0; i < n; i++ ) { g5[i]= g3[i]; g3[i]= g2[i]; } flag=FALSE; continue; } /* if( ns < npm) */ fprintf( stderr, "xnec2c: rom2 -- step size limited at z = %12.5E\n", z ); } /* if( tr > rx) */ for( i = 0; i < n; i++ ) sum[i]= sum[i]+ t20[i]; nt= nt+1; z= z+ dz; if( z > zend) return; for( i = 0; i < n; i++ ) g1[i]= g5[i]; flag = TRUE; if( (nt < nts) || (ns <= nx) ) continue; ns= ns/2; nt=1; } /* while( TRUE ) */ } /*-----------------------------------------------------------------------*/ /* sfldx returns the field due to ground for a current element on */ /* the source segment at t relative to the segment center. */ void sflds( double t, complex double *e ) { double xt, yt, zt, rhx, rhy, rhs, rho, phx, phy; double cph, sph, zphs, r2s, rk, sfac, thet; complex double eph, erv, ezv, erh, ezh; complex double er, et, hrv, hzv, hrh; xt= dataj.xj+ t* dataj.cabj; yt= dataj.yj+ t* dataj.sabj; zt= dataj.zj+ t* dataj.salpj; rhx= incom.xo- xt; rhy= incom.yo- yt; rhs= rhx* rhx+ rhy* rhy; rho= sqrt( rhs); if( rho <= 0.0) { rhx=1.0; rhy=0.0; phx=0.0; phy=1.0; } else { rhx= rhx/ rho; rhy= rhy/ rho; phx= -rhy; phy= rhx; } cph= rhx* incom.xsn+ rhy* incom.ysn; sph= rhy* incom.xsn- rhx* incom.ysn; if( fabs( cph) < 1.0e-10) cph=0.0; if( fabs( sph) < 1.0e-10) sph=0.0; gwav.zph= incom.zo+ zt; zphs= gwav.zph* gwav.zph; r2s= rhs+ zphs; gwav.r2= sqrt( r2s); rk= gwav.r2* TP; gwav.xx2= cmplx( cos( rk),- sin( rk)); /* use norton approximation for field due to ground. * current is lumped at segment center with current moment * for constant, sine or cosine distribution. */ if( incom.isnor != 1) { gwav.zmh=1.0; gwav.r1=1.0; gwav.xx1=0.0; gwave( &erv, &ezv, &erh, &ezh, &eph); et=-CONST1* gnd.frati* gwav.xx2/( r2s* gwav.r2); er=2.0* et* cmplx(1.0, rk); et= et* cmplx(1.0 - rk* rk, rk); hrv=( er+ et)* rho* gwav.zph/ r2s; hzv=( zphs* er- rhs* et)/ r2s; hrh=( rhs* er- zphs* et)/ r2s; erv= erv- hrv; ezv= ezv- hzv; erh= erh+ hrh; ezh= ezh+ hrv; eph= eph+ et; erv= erv* dataj.salpj; ezv= ezv* dataj.salpj; erh= erh* incom.sn* cph; ezh= ezh* incom.sn* cph; eph= eph* incom.sn* sph; erh= erv+ erh; e[0]=( erh* rhx+ eph* phx)* dataj.s; e[1]=( erh* rhy+ eph* phy)* dataj.s; e[2]=( ezv+ ezh)* dataj.s; e[3]=0.0; e[4]=0.0; e[5]=0.0; sfac= PI* dataj.s; sfac= sin( sfac)/ sfac; e[6]= e[0]* sfac; e[7]= e[1]* sfac; e[8]= e[2]* sfac; return; } /* if( smat.isnor != 1) */ /* interpolate in sommerfeld field tables */ if( rho >= 1.0e-12) thet= atan( gwav.zph/ rho); else thet= POT; /* combine vertical and horizontal components and convert */ /* to x,y,z components. multiply by exp(-jkr)/r. */ intrp( gwav.r2, thet, &erv, &ezv, &erh, &eph ); gwav.xx2= gwav.xx2/ gwav.r2; sfac= incom.sn* cph; erh= gwav.xx2*( dataj.salpj* erv+ sfac* erh); ezh= gwav.xx2*( dataj.salpj* ezv- sfac* erv); /* x,y,z fields for constant current */ eph= incom.sn* sph* gwav.xx2* eph; e[0]= erh* rhx+ eph* phx; e[1]= erh* rhy+ eph* phy; e[2]= ezh; /* x,y,z fields for sine current */ rk= TP* t; sfac= sin( rk); e[3]= e[0]* sfac; e[4]= e[1]* sfac; /* x,y,z fields for cosine current */ e[5]= e[2]* sfac; sfac= cos( rk); e[6]= e[0]* sfac; e[7]= e[1]* sfac; e[8]= e[2]* sfac; return; } /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/ground.h000066400000000000000000000016041257141547200150110ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef GROUND_H #define GROUND_H 1 #include "common.h" #include "support.h" #endif xnec2c-3.4/src/input.c000066400000000000000000001233701257141547200146520ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /******* Translated to the C language by N. Kyriazis 20 Aug 2003 ****** Program NEC(input,tape5=input,output,tape11,tape12,tape13,tape14, tape15,tape16,tape20,tape21) Numerical Electromagnetics Code (NEC2) developed at Lawrence Livermore lab., Livermore, CA. (contact G. Burke at 415-422-8414 for problems with the NEC code. For problems with the vax implem- entation, contact J. Breakall at 415-422-8196 or E. Domning at 415 422-5936) file created 4/11/80 *********** Notice ********** This computer code material was prepared as an account of work sponsored by the United States government. Neither the United States nor the United States Department Of Energy, nor any of their employees, nor any of their contractors, subcontractors, or their employees, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness or usefulness of any information, apparatus, product or process disclosed, or represents that its use would not infringe privately-owned rights. ***********************************************************************/ #include "input.h" #include "shared.h" /*------------------------------------------------------------------------*/ /* Read_Comments() * * Reads CM comment cards from input file */ gboolean Read_Comments( void ) { char ain[3], line_buf[LINE_LEN]; /* Look for CM or CE card */ do { /* read a line from input file */ if( Load_Line(line_buf, input_fp) == EOF ) { fprintf( stderr, "xnec2c: Read_Comments():" "unexpected EOF (End of File)\n" ); stop( _("Read_Comments(): Error reading Comments\n"\ "Unexpected EOF (End of File)"), ERR_OK ); return( FALSE ); } /* Check that comment line is not short */ if( strlen(line_buf) < 2 ) { fprintf( stderr, "xnec2c: Read_Comments():" "error reading Comments: " "Comment mnemonic short or missing\n" ); stop( _("Read_Comments(): Error reading Comments\n"\ "Comment mnemonic short or missing"), ERR_OK ); return( FALSE ); } /* separate card's id mnemonic */ Strlcpy( ain, line_buf, sizeof(ain) ); /* Check for incorrect mnemonic */ if( (strcmp(ain, "CM") != 0) && (strcmp(ain, "CE") != 0) ) { stop( _("Read_Comments():\n"\ " Error reading input file\n"\ "Comment mnemonic incorrect"), ERR_OK ); return( FALSE ); } } while( (strcmp(ain, "CE") != 0) ); return( TRUE ); } /* Read_Comments() */ /*-----------------------------------------------------------------------*/ /* Read_Geometry() * * Reads geometry data from input file */ gboolean Read_Geometry( void ) { int idx; size_t mreq; /* Moved here from Read_Commands() */ matpar.imat=0; data.n = data.m = 0; if( !datagn() ) return( FALSE ); /* Memory allocation for temporary buffers */ mreq = (size_t)data.npm * sizeof(double); mem_realloc( (void **)&save.xtemp, mreq, "in input.c" ); mem_realloc( (void **)&save.ytemp, mreq, "in input.c" ); mem_realloc( (void **)&save.ztemp, mreq, "in input.c" ); mem_realloc( (void **)&save.bitemp, mreq, "in input.c" ); if( data.n > 0 ) { mreq = (size_t)data.n * sizeof(double); mem_realloc( (void **)&save.sitemp, mreq, "in input.c" ); } /* Memory allocation for primary interacton matrix. */ mreq = (size_t)(data.np2m * (data.np + 2 * data.mp)) * sizeof(complex double); mem_realloc( (void **)&cm, mreq, "in input.c" ); /* Memory allocation for current buffers */ mreq = (size_t)data.npm * sizeof( double); mem_realloc( (void **)&crnt.air, mreq, "in input.c" ); mem_realloc( (void **)&crnt.aii, mreq, "in input.c" ); mem_realloc( (void **)&crnt.bir, mreq, "in input.c" ); mem_realloc( (void **)&crnt.bii, mreq, "in input.c" ); mem_realloc( (void **)&crnt.cir, mreq, "in input.c" ); mem_realloc( (void **)&crnt.cii, mreq, "in input.c" ); mreq = (size_t)data.np3m * sizeof( complex double); mem_realloc( (void **)&crnt.cur, mreq, "in input.c" ); /* Memory allocation for loading buffers */ mreq = (size_t)data.npm * sizeof(complex double); mem_realloc( (void **)&zload.zarray, mreq, "in input.c" ); /* Save segment and patch data for freq scaling */ if( data.n > 0 ) for( idx = 0; idx < data.n; idx++ ) { save.xtemp[idx] = data.x[idx]; save.ytemp[idx] = data.y[idx]; save.ztemp[idx] = data.z[idx]; save.sitemp[idx] = data.si[idx]; save.bitemp[idx] = data.bi[idx]; } if( data.m > 0 ) for( idx = 0; idx < data.m; idx++ ) { int j; j = idx + data.n; save.xtemp[j] = data.px[idx]; save.ytemp[j] = data.py[idx]; save.ztemp[j] = data.pz[idx]; save.bitemp[j] = data.pbi[idx]; } return( TRUE ); } /* Read_Geometry() */ /*------------------------------------------------------------------------*/ /* Read_Commands() * * Reads commands from input file and stores * them for later execution by user command */ gboolean Read_Commands( void ) { /* input card mnemonic list */ char *atst[NUM_CMNDS] = { "CM", "CP", "EK", "EN", "EX", \ "FR", "GD", "GN", "KH", "LD", \ "NE", "NH", "NT", "PQ", "PT", \ "RP", "SY", "TL", "XQ" }; char ain[3]; double tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; int mpcnt, itmp1, itmp2, itmp3, itmp4, ain_num; /* My addition, ain mnemonic as a number */ size_t mreq; /* My addition, size req. for malloc's */ /* initializations etc from original fortran code */ mpcnt = 0; /* Matrix parameters */ if( matpar.imat == 0) { netcx.neq = data.n+2*data.m; netcx.neq2 = 0; } /* default values for input parameters and flags */ calc_data.rkh = 1.0; calc_data.iexk = 0; calc_data.iped = 0; calc_data.nfrq = 1; calc_data.fmhz = CVEL; save.fmhz = CVEL; calc_data.mxfrq = 0.0; fpat.dth = 0.0; fpat.thets = 0.0; fpat.ixtyp = 0; fpat.nfeh = 0; fpat.nrx = 0; fpat.nry = 0; fpat.nry = 0; fpat.nth = 0; fpat.nph = 0; fpat.near = -1; gnd.ifar = -1; gnd.zrati = CPLX_10; gnd.ksymp = 1; gnd.nradl = 0; gnd.iperf = 0; netcx.nonet = 0; netcx.ntsol = 0; netcx.masym = 0; netcx.npeq = data.np+2*data.mp; /* My additions */ vsorc.nvqd = 0; vsorc.nsant = 0; zload.nldseg = 0; zload.nload = 0; /* Allocate some buffers */ mreq = (size_t)data.np2m * sizeof(int); mem_realloc( (void **)&save.ip, mreq, "in input.c" ); /* Memory allocation for symmetry array */ smat.nop = netcx.neq/netcx.npeq; mreq = (size_t)(smat.nop * smat.nop) * sizeof( complex double); mem_realloc( (void **)&smat.ssx, mreq, "in input.c" ); /* main input section, exits at various points */ /* depending on error conditions or end of job */ while( TRUE ) { /* Main input section - standard read statement - jumps */ /* to appropriate section for specific parameter set up */ if( !readmn( ain, &itmp1, &itmp2, &itmp3, &itmp4, &tmp1, &tmp2, &tmp3, &tmp4, &tmp5, &tmp6) ) return( FALSE ); mpcnt++; /* identify command card id mnemonic */ for( ain_num = 0; ain_num < NUM_CMNDS; ain_num++ ) if( strncmp( ain, atst[ain_num], 2) == 0 ) break; /* take action according to card id mnemonic */ switch( ain_num ) { case CM: /* "cm" card ignored, comments in data cards as in NEC4 */ fprintf( stderr, "xnec2c: Read_Commands():" " ignoring CM card in commands\n" ); stop( _("Read_Commands(): Ignoring CM card in commands"), ERR_OK ); continue; case CP: /* "cp" card ignored, maximum coupling between antennas */ stop( _("Read_Commands(): CP card is ignored\n"\ "Coupling calculation not implemented"), ERR_OK ); continue; /* continue card input loop */ case EK: /* "ek" card, extended thin wire kernel option */ if( itmp1 == -1) calc_data.iexk = 0; else calc_data.iexk = 1; continue; /* continue card input loop */ case EN: /* "en" card, end data input, no action */ break; case EX: /* "ex" card, excitation parameters */ netcx.masym = itmp4/10; fpat.ixtyp = itmp1; /* Applied E field or current discontinuity */ if( (fpat.ixtyp == 0) || (fpat.ixtyp == 5) ) { netcx.ntsol = 0; /* Current discontinuity E source */ if( fpat.ixtyp == 5 ) { vsorc.nvqd++; mreq = (size_t)vsorc.nvqd * sizeof(int); mem_realloc( (void **)&vsorc.ivqd, mreq, "in input.c" ); mem_realloc( (void **)&vsorc.iqds, mreq, "in input.c" ); mreq = (size_t)vsorc.nvqd * sizeof(complex double); mem_realloc( (void **)&vsorc.vqd, mreq, "in input.c" ); mem_realloc( (void **)&vsorc.vqds, mreq, "in input.c" ); { int indx = vsorc.nvqd-1; if( (vsorc.ivqd[indx] = isegno(itmp2, itmp3)) < 0 ) return( FALSE ); /* my addition, error */ vsorc.vqd[indx]= cmplx( tmp1, tmp2); if( cabs( vsorc.vqd[indx]) < 1.0e-20) vsorc.vqd[indx] = CPLX_10; calc_data.iped = itmp4- netcx.masym*10; calc_data.zpnorm = tmp3; } } /* if( fpat.ixtyp == 5) */ else { /* Else, applied E field */ vsorc.nsant++; mreq = (size_t)vsorc.nsant * sizeof(int); mem_realloc( (void **)&vsorc.isant, mreq, "in input.c" ); mreq = (size_t)vsorc.nsant * sizeof(complex double); mem_realloc( (void **)&vsorc.vsant, mreq, "in input.c" ); { int indx = vsorc.nsant-1; if( (vsorc.isant[indx] = isegno(itmp2, itmp3)) < 0 ) return( FALSE ); /* my addition, error condition */ vsorc.vsant[indx]= cmplx( tmp1, tmp2); if( cabs( vsorc.vsant[indx]) < 1.0e-20) vsorc.vsant[indx] = CPLX_10; calc_data.iped= itmp4- netcx.masym*10; calc_data.zpnorm= tmp3; if( (calc_data.iped == 1) && (calc_data.zpnorm > 0.0) ) calc_data.iped=2; } } /* if( fpat.ixtyp == 5 ) */ } /* if( (fpat.ixtyp == 0) || (fpat.ixtyp == 5) ) */ else { /* For fpat.ixtyp = 2|3|4 = incident field or current source */ calc_data.nthi= itmp2; calc_data.nphi= itmp3; calc_data.xpr1= tmp1; calc_data.xpr2= tmp2; calc_data.xpr3= tmp3; calc_data.xpr4= tmp4; calc_data.xpr5= tmp5; calc_data.xpr6= tmp6; vsorc.nsant=0; vsorc.nvqd=0; calc_data.thetis= tmp1; calc_data.phiss= tmp2; } SetFlag( ENABLE_EXCITN ); continue; /* continue card input loop */ case FR: /* "fr" card, frequency parameters */ if( !CHILD ) { calc_data.nfrq = itmp2; if( calc_data.nfrq <= 0) calc_data.nfrq = 1; } else calc_data.nfrq = 1; /* Allocate normalization buffer */ { mreq = (size_t)calc_data.nfrq * sizeof(double); mem_realloc( (void **)&impedance_data.zreal, mreq, "in input.c" ); mem_realloc( (void **)&impedance_data.zimag, mreq, "in input.c" ); mem_realloc( (void **)&impedance_data.zmagn, mreq, "in input.c" ); mem_realloc( (void **)&impedance_data.zphase, mreq, "in input.c" ); mem_realloc( (void **)&save.freq, mreq, "in input.c" ); mreq = (size_t)calc_data.nfrq * sizeof(char); mem_realloc( (void **)&save.fstep, mreq, "in input.c" ); } if( CHILD ) continue; calc_data.ifrq = itmp1; calc_data.fmhz = save.fmhz = tmp1; /* My addition, max frequency */ if( itmp1 == 0 ) calc_data.mxfrq = (double)tmp1 + (double)tmp2 * (double)(itmp2-1); else if( itmp1 == 1 ) calc_data.mxfrq = (double)tmp1 * pow( (double)tmp2, (double)(itmp2-1) ); /* My addition, extra features in "fr" card. */ /* Specifies lower and upper value of frequency range */ if( calc_data.ifrq == 2 ) { calc_data.nfrq++; /* Linear frequency stepping */ if( calc_data.nfrq > 1 ) calc_data.delfrq = (tmp2 - tmp1)/(double)(calc_data.nfrq-1); calc_data.ifrq = 0; calc_data.mxfrq = (double)tmp2; /* Max frequency */ } else if( calc_data.ifrq == 3 ) { calc_data.nfrq++; /* Multiplicative frequency stepping */ if( calc_data.nfrq > 1 ) calc_data.delfrq = pow( (tmp2-tmp1), 1.0/(double)(calc_data.nfrq-1) ); calc_data.ifrq = 1; calc_data.mxfrq = (double)tmp2; /* Max frequency */ } else calc_data.delfrq = tmp2; if( calc_data.iped == 1) calc_data.zpnorm = 0.0; continue; /* continue card input loop */ case GD: /* "gd" card, ground representation */ fpat.epsr2 = tmp1; fpat.sig2 = tmp2; fpat.clt = tmp3; fpat.cht = tmp4; continue; /* continue card input loop */ case GN: /* "gn" card, ground parameters under the antenna */ gnd.iperf = itmp1; gnd.nradl = itmp2; gnd.ksymp = 2; save.epsr = tmp1; save.sig = tmp2; /* Theta must be less than 90 if ground present */ double test = (double)(fpat.nth - 1) * fpat.dth + fpat.thets; if( (gnd.ifar != 1) && (test > 90.0) ) { fprintf( stderr, "xnec2c: Read_Commands(): theta > 90 deg. with ground specified\n" ); stop( _("Read_Commands(): Theta > 90 deg with ground specified\n"\ "Please check RP card data and correct"), ERR_OK ); return( FALSE ); } if( gnd.nradl > 0) { if( gnd.iperf == 2) { fprintf( stderr, "xnec2c: Read_Commands(): radial wire g.s. approximation\n" "may not be used with Sommerfeld ground option\n" ); stop( _("Read_Commands(): radial wire g.s. approximation\n"\ "may not be used with Sommerfeld ground option"), ERR_OK ); return( FALSE ); } save.scrwlt = tmp3; save.scrwrt = tmp4; continue; /* continue card input loop */ } /* if( gnd.nradl > 0) */ else { save.scrwlt = 0.0; save.scrwrt = 0.0; } fpat.epsr2 = tmp3; fpat.sig2 = tmp4; fpat.clt = tmp5; fpat.cht = tmp6; continue; /* continue card input loop */ case KH: /* "kh" card, matrix integration limit */ calc_data.rkh = tmp1; continue; /* continue card input loop */ case LD: /* "ld" card, loading parameters */ { int idx, nseg; /* Reallocate loading buffers */ zload.nload++; mreq = (size_t)zload.nload * sizeof(int); mem_realloc( (void **)&calc_data.ldtyp, mreq, "in input.c" ); mem_realloc( (void **)&calc_data.ldtag, mreq, "in input.c" ); mem_realloc( (void **)&calc_data.ldtagf, mreq, "in input.c" ); mem_realloc( (void **)&calc_data.ldtagt, mreq, "in input.c" ); mreq = (size_t)zload.nload * sizeof(double); mem_realloc( (void **)&calc_data.zlr, mreq, "in input.c" ); mem_realloc( (void **)&calc_data.zli, mreq, "in input.c" ); mem_realloc( (void **)&calc_data.zlc, mreq, "in input.c" ); idx = zload.nload-1; calc_data.ldtyp[idx]= itmp1; calc_data.ldtag[idx]= itmp2; if( itmp4 == 0) itmp4= itmp3; calc_data.ldtagf[idx]= itmp3; calc_data.ldtagt[idx]= itmp4; if( itmp4 < itmp3 ) { fprintf( stderr, "xnec2c: Read_Commands(): data fault on loading card no %d\n" "itag step1 %d is greater than itag step2 %d\n", zload.nload, itmp3, itmp4 ); stop( _("Read_Commands(): Data fault on loading card\n"\ "itag step1 is greater than itag step2"), ERR_OK ); return( FALSE ); } calc_data.zlr[idx]= tmp1; calc_data.zli[idx]= tmp2; calc_data.zlc[idx]= tmp3; /*** My addition, for drawing structure ***/ /* Work out absolute seg number of loaded segments (!) */ if( itmp1 == -1 ) /* Null all loads */ zload.nldseg = 0; else if( itmp2 == 0 ) /* No tag num */ { if( itmp3 == 0 ) /* All segs loaded */ { nseg = data.n; mreq = (size_t)(nseg + zload.nldseg) * sizeof(int); mem_realloc( (void **)&zload.ldsegn, mreq, "in input.c" ); mem_realloc( (void **)&zload.ldtype, mreq, "in input.c" ); for( idx = 0; idx < nseg; idx++ ) { zload.ldtype[zload.nldseg] = itmp1; zload.ldsegn[zload.nldseg++] = idx+1; } } else /* Absolute seg num specified */ { nseg = itmp4 - itmp3 + 1; if( nseg <= 0 ) nseg = 1; mreq = (size_t)(nseg + zload.nldseg) * sizeof(int); mem_realloc( (void **)&zload.ldsegn, mreq, "in input.c" ); mem_realloc( (void **)&zload.ldtype, mreq, "in input.c" ); for( idx = 0; idx < nseg; idx++ ) { zload.ldtype[zload.nldseg] = itmp1; zload.ldsegn[zload.nldseg++] = itmp3+idx; } } } /* if( itmp2 == 0 ) */ else /* Tag num specified */ { if( (itmp3 == 0) && (itmp4 == 0) ) /* All segs of tag loaded */ { for( idx = 0; idx < data.n; idx++ ) if( data.itag[idx] == itmp2 ) { mreq = (size_t)(zload.nldseg + 1) * sizeof(int); mem_realloc( (void **)&zload.ldsegn, mreq, "in input.c" ); mem_realloc( (void **)&zload.ldtype, mreq, "in input.c" ); zload.ldtype[zload.nldseg] = itmp1; zload.ldsegn[zload.nldseg++] = idx+1; } } else /* A range of segs of tag loaded */ { nseg = itmp4 - itmp3 + 1; if( nseg <= 0 ) nseg = 1; /* Just one seg of tag (=itmp3) */ mreq = (size_t)(zload.nldseg + nseg) * sizeof(int); mem_realloc( (void **)&zload.ldsegn, mreq, "in input.c" ); mem_realloc( (void **)&zload.ldtype, mreq, "in input.c" ); for( idx = 0; idx < nseg; idx++ ) { zload.ldtype[zload.nldseg] = itmp1; if( (zload.ldsegn[zload.nldseg++] = isegno(itmp2, itmp3+idx)) < 0 ) return( FALSE ); } } } } /* case 8: */ continue; /* continue card input loop */ case NE: case NH: /* "ne"/"nh" cards, near field calculation parameters */ if( ain_num == 11 ) fpat.nfeh |= NEAR_HFIELD; else fpat.nfeh |= NEAR_EFIELD; fpat.near = itmp1; fpat.nrx = itmp2; fpat.nry = itmp3; fpat.nrz = itmp4; fpat.xnr = tmp1; fpat.ynr = tmp2; fpat.znr = tmp3; fpat.dxnr = tmp4; fpat.dynr = tmp5; fpat.dznr = tmp6; if( (fpat.nrx > 0) && (fpat.nry > 0) && (fpat.nrz > 0) && (fpat.near != -1) ) { SetFlag( ENABLE_NEAREH ); SetFlag( ALLOC_NEAREH_BUFF ); SetFlag( ALLOC_PNTING_BUFF ); } /* Because of the interactive GUI, program * execution is not triggered by any card */ continue; /* continue card input loop */ case NT: case TL: /* "nt" & "tl" cards, network parameters */ { int idx; /* Re-allocate network buffers */ netcx.nonet++; mreq = (size_t)netcx.nonet * sizeof(int); mem_realloc( (void **)&netcx.ntyp, mreq, "in input.c" ); mem_realloc( (void **)&netcx.iseg1, mreq, "in input.c" ); mem_realloc( (void **)&netcx.iseg2, mreq, "in input.c" ); mreq = (size_t)netcx.nonet * sizeof(double); mem_realloc( (void **)&netcx.x11r, mreq, "in input.c" ); mem_realloc( (void **)&netcx.x11i, mreq, "in input.c" ); mem_realloc( (void **)&netcx.x12r, mreq, "in input.c" ); mem_realloc( (void **)&netcx.x12i, mreq, "in input.c" ); mem_realloc( (void **)&netcx.x22r, mreq, "in input.c" ); mem_realloc( (void **)&netcx.x22i, mreq, "in input.c" ); idx = netcx.nonet-1; if( ain_num == 12 ) netcx.ntyp[idx] = 1; else { netcx.ntyp[idx] = 2; if( tmp1 == 0.0 ) { fprintf( stderr, "xnec2c: Read_Commands(): Transmission Line impedance = 0\n" "is not valid. Please correct NT or TL card\n" ); stop( _("Read_Commands(): Transmission Line impedance = 0\n"\ "is not valid. Please correct NT or TL card"), ERR_OK ); return( FALSE ); } } if( ((netcx.iseg1[idx] = isegno(itmp1, itmp2)) < 0) || ((netcx.iseg2[idx] = isegno(itmp3, itmp4)) < 0) ) { fprintf( stderr, "xnec2c: Read_Commands(): Segment number error in TL or NT card\n" ); stop( _("Read_Commands(): Segment number\n"\ "error in NT or TL card"), ERR_OK ); return( FALSE ); } netcx.x11r[idx] = tmp1; netcx.x11i[idx] = tmp2; netcx.x12r[idx] = tmp3; netcx.x12i[idx] = tmp4; netcx.x22r[idx] = tmp5; netcx.x22i[idx] = tmp6; if( (netcx.ntyp[idx] == 1) || (tmp1 > 0.0) ) continue; /* continue card input loop */ netcx.ntyp[idx] = 3; netcx.x11r[idx] = -tmp1; continue; /* continue card input loop */ } /* case 12: case 17: */ case PQ: case PT: /* "pq" and "pt" cards ignored, no printing */ fprintf( stderr, "xnec2c: Read_Commands(): PQ and PT cards are ignored\n" "Printing to file not implemented\n" ); stop( _("Read_Commands(): PQ and PT cards are ignored\n"\ "Printing to file not implemented"), ERR_OK ); continue; /* continue card input loop */ case RP: /* "rp" card, standard observation angle parameters */ if( itmp1 == 1 ) { fprintf( stderr, "xnec2c: Read_Commands(): Surface wave option (I1=1)\n" "of RP command not implemented\n" ); stop( _("Read_Commands(): Surface wave option (I1=1)\n"\ "of RP command not implemented"), ERR_OK ); return( FALSE ); } gnd.ifar = itmp1; fpat.nth = itmp2; fpat.nph = itmp3; if( fpat.nth <= 0) fpat.nth=1; if( fpat.nph <= 0) fpat.nph=1; fpat.ipd = itmp4 / 10; fpat.iavp = itmp4 - fpat.ipd*10; fpat.inor = fpat.ipd / 10; fpat.ipd = fpat.ipd - fpat.inor*10; fpat.iax = fpat.inor / 10; fpat.inor = fpat.inor - fpat.iax*10; if( fpat.iavp ) { fprintf( stderr, "xnec2c: Read_Commands(): Gain averaging (XNDA ***1 or ***2)\n" "of RP command not implemented\n" ); stop( _("Read_Commands(): Gain averaging (XNDA ***1 or ***2)\n"\ "of RP command not supported"), ERR_OK ); return( FALSE ); } if( fpat.iax != 0) fpat.iax = 1; if( fpat.ipd != 0) fpat.ipd = 1; fpat.thets = tmp1; fpat.phis = tmp2; fpat.dth = tmp3; fpat.dph = tmp4; fpat.rfld = tmp5; fpat.gnor = tmp6; /* Theta must be less than 90 if ground present */ tmp1 = (double)(fpat.nth - 1) * fpat.dth + fpat.thets; if( (gnd.ksymp == 2) && (gnd.ifar != 1) && (tmp1 > 90.0) ) { fprintf( stderr, "xnec2c: Read_Commands(): Theta > 90 deg. with ground specified\n" "Please check RP card data and correct\n" ); stop( _("Read_Commands(): Theta > 90 deg. with ground specified\n"\ "Please check RP card data and correct"), ERR_OK ); return( FALSE ); } /* Because of the interactive GUI, program * execution is not triggered by any card */ continue; /* continue card input loop */ case SY: /* "sy" TODO Compatibility with 4nec2. Too difficult, may never happen :-( */ continue; case XQ: /* "xq" execute card */ /* Because of the interactive GUI, program * execution is not triggered by any card. * XQ now is the same as EN because of above */ if( itmp1 == 0 ) break; /* No rad pat, stop reading commands */ /* Read radiation pattern parameters */ gnd.ifar = 0; fpat.rfld = 0.0; fpat.ipd = 0; fpat.iavp = 0; fpat.inor = 0; fpat.iax = 0; fpat.nth = 91; fpat.nph = 1; fpat.thets= 0.0; fpat.phis = 0.0; fpat.dth = 1.0; fpat.dph = 0.0; if( itmp1 == 2) fpat.phis = 90.0; else if( itmp1 == 3) { fpat.nph = 2; fpat.dph = 90.0; } SetFlag( ENABLE_RDPAT ); /* Because of the interactive GUI, program * execution is not triggered by any card. * XQ now is the same as EN because of above */ break; default: fprintf( stderr, "xnec2c: Read_Commands(): faulty data " "card label after geometry section\n" ); stop( _("Read_Commands(): Faulty data card\n"\ "label after geometry section"), ERR_OK ); return( FALSE ); } /* switch( ain_num ) */ /* Disable radiation pattern plots */ if( (fpat.nth < 2) || (fpat.nph < 1) || (gnd.ifar == 1) ) ClearFlag( ENABLE_RDPAT ); else { /* Allocate radiation pattern buffers */ Alloc_Rdpattern_Buffers( calc_data.nfrq+1, fpat.nth, fpat.nph ); SetFlag( ENABLE_RDPAT ); } return( TRUE ); } /* while( TRUE ) */ } /* Read_Commands() */ /*-----------------------------------------------------------------------*/ gboolean readmn( char *mn, int *i1, int *i2, int *i3, int *i4, double *f1, double *f2, double *f3, double *f4, double *f5, double *f6 ) { char *line_buf = NULL, *startptr = NULL, *endptr = NULL; int len, i, idx; int nint = 4, nflt = 6; int iarr[4] = { 0, 0, 0, 0 }; double rarr[6] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; int eof; /* EOF error flag */ /* Clear return values */ *i1 = *i2 = *i3 = *i4 = 0; *f1 = *f2 = *f3 = *f4 = *f5 = *f6 = 0.0; /* read a line from input file */ mem_alloc((void **)&line_buf, LINE_LEN, "in readmn()"); if( line_buf == NULL ) return( FALSE ); startptr = line_buf; eof = Load_Line( line_buf, input_fp ); if( eof == EOF ) { Strlcpy( mn, "EN", 3 ); fprintf( stderr, "xnec2c: readmn(): command data card error\n" "Unexpected EOF while reading input file - appending EN card\n" ); stop( _("readmn(): Command data card error\n"\ "Unexpected EOF while reading input file\n"\ "Uppending a default EN card"), ERR_OK ); free_ptr( (void **)&startptr ); return( FALSE ); } /* get line length */ len = (int)strlen( line_buf ); /* abort if card's mnemonic too short or missing */ if( len < 2 ) { Strlcpy( mn, "XX", 3 ); fprintf( stderr, "xnec2c: readmn(): command data card error\n" "card's mnemonic code too short or missing\n" ); stop( _("readmn(): Command data card error\n"\ "Mnemonic code too short or missing"), ERR_OK ); free_ptr( (void **)&startptr ); return( FALSE ); } /* extract card's mnemonic code */ Strlcpy( mn, line_buf, 3 ); /* Return if only mnemonic on card */ if( len == 2 ) { free_ptr( (void **)&startptr ); return( TRUE ); } /* Compatibility with NEC4, comments between data cards */ if( strncmp(mn, "CM", 2) == 0 ) { free_ptr( (void **)&startptr ); return( TRUE ); } /* check line for spurious characters */ for( idx = 2; idx < len; idx++ ) { if( ((line_buf[idx] >= '0') && (line_buf[idx] <= '9')) || (line_buf[idx] == ' ') || (line_buf[idx] == '.') || (line_buf[idx] == ',') || (line_buf[idx] == '+') || (line_buf[idx] == '-') || (line_buf[idx] == 'E') || (line_buf[idx] == 'e') || (line_buf[idx] == '\t') || (line_buf[idx] == '\0') ) continue; else break; } if( idx < len ) { fprintf( stderr, "xnec2c: readmn(): command data card \"%s\" error\n" "Spurious character '%c' at column %d\n", mn, line_buf[idx], idx+1 ); stop( _("readmn(): Command data card error\n"\ "Spurious character in command card"), ERR_OK ); free_ptr( (void **)&startptr ); return( FALSE ); } /* read integers from line */ line_buf += 2; for( i = 0; i < nint; i++ ) { /* read an integer from line */ iarr[i] = (int)strtol( line_buf, &endptr, 10 ); if( *endptr == '\0' ) break; line_buf = endptr + 1; } /* for( i = 0; i < nint; i++ ) */ /* Return if no floats are specified in the card */ if( *endptr == '\0' ) { *i1= iarr[0]; *i2= iarr[1]; *i3= iarr[2]; *i4= iarr[3]; *f1= rarr[0]; *f2= rarr[1]; *f3= rarr[2]; *f4= rarr[3]; *f5= rarr[4]; *f6= rarr[5]; free_ptr( (void **)&startptr ); return( TRUE ); } /* read doubles from line */ for( i = 0; i < nflt; i++ ) { /* read a double from line */ rarr[i] = Strtod( line_buf, &endptr ); if( *endptr == '\0' ) break; line_buf = endptr + 1; } /* for( i = 0; i < nflt; i++ ) */ /* Return values on normal exit */ *i1= iarr[0]; *i2= iarr[1]; *i3= iarr[2]; *i4= iarr[3]; *f1= rarr[0]; *f2= rarr[1]; *f3= rarr[2]; *f4= rarr[3]; *f5= rarr[4]; *f6= rarr[5]; free_ptr( (void **)&startptr ); return( TRUE ); } /* readmn() */ /*-----------------------------------------------------------------------*/ gboolean readgm( char *gm, int *i1, int *i2, double *x1, double *y1, double *z1, double *x2, double *y2, double *z2, double *rad ) { char *line_buf = NULL, *startptr = NULL, *endptr = NULL; int len, i, idx; int nint = 2, nflt = 7; int iarr[2] = { 0, 0 }; double rarr[7] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; int eof; /* EOF error flag */ /* Clear return values */ *i1 = *i2 = 0; *x1 = *y1 = *z1 = *x2 = *y2 = *z2 = *rad = 0.0; /* read a line from input file */ mem_alloc((void **)&line_buf, LINE_LEN, "in readgm()"); if( line_buf == NULL ) return( FALSE ); startptr = line_buf; eof = Load_Line( line_buf, input_fp ); if( eof == EOF ) { Strlcpy( gm, "GE", 3 ); fprintf( stderr, "xnec2c: readgm(): geometry data card error\n" "Unexpected EOF while reading input file - appending GE card\n" ); stop( _("readgm(): Geometry data card error\n"\ "Unexpected EOF while reading input file\n"\ "Uppending a default GE card"), ERR_OK ); free_ptr( (void **)&startptr ); return( FALSE ); } /* get line length */ len = (int)strlen( line_buf ); /* abort if card's mnemonic too short or missing */ if( len < 2 ) { Strlcpy( gm, "XX", 3 ); fprintf( stderr, "xnec2c: readgm(): geometry data card error\n" "card's mnemonic code too short or missing\n" ); stop( _("readgm(): Geometry data card error\n"\ "Card's mnemonic code too short or missing"), ERR_OK ); free_ptr( (void **)&startptr ); return( FALSE ); } /* extract card's mnemonic code */ Strlcpy( gm, line_buf, 3 ); /* Return if only mnemonic on card */ if( len == 2 ) { free_ptr( (void **)&startptr ); return( TRUE ); } /* Compatibility with NEC4, * comments between data cards */ if( strcmp(gm, "CM") == 0 ) { free_ptr( (void **)&startptr ); return( TRUE ); } /* check line for spurious characters */ for( idx = 2; idx < len; idx++ ) { if( ((line_buf[idx] >= '0') && (line_buf[idx] <= '9')) || (line_buf[idx] == ' ') || (line_buf[idx] == '.') || (line_buf[idx] == ',') || (line_buf[idx] == '+') || (line_buf[idx] == '-') || (line_buf[idx] == 'E') || (line_buf[idx] == 'e') || (line_buf[idx] == '\t') || (line_buf[idx] == '\0') ) continue; else break; } if( idx < len ) { fprintf( stderr, "xnec2c: readgm(): geometry data card \"%s\" error\n" "Spurious character '%c' at column %d\n", gm, line_buf[idx], idx+1 ); stop( _("readmn(): Geometry data card error\n"\ "Spurious character in command card"), ERR_OK ); free_ptr( (void **)&startptr ); return( FALSE ); } /* read integers from line */ line_buf += 2; for( i = 0; i < nint; i++ ) { /* read an integer from line, reject spurious chars */ iarr[i] = (int)strtol( line_buf, &endptr, 10 ); if( *endptr == '\0' ) break; line_buf = endptr + 1; } /* for( i = 0; i < nint; i++ ) */ /* Return if no floats are specified in the card */ if( *endptr == '\0' ) { *i1 = iarr[0]; *i2 = iarr[1]; *x1 = rarr[0]; *y1 = rarr[1]; *z1 = rarr[2]; *x2 = rarr[3]; *y2 = rarr[4]; *z2 = rarr[5]; *rad= rarr[6]; free_ptr( (void **)&startptr ); return( TRUE ); } /* read doubles from line */ for( i = 0; i < nflt; i++ ) { /* read a double from line */ rarr[i] = Strtod( line_buf, &endptr ); if( *endptr == '\0' ) break; line_buf = endptr + 1; } /* for( i = 0; i < nflt; i++ ) */ /* Return values on normal exit */ *i1 = iarr[0]; *i2 = iarr[1]; *x1 = rarr[0]; *y1 = rarr[1]; *z1 = rarr[2]; *x2 = rarr[3]; *y2 = rarr[4]; *z2 = rarr[5]; *rad = rarr[6]; free_ptr( (void **)&startptr ); return( TRUE ); } /* readgm() */ /*-----------------------------------------------------------------------*/ /* datagn is the main routine for input of geometry data. */ gboolean datagn( void ) { char gm[3]; /* input card mnemonic list */ char *atst[] = { "GW", "GX", "GR", "GS", "GE","GM", "SP",\ "SM", "GA", "SC", "GH", "GF", "CT" }; int nwire, isct, itg, iy=0, iz; size_t mreq; int ix, i, ns, gm_num; /* geometry card id as a number */ double rad, xs1, xs2, ys1, ys2, zs1, zs2; double x3=0, y3=0, z3=0, x4=0, y4=0, z4=0; double xw1, xw2, yw1, yw2, zw1, zw2; double dummy; data.ipsym=0; nwire=0; data.n=0; data.np=0; data.m=0; data.mp=0; isct=0; structure_proj_params.r_max = 0.0; /* read geometry data card and branch to */ /* section for operation requested */ do { if( !readgm(gm, &itg, &ns, &xw1, &yw1, &zw1, &xw2, &yw2, &zw2, &rad) ) return( FALSE ); /* identify card id mnemonic */ for( gm_num = 0; gm_num < NUM_GEOMN; gm_num++ ) if( strncmp( gm, atst[gm_num], 2) == 0 ) break; if( gm_num != 9 ) isct=0; switch( gm_num ) { case GW: /* "gw" card, generate segment data for straight wire. */ if( Tag_Seg_Error(itg, ns) ) return( FALSE ); nwire++; if( rad != 0.0) { xs1=1.0; ys1=1.0; } else { if( !readgm(gm, &ix, &iy, &xs1, &ys1, &zs1, &dummy, &dummy, &dummy, &dummy) ) return( FALSE ); if( strcmp(gm, "GC" ) != 0 ) { fprintf( stderr, "xnec2c: datagn(): geometry data card error " "no GC card for tapered wire\n" ); stop( _("datagn(): Geometry data error\n"\ "No GC card for tapered wire"), ERR_OK ); return( FALSE ); } if( (ys1 == 0.0) || (zs1 == 0.0) ) { fprintf( stderr, "xnec2c: datagn(): geometry GC data card error\n" ); stop( _("datagn(): Geometry GC data card error"), ERR_OK ); return( FALSE ); } rad= ys1; ys1= pow( (zs1/ys1), (1.0/(ns-1.0)) ); } wire( xw1, yw1, zw1, xw2, yw2, zw2, rad, xs1, ys1, ns, itg); continue; /* reflect structure along x,y, or z */ /* axes or rotate to form cylinder. */ case GX: /* "gx" card */ if( (ns < 0) || (itg < 0) ) { fprintf( stderr, "xnec2c: datagn(): geometry GX data card error\n" ); stop( _("datagn(): Geometry GX data card error"), ERR_OK ); return( FALSE ); } iy= ns/10; iz= ns- iy*10; ix= iy/10; iy= iy- ix*10; if( ix != 0) ix=1; if( iy != 0) iy=1; if( iz != 0) iz=1; if( !reflc(ix, iy, iz, itg, ns) ) return( FALSE ); continue; case GR: /* "gr" card */ if( (ns < 0) || (itg < 0) ) { fprintf( stderr, "xnec2c: datagn(): geometry GR data card error\n" ); stop( _("datagn(): Geometry GR data card error"), ERR_OK ); return( FALSE ); } ix=-1; iz = 0; if( !reflc(ix, iy, iz, itg, ns) ) return( FALSE ); continue; case GS: /* "gs" card, scale structure dimensions by factor xw1 */ if( (itg > 0) && (ns > 0) && (ns >= itg) ) { for( i = 0; i < data.n; i++ ) { if( (data.itag[i] >= itg) && (data.itag[i] <= ns) ) { data.x1[i]= data.x1[i]* xw1; data.y1[i]= data.y1[i]* xw1; data.z1[i]= data.z1[i]* xw1; data.x2[i]= data.x2[i]* xw1; data.y2[i]= data.y2[i]* xw1; data.z2[i]= data.z2[i]* xw1; data.bi[i]= data.bi[i]* xw1; } } /* FIXME corrects errors when GS follows GX but this is just a work-around */ data.np = data.n; data.ipsym = 0; } else for( i = 0; i < data.n; i++ ) { data.x1[i]= data.x1[i]* xw1; data.y1[i]= data.y1[i]* xw1; data.z1[i]= data.z1[i]* xw1; data.x2[i]= data.x2[i]* xw1; data.y2[i]= data.y2[i]* xw1; data.z2[i]= data.z2[i]* xw1; data.bi[i]= data.bi[i]* xw1; } yw1= xw1* xw1; for( i = 0; i < data.m; i++ ) { data.px[i] = data.px[i]* xw1; data.py[i] = data.py[i]* xw1; data.pz[i] = data.pz[i]* xw1; data.pbi[i]= data.pbi[i]* yw1; } continue; case GE: /* "ge" card, terminate structure geometry input. */ /* My addition, for drawing */ if( ((data.n > 0) || (data.m > 0)) && !CHILD ) Init_Struct_Drawing(); else if( (data.n == 0) && (data.m == 0) ) { stop( _("No geometry data cards"), ERR_OK ); return( FALSE ); } if( !conect(itg) ) return( FALSE ); if( data.n != 0) { /* Allocate wire buffers */ mreq = (size_t)data.n * sizeof(double); mem_realloc( (void **)&data.si, mreq, "in input.c" ); mem_realloc( (void **)&data.sab, mreq, "in input.c" ); mem_realloc( (void **)&data.cab, mreq, "in input.c" ); mem_realloc( (void **)&data.salp, mreq, "in input.c" ); mem_realloc( (void **)&data.x, mreq, "in input.c" ); mem_realloc( (void **)&data.y, mreq, "in input.c" ); mem_realloc( (void **)&data.z, mreq, "in input.c" ); for( i = 0; i < data.n; i++ ) { xw1= data.x2[i]- data.x1[i]; yw1= data.y2[i]- data.y1[i]; zw1= data.z2[i]- data.z1[i]; data.x[i]=( data.x1[i]+ data.x2[i])/2.0; data.y[i]=( data.y1[i]+ data.y2[i])/2.0; data.z[i]=( data.z1[i]+ data.z2[i])/2.0; xw2= xw1* xw1+ yw1* yw1+ zw1* zw1; yw2= sqrt( xw2); //yw2=( xw2/yw2 + yw2)/2.0; data.si[i]= yw2; data.cab[i]= xw1/ yw2; data.sab[i]= yw1/ yw2; xw2= zw1/ yw2; if( xw2 > 1.0) xw2=1.0; if( xw2 < -1.0) xw2=-1.0; data.salp[i]= xw2; //xw2= asin( xw2)* TD; //yw2= atan2( yw1, xw1)* TD; if( (data.si[i] <= 1.0e-20) || (data.bi[i] <= 0.0) ) { fprintf( stderr, "xnec2c: datagn(): segment data error\n" ); stop( _("datagn(): Segment data error"), ERR_OK ); return( FALSE ); } } /* for( i = 0; i < data.n; i++ ) */ } /* if( data.n != 0) */ if( data.m != 0) { for( i = 0; i < data.m; i++ ) { xw1=( data.t1y[i]* data.t2z[i] - data.t1z[i]* data.t2y[i])* data.psalp[i]; yw1=( data.t1z[i]* data.t2x[i] - data.t1x[i]* data.t2z[i])* data.psalp[i]; zw1=( data.t1x[i]* data.t2y[i] - data.t1y[i]* data.t2x[i])* data.psalp[i]; } /* for( i = 0; i < data.m; i++ ) */ } /* if( data.m != 0) */ data.npm = data.n+data.m; data.np2m = data.n+2*data.m; data.np3m = data.n+3*data.m; return( TRUE ); /* "gm" card, move structure or reproduce */ /* original structure in new positions. */ case GM: { int tgf = (int)(rad + 0.5); if( (tgf < 0) || (ns < 0) || (rad < 0.0) ) { fprintf( stderr, "xnec2c: datagn(): move GM data card error\n" ); stop( _("datagn(): Move GM data card error"), ERR_OK ); return( FALSE ); } xw1= xw1* TA; yw1= yw1* TA; zw1= zw1* TA; if( !move(xw1, yw1, zw1, xw2, yw2, zw2, (int)(rad+.5), ns, itg) ) return( FALSE ); } continue; case SP: /* "sp" card, generate single new patch */ ns++; if( itg != 0) { fprintf( stderr, "xnec2c: datagn(): patch data card error\n" ); stop( _("datagn(): Patch data card error"), ERR_OK ); return( FALSE ); } if( (ns == 2) || (ns == 4) ) isct=1; if( ns > 1) { if( !readgm(gm, &ix, &iy, &x3, &y3, &z3, &x4, &y4, &z4, &dummy) ) return( FALSE ); if( (ns == 2) || (itg > 0) ) { x4= xw1+ x3- xw2; y4= yw1+ y3- yw2; z4= zw1+ z3- zw2; } if( strcmp(gm, "SC") != 0 ) { fprintf( stderr, "xnec2c: datagn(): patch data error\n" ); stop( _("datagn(): Patch data error"), ERR_OK ); return( FALSE ); } } /* if( ns > 1) */ else { xw2= xw2* TA; yw2= yw2* TA; } if( !patch( itg, ns, xw1, yw1, zw1, xw2, yw2, zw2, x3, y3, z3, x4, y4, z4) ) return( FALSE ); continue; case SM: /* "sm" card, generate multiple-patch surface */ if( (itg < 1) || (ns < 1) ) { fprintf( stderr, "datagn(): xnec2c: patch card data error\n" ); stop( _("datagn(): Patch data card error"), ERR_OK ); return( FALSE ); } if( !readgm(gm, &ix, &iy, &x3, &y3, &z3, &x4, &y4, &z4, &dummy) ) return( FALSE ); if( (ns == 2) || (itg > 0) ) { x4= xw1+ x3- xw2; y4= yw1+ y3- yw2; z4= zw1+ z3- zw2; } if( strcmp(gm, "SC" ) != 0 ) { fprintf( stderr, "xnec2c: datagn(): patch card data error\n" ); stop( _("datagn(): Patch data card error"), ERR_OK ); return( FALSE ); } if( !patch(itg, ns, xw1, yw1, zw1, xw2, yw2, zw2, x3, y3, z3, x4, y4, z4) ) return( FALSE ); continue; case GA: /* "ga" card, generate segment data for wire arc */ if( Tag_Seg_Error(itg, ns) ) return( FALSE ); nwire++; if( !arc(itg, ns, xw1, yw1, zw1, xw2) ) return( FALSE ); continue; case SC: /* "sc" card */ if( isct == 0) { fprintf( stderr, "xnec2c: datagn(): patch data card error\n" ); stop( _("datagn(): Patch data card error"), ERR_OK ); return( FALSE ); } ns++; if( (itg != 0) || ((ns != 2) && (ns != 4)) ) { fprintf( stderr, "xnec2c: datagn(): patch data card error\n" ); stop( _("datagn(): Patch data card error"), ERR_OK ); return( FALSE ); } xs1= x4; ys1= y4; zs1= z4; xs2= x3; ys2= y3; zs2= z3; x3= xw1; y3= yw1; z3= zw1; if( ns == 4) { x4= xw2; y4= yw2; z4= zw2; } xw1= xs1; yw1= ys1; zw1= zs1; xw2= xs2; yw2= ys2; zw2= zs2; if( ns != 4) { x4= xw1+ x3- xw2; y4= yw1+ y3- yw2; z4= zw1+ z3- zw2; } if( !patch(itg, ns, xw1, yw1, zw1, xw2, yw2, zw2, x3, y3, z3, x4, y4, z4) ) return( FALSE ); continue; case GH: /* "gh" card, generate helix */ if( Tag_Seg_Error(itg, ns) ) return( FALSE ); nwire++; helix( xw1, yw1, zw1, xw2, yw2, zw2, rad, ns, itg); continue; case GF: /* "gf" card, not supported */ fprintf( stderr, "xnec2c: datagn(): \"GF\" card (NGF solution) " "is not supported\n" ); stop( _("datagn(): \"GF\" card (NGF solution)\n"\ "is not supported"), ERR_OK ); return( FALSE ); case CT: /* Ignore in-data comments (NEC4 compatibility) */ fprintf( stderr, "xnec2c: datagn(): ignoring CM card in geometry\n" ); stop( _("datagn(): Ignoring CM card in geometry"), ERR_OK ); continue; default: /* error message */ fprintf( stderr, "xnec2c: datagn(): geometry data card error\n" ); fprintf( stderr, "%2s %3d %5d %10.5f %10.5f %10.5f" " %10.5f %10.5f %10.5f %10.5f\n", gm, itg, ns, xw1, yw1, zw1, xw2, yw2, zw2, rad ); stop( _("datagn(): Geometry data card error"), ERR_OK ); return( FALSE ); } /* switch( gm_num ) */ } /* do */ while( TRUE ); } /* datagn() */ /*-----------------------------------------------------------------------*/ /* Tag_Seg_Error() * * Checks tag and segments number are valid (>1) */ gboolean Tag_Seg_Error( int tag, int segs ) { gboolean retv = FALSE; if( tag <= 0 ) { fprintf( stderr, "xnec2c: Tag_Seg_Error(): geometry data card error -" "tag number is less than 1\n" ); stop( _("Tag_Seg_Error(): Geometry data error\n"\ "Tag number is less than 1"), ERR_OK ); retv = TRUE; } if( segs <= 0 ) { fprintf( stderr, "xnec2c: Tag_Seg_Error(): geometry data card error - " "number of segments is less than 1\n" ); stop( _("Tag_Seg_Error(): Geometry data error\n"\ "Number of segments is less than 1"), ERR_OK ); retv = TRUE; } return( retv ); } /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/input.h000066400000000000000000000022731257141547200146550ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef INPUT_H #define INPUT_H 1 #include "common.h" #include "support.h" /* Command Mnemonics */ enum CMDN_MNM { CM = 0, CP, EK, EN, EX, FR, GD, GN, KH, LD, NE, NH, NT, PQ, PT, RP, SY, TL, XQ, NUM_CMNDS }; /* Geometry Mnemonics */ enum GEOM_MNM { GW = 0, GX, GR, GS, GE, GM, SP, SM, GA, SC, GH, GF, CT, NUM_GEOMN }; #endif xnec2c-3.4/src/interface.c000066400000000000000000017474451257141547200154730ustar00rootroot00000000000000/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "callbacks.h" #include "interface.h" #include "support.h" #define GLADE_HOOKUP_OBJECT(component,widget,name) \ g_object_set_data_full (G_OBJECT (component), name, \ gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref) #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \ g_object_set_data (G_OBJECT (component), name, widget) GtkWidget* create_main_window (void) { GtkWidget *main_window; GtkWidget *vbox1; GtkWidget *hbox8; GtkWidget *menubar1; GtkWidget *menuitem1; GtkWidget *menuitem1_menu; GtkWidget *main_new; GtkWidget *main_open_input; GtkWidget *nec2_edit; GtkWidget *main_save; GtkWidget *main_save_as; GtkWidget *struct_save_as_gnuplot; GtkWidget *image102; GtkWidget *separator1; GtkWidget *main_quit; GtkWidget *main_view_menuitem; GtkWidget *main_view_menuitem_menu; GtkWidget *main_rdpattern; GtkWidget *main_freqplots; GtkWidget *main_pol_menu; GtkWidget *main_pol_menu_menu; GSList *rdpattern_total_group = NULL; GtkWidget *rdpattern_total; GtkWidget *rdpattern_horizontal; GtkWidget *rdpattern_vertical; GtkWidget *rdpattern_right_hand; GtkWidget *rdpattern_left_hand; GtkWidget *common_projection; GtkWidget *common_freq; GtkWidget *menuitem4; GtkWidget *menuitem4_menu; GtkWidget *about; GtkWidget *image103; GtkWidget *main_hbox1; GtkWidget *vseparator2; GtkWidget *main_currents_togglebutton; GtkWidget *main_charges_togglebutton; GtkWidget *vseparator7; GtkWidget *label214; GtkWidget *main_loop_start; GtkWidget *alignment49; GtkWidget *hbox47; GtkWidget *image52; GtkWidget *label213; GtkWidget *main_loop_pause; GtkWidget *image54; GtkWidget *main_loop_reset; GtkWidget *image53; GtkWidget *label244; GtkWidget *structure_fstep_entry; GtkWidget *hseparator1; GtkWidget *main_hbox2; GtkWidget *main_colorcode_zerolabel; GtkWidget *main_colorcode_drawingarea; GtkWidget *main_colorcode_maxlabel; GtkWidget *main_gain_entry; GtkWidget *label10; GtkObject *main_freq_spinbutton_adj; GtkWidget *main_freq_spinbutton; GtkWidget *main_freq_label; GtkWidget *main_freq_checkbutton; GtkWidget *main_new_freq_button; GtkWidget *image46; GtkWidget *hseparator11; GtkWidget *frame1; GtkWidget *alignment1; GtkWidget *structure_drawingarea; GtkWidget *main_hbox3; GtkWidget *struct_label; GtkWidget *main_x_axis; GtkWidget *main_y_axis; GtkWidget *main_z_axis; GtkWidget *main_default_view; GtkWidget *image32; GtkWidget *vseparator1; GtkWidget *image50; GtkObject *main_rotate_spinbutton_adj; GtkWidget *main_rotate_spinbutton; GtkWidget *image51; GtkObject *main_incline_spinbutton_adj; GtkWidget *main_incline_spinbutton; GtkWidget *label245; GtkObject *structure_zoom_spinbutton_adj; GtkWidget *structure_zoom_spinbutton; GtkWidget *structure_plus_button; GtkWidget *image94; GtkWidget *structure_minus_button; GtkWidget *image95; GtkWidget *structure_one_button; GtkWidget *image96; GtkAccelGroup *accel_group; GtkTooltips *tooltips; tooltips = gtk_tooltips_new (); accel_group = gtk_accel_group_new (); main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (main_window), 4); gtk_window_set_title (GTK_WINDOW (main_window), _("Xnec2c: Structure Display")); gtk_window_set_gravity (GTK_WINDOW (main_window), GDK_GRAVITY_EAST); vbox1 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox1); gtk_container_add (GTK_CONTAINER (main_window), vbox1); hbox8 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox8); gtk_box_pack_start (GTK_BOX (vbox1), hbox8, FALSE, FALSE, 0); menubar1 = gtk_menu_bar_new (); gtk_widget_show (menubar1); gtk_box_pack_start (GTK_BOX (hbox8), menubar1, FALSE, FALSE, 0); menuitem1 = gtk_menu_item_new_with_mnemonic (_("_File")); gtk_widget_show (menuitem1); gtk_container_add (GTK_CONTAINER (menubar1), menuitem1); menuitem1_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menuitem1_menu); main_new = gtk_image_menu_item_new_from_stock ("gtk-new", accel_group); gtk_widget_show (main_new); gtk_container_add (GTK_CONTAINER (menuitem1_menu), main_new); main_open_input = gtk_image_menu_item_new_from_stock ("gtk-open", accel_group); gtk_widget_show (main_open_input); gtk_container_add (GTK_CONTAINER (menuitem1_menu), main_open_input); nec2_edit = gtk_image_menu_item_new_from_stock ("gtk-edit", accel_group); gtk_widget_show (nec2_edit); gtk_container_add (GTK_CONTAINER (menuitem1_menu), nec2_edit); gtk_tooltips_set_tip (tooltips, nec2_edit, _("Edit NEC2 Input File"), NULL); main_save = gtk_image_menu_item_new_from_stock ("gtk-save", accel_group); gtk_widget_show (main_save); gtk_container_add (GTK_CONTAINER (menuitem1_menu), main_save); main_save_as = gtk_image_menu_item_new_from_stock ("gtk-save-as", accel_group); gtk_widget_show (main_save_as); gtk_container_add (GTK_CONTAINER (menuitem1_menu), main_save_as); struct_save_as_gnuplot = gtk_image_menu_item_new_with_mnemonic (_("Save As gnuplot")); gtk_widget_show (struct_save_as_gnuplot); gtk_container_add (GTK_CONTAINER (menuitem1_menu), struct_save_as_gnuplot); image102 = gtk_image_new_from_stock ("gtk-save-as", GTK_ICON_SIZE_MENU); gtk_widget_show (image102); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (struct_save_as_gnuplot), image102); separator1 = gtk_separator_menu_item_new (); gtk_widget_show (separator1); gtk_container_add (GTK_CONTAINER (menuitem1_menu), separator1); gtk_widget_set_sensitive (separator1, FALSE); main_quit = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group); gtk_widget_show (main_quit); gtk_container_add (GTK_CONTAINER (menuitem1_menu), main_quit); main_view_menuitem = gtk_menu_item_new_with_mnemonic (_("_View")); gtk_widget_show (main_view_menuitem); gtk_container_add (GTK_CONTAINER (menubar1), main_view_menuitem); main_view_menuitem_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (main_view_menuitem), main_view_menuitem_menu); main_rdpattern = gtk_check_menu_item_new_with_mnemonic (_("Radiation Pattern")); gtk_widget_show (main_rdpattern); gtk_container_add (GTK_CONTAINER (main_view_menuitem_menu), main_rdpattern); gtk_tooltips_set_tip (tooltips, main_rdpattern, _("Open radiation pattern window"), NULL); main_freqplots = gtk_check_menu_item_new_with_mnemonic (_("Frequency Plots")); gtk_widget_show (main_freqplots); gtk_container_add (GTK_CONTAINER (main_view_menuitem_menu), main_freqplots); gtk_tooltips_set_tip (tooltips, main_freqplots, _("Open frequency data plots window"), NULL); main_pol_menu = gtk_menu_item_new_with_mnemonic (_("Polarization")); gtk_widget_show (main_pol_menu); gtk_container_add (GTK_CONTAINER (main_view_menuitem_menu), main_pol_menu); gtk_tooltips_set_tip (tooltips, main_pol_menu, _("Display gain data relevant to polarization"), NULL); main_pol_menu_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (main_pol_menu), main_pol_menu_menu); rdpattern_total = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Total")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_total)); gtk_widget_show (rdpattern_total); gtk_container_add (GTK_CONTAINER (main_pol_menu_menu), rdpattern_total); gtk_tooltips_set_tip (tooltips, rdpattern_total, _("Total gain"), NULL); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (rdpattern_total), TRUE); rdpattern_horizontal = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Horizontal")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_horizontal)); gtk_widget_show (rdpattern_horizontal); gtk_container_add (GTK_CONTAINER (main_pol_menu_menu), rdpattern_horizontal); gtk_tooltips_set_tip (tooltips, rdpattern_horizontal, _("Gain in horizontal polarization"), NULL); rdpattern_vertical = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Vertical")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_vertical)); gtk_widget_show (rdpattern_vertical); gtk_container_add (GTK_CONTAINER (main_pol_menu_menu), rdpattern_vertical); gtk_tooltips_set_tip (tooltips, rdpattern_vertical, _("Gain in vertical polarization"), NULL); rdpattern_right_hand = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Right Hand")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_right_hand)); gtk_widget_show (rdpattern_right_hand); gtk_container_add (GTK_CONTAINER (main_pol_menu_menu), rdpattern_right_hand); gtk_tooltips_set_tip (tooltips, rdpattern_right_hand, _("Gain in rhcp"), NULL); rdpattern_left_hand = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Left Hand")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_left_hand)); gtk_widget_show (rdpattern_left_hand); gtk_container_add (GTK_CONTAINER (main_pol_menu_menu), rdpattern_left_hand); gtk_tooltips_set_tip (tooltips, rdpattern_left_hand, _("Gain in lhcp"), NULL); common_projection = gtk_check_menu_item_new_with_mnemonic (_("Common Projection")); gtk_widget_show (common_projection); gtk_container_add (GTK_CONTAINER (main_view_menuitem_menu), common_projection); gtk_tooltips_set_tip (tooltips, common_projection, _("Synchronize projection parameters in different windows"), NULL); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (common_projection), TRUE); common_freq = gtk_check_menu_item_new_with_mnemonic (_("Common Frequency")); gtk_widget_show (common_freq); gtk_container_add (GTK_CONTAINER (main_view_menuitem_menu), common_freq); gtk_tooltips_set_tip (tooltips, common_freq, _("Synchronize frequency selection in different windows"), NULL); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (common_freq), TRUE); menuitem4 = gtk_menu_item_new_with_mnemonic (_("_Help")); gtk_widget_show (menuitem4); gtk_container_add (GTK_CONTAINER (menubar1), menuitem4); menuitem4_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menuitem4_menu); about = gtk_image_menu_item_new_with_mnemonic (_("About")); gtk_widget_show (about); gtk_container_add (GTK_CONTAINER (menuitem4_menu), about); image103 = gtk_image_new_from_stock ("gtk-about", GTK_ICON_SIZE_MENU); gtk_widget_show (image103); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (about), image103); main_hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (main_hbox1); gtk_box_pack_start (GTK_BOX (hbox8), main_hbox1, FALSE, FALSE, 0); vseparator2 = gtk_vseparator_new (); gtk_widget_show (vseparator2); gtk_box_pack_start (GTK_BOX (main_hbox1), vseparator2, FALSE, FALSE, 4); main_currents_togglebutton = gtk_toggle_button_new_with_mnemonic (_("Currents")); gtk_widget_show (main_currents_togglebutton); gtk_box_pack_start (GTK_BOX (main_hbox1), main_currents_togglebutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, main_currents_togglebutton, _("Calculate and Display\nStructure Currents"), NULL); main_charges_togglebutton = gtk_toggle_button_new_with_mnemonic (_("Charges")); gtk_widget_show (main_charges_togglebutton); gtk_box_pack_start (GTK_BOX (main_hbox1), main_charges_togglebutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, main_charges_togglebutton, _("Calculate and Display\nCharge Densities"), NULL); vseparator7 = gtk_vseparator_new (); gtk_widget_show (vseparator7); gtk_box_pack_start (GTK_BOX (main_hbox1), vseparator7, TRUE, TRUE, 4); label214 = gtk_label_new (_("Frequency Loop ")); gtk_widget_show (label214); gtk_box_pack_start (GTK_BOX (main_hbox1), label214, FALSE, FALSE, 0); gtk_label_set_single_line_mode (GTK_LABEL (label214), TRUE); main_loop_start = gtk_button_new (); gtk_widget_show (main_loop_start); gtk_box_pack_start (GTK_BOX (main_hbox1), main_loop_start, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, main_loop_start, _("Start Frequency Loop"), NULL); alignment49 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment49); gtk_container_add (GTK_CONTAINER (main_loop_start), alignment49); hbox47 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox47); gtk_container_add (GTK_CONTAINER (alignment49), hbox47); image52 = gtk_image_new_from_stock ("gtk-media-play", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image52); gtk_box_pack_start (GTK_BOX (hbox47), image52, FALSE, FALSE, 0); label213 = gtk_label_new_with_mnemonic (""); gtk_widget_show (label213); gtk_box_pack_start (GTK_BOX (hbox47), label213, FALSE, FALSE, 0); main_loop_pause = gtk_button_new (); gtk_widget_show (main_loop_pause); gtk_box_pack_start (GTK_BOX (main_hbox1), main_loop_pause, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, main_loop_pause, _("Pause Frequency Loop"), NULL); gtk_widget_add_accelerator (main_loop_pause, "clicked", accel_group, GDK_h, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); image54 = gtk_image_new_from_stock ("gtk-media-pause", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image54); gtk_container_add (GTK_CONTAINER (main_loop_pause), image54); main_loop_reset = gtk_button_new (); gtk_widget_show (main_loop_reset); gtk_box_pack_start (GTK_BOX (main_hbox1), main_loop_reset, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, main_loop_reset, _("Reset Frequency Loop"), NULL); gtk_widget_add_accelerator (main_loop_reset, "clicked", accel_group, GDK_r, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); image53 = gtk_image_new_from_stock ("gtk-media-rewind", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image53); gtk_container_add (GTK_CONTAINER (main_loop_reset), image53); label244 = gtk_label_new (_(" Step ")); gtk_widget_show (label244); gtk_box_pack_start (GTK_BOX (main_hbox1), label244, FALSE, FALSE, 0); gtk_label_set_single_line_mode (GTK_LABEL (label244), TRUE); structure_fstep_entry = gtk_entry_new (); gtk_widget_show (structure_fstep_entry); gtk_box_pack_start (GTK_BOX (main_hbox1), structure_fstep_entry, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, structure_fstep_entry, _("Current Frequency Step"), NULL); gtk_entry_set_max_length (GTK_ENTRY (structure_fstep_entry), 3); gtk_editable_set_editable (GTK_EDITABLE (structure_fstep_entry), FALSE); gtk_entry_set_text (GTK_ENTRY (structure_fstep_entry), _("1")); gtk_entry_set_invisible_char (GTK_ENTRY (structure_fstep_entry), 9679); gtk_entry_set_width_chars (GTK_ENTRY (structure_fstep_entry), 3); hseparator1 = gtk_hseparator_new (); gtk_widget_show (hseparator1); gtk_box_pack_start (GTK_BOX (vbox1), hseparator1, FALSE, FALSE, 4); main_hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_show (main_hbox2); gtk_box_pack_start (GTK_BOX (vbox1), main_hbox2, FALSE, FALSE, 0); gtk_widget_set_size_request (main_hbox2, -1, 30); main_colorcode_zerolabel = gtk_label_new (_("0")); gtk_widget_show (main_colorcode_zerolabel); gtk_box_pack_start (GTK_BOX (main_hbox2), main_colorcode_zerolabel, FALSE, FALSE, 2); gtk_label_set_width_chars (GTK_LABEL (main_colorcode_zerolabel), 1); main_colorcode_drawingarea = gtk_drawing_area_new (); gtk_widget_show (main_colorcode_drawingarea); gtk_box_pack_start (GTK_BOX (main_hbox2), main_colorcode_drawingarea, FALSE, FALSE, 0); gtk_widget_set_size_request (main_colorcode_drawingarea, 160, -1); gtk_tooltips_set_tip (tooltips, main_colorcode_drawingarea, _("Color Code for Structure's\nCurrent or Charge Values"), NULL); main_colorcode_maxlabel = gtk_label_new (_("0.00")); gtk_widget_show (main_colorcode_maxlabel); gtk_box_pack_start (GTK_BOX (main_hbox2), main_colorcode_maxlabel, FALSE, FALSE, 0); gtk_misc_set_alignment (GTK_MISC (main_colorcode_maxlabel), 0, 0.5); gtk_label_set_width_chars (GTK_LABEL (main_colorcode_maxlabel), 11); main_gain_entry = gtk_entry_new (); gtk_widget_show (main_gain_entry); gtk_box_pack_start (GTK_BOX (main_hbox2), main_gain_entry, FALSE, FALSE, 2); gtk_tooltips_set_tip (tooltips, main_gain_entry, _("Gain in Direction of Viewer\n(Perpenticular to Screen)"), NULL); gtk_entry_set_text (GTK_ENTRY (main_gain_entry), _(" - - - - -")); gtk_entry_set_width_chars (GTK_ENTRY (main_gain_entry), 6); label10 = gtk_label_new (_("dB ")); gtk_widget_show (label10); gtk_box_pack_start (GTK_BOX (main_hbox2), label10, FALSE, FALSE, 0); gtk_label_set_single_line_mode (GTK_LABEL (label10), TRUE); main_freq_spinbutton_adj = gtk_adjustment_new (0.00999999977648, 0.00999999977648, 9999, 0.00999999977648, 10, 0); main_freq_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (main_freq_spinbutton_adj), 0.0010000000475, 3); gtk_widget_show (main_freq_spinbutton); gtk_box_pack_start (GTK_BOX (main_hbox2), main_freq_spinbutton, FALSE, FALSE, 2); gtk_tooltips_set_tip (tooltips, main_freq_spinbutton, _("Enter Frequency in MHz"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (main_freq_spinbutton), TRUE); main_freq_label = gtk_label_new (_("MHz ")); gtk_widget_show (main_freq_label); gtk_box_pack_start (GTK_BOX (main_hbox2), main_freq_label, FALSE, FALSE, 0); gtk_label_set_single_line_mode (GTK_LABEL (main_freq_label), TRUE); main_freq_checkbutton = gtk_check_button_new_with_mnemonic (_("Apply")); gtk_widget_show (main_freq_checkbutton); gtk_box_pack_start (GTK_BOX (main_hbox2), main_freq_checkbutton, FALSE, FALSE, 2); gtk_tooltips_set_tip (tooltips, main_freq_checkbutton, _("Enable Data Calculation\non Frequency Change"), NULL); gtk_button_set_focus_on_click (GTK_BUTTON (main_freq_checkbutton), FALSE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (main_freq_checkbutton), TRUE); main_new_freq_button = gtk_button_new (); gtk_widget_show (main_new_freq_button); gtk_box_pack_start (GTK_BOX (main_hbox2), main_new_freq_button, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, main_new_freq_button, _("Calculate Data\nfor New Frequency"), NULL); gtk_widget_add_accelerator (main_new_freq_button, "clicked", accel_group, GDK_a, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); image46 = gtk_image_new_from_stock ("gtk-apply", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image46); gtk_container_add (GTK_CONTAINER (main_new_freq_button), image46); hseparator11 = gtk_hseparator_new (); gtk_widget_show (hseparator11); gtk_box_pack_start (GTK_BOX (vbox1), hseparator11, FALSE, FALSE, 4); frame1 = gtk_frame_new (NULL); gtk_widget_show (frame1); gtk_box_pack_start (GTK_BOX (vbox1), frame1, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame1), 4); alignment1 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment1); gtk_container_add (GTK_CONTAINER (frame1), alignment1); gtk_container_set_border_width (GTK_CONTAINER (alignment1), 2); structure_drawingarea = gtk_drawing_area_new (); gtk_widget_show (structure_drawingarea); gtk_container_add (GTK_CONTAINER (alignment1), structure_drawingarea); gtk_widget_set_size_request (structure_drawingarea, 769, 769); GTK_WIDGET_SET_FLAGS (structure_drawingarea, GTK_CAN_FOCUS); main_hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_show (main_hbox3); gtk_frame_set_label_widget (GTK_FRAME (frame1), main_hbox3); struct_label = gtk_label_new (_("View Geometry")); gtk_widget_show (struct_label); gtk_box_pack_start (GTK_BOX (main_hbox3), struct_label, FALSE, FALSE, 0); gtk_label_set_width_chars (GTK_LABEL (struct_label), 14); gtk_label_set_single_line_mode (GTK_LABEL (struct_label), TRUE); main_x_axis = gtk_button_new_with_mnemonic (_("X")); gtk_widget_show (main_x_axis); gtk_box_pack_start (GTK_BOX (main_hbox3), main_x_axis, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, main_x_axis, _("View Structure along X-axis"), NULL); gtk_widget_add_accelerator (main_x_axis, "clicked", accel_group, GDK_x, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); main_y_axis = gtk_button_new_with_mnemonic (_("Y")); gtk_widget_show (main_y_axis); gtk_box_pack_start (GTK_BOX (main_hbox3), main_y_axis, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, main_y_axis, _("View Structure along Y-axis"), NULL); gtk_widget_add_accelerator (main_y_axis, "clicked", accel_group, GDK_y, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); main_z_axis = gtk_button_new_with_mnemonic (_("Z")); gtk_widget_show (main_z_axis); gtk_box_pack_start (GTK_BOX (main_hbox3), main_z_axis, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, main_z_axis, _("View Strucure along Z-axis"), NULL); gtk_widget_add_accelerator (main_z_axis, "clicked", accel_group, GDK_z, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); main_default_view = gtk_button_new (); gtk_widget_show (main_default_view); gtk_box_pack_start (GTK_BOX (main_hbox3), main_default_view, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, main_default_view, _("View Strucure\nin Default Projection"), NULL); gtk_widget_add_accelerator (main_default_view, "clicked", accel_group, GDK_r, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); image32 = gtk_image_new_from_stock ("gtk-redo", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image32); gtk_container_add (GTK_CONTAINER (main_default_view), image32); vseparator1 = gtk_vseparator_new (); gtk_widget_show (vseparator1); gtk_box_pack_start (GTK_BOX (main_hbox3), vseparator1, TRUE, TRUE, 0); image50 = gtk_image_new_from_stock ("gtk-refresh", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image50); gtk_box_pack_start (GTK_BOX (main_hbox3), image50, TRUE, TRUE, 0); main_rotate_spinbutton_adj = gtk_adjustment_new (45, -360, 360, 1, 10, 0); main_rotate_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (main_rotate_spinbutton_adj), 1, 0); gtk_widget_show (main_rotate_spinbutton); gtk_box_pack_start (GTK_BOX (main_hbox3), main_rotate_spinbutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, main_rotate_spinbutton, _("Rotate Structure\n around Z-axis"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (main_rotate_spinbutton), TRUE); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (main_rotate_spinbutton), TRUE); image51 = gtk_image_new_from_stock ("gtk-go-down", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image51); gtk_box_pack_start (GTK_BOX (main_hbox3), image51, TRUE, TRUE, 0); main_incline_spinbutton_adj = gtk_adjustment_new (45, -180, 180, 1, 10, 0); main_incline_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (main_incline_spinbutton_adj), 1, 0); gtk_widget_show (main_incline_spinbutton); gtk_box_pack_start (GTK_BOX (main_hbox3), main_incline_spinbutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, main_incline_spinbutton, _("Incline Structure\nto Plane of Screen"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (main_incline_spinbutton), TRUE); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (main_incline_spinbutton), TRUE); label245 = gtk_label_new (_(" Zoom % ")); gtk_widget_show (label245); gtk_box_pack_start (GTK_BOX (main_hbox3), label245, FALSE, FALSE, 0); gtk_label_set_single_line_mode (GTK_LABEL (label245), TRUE); structure_zoom_spinbutton_adj = gtk_adjustment_new (100, 10, 999, 1, 10, 0); structure_zoom_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (structure_zoom_spinbutton_adj), 1, 0); gtk_widget_show (structure_zoom_spinbutton); gtk_box_pack_start (GTK_BOX (main_hbox3), structure_zoom_spinbutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, structure_zoom_spinbutton, _("Zoom Structure Display"), NULL); structure_plus_button = gtk_button_new (); gtk_widget_show (structure_plus_button); gtk_box_pack_start (GTK_BOX (main_hbox3), structure_plus_button, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, structure_plus_button, _("Zoom In"), NULL); image94 = gtk_image_new_from_stock ("gtk-zoom-in", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image94); gtk_container_add (GTK_CONTAINER (structure_plus_button), image94); structure_minus_button = gtk_button_new (); gtk_widget_show (structure_minus_button); gtk_box_pack_start (GTK_BOX (main_hbox3), structure_minus_button, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, structure_minus_button, _("Zoom Out"), NULL); image95 = gtk_image_new_from_stock ("gtk-zoom-out", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image95); gtk_container_add (GTK_CONTAINER (structure_minus_button), image95); structure_one_button = gtk_button_new (); gtk_widget_show (structure_one_button); gtk_box_pack_start (GTK_BOX (main_hbox3), structure_one_button, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, structure_one_button, _("Zoom to Default 1:1"), NULL); image96 = gtk_image_new_from_stock ("gtk-zoom-100", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image96); gtk_container_add (GTK_CONTAINER (structure_one_button), image96); g_signal_connect ((gpointer) main_window, "destroy", G_CALLBACK (on_main_window_destroy), NULL); g_signal_connect ((gpointer) main_window, "delete_event", G_CALLBACK (on_main_window_delete_event), NULL); g_signal_connect ((gpointer) main_new, "activate", G_CALLBACK (on_new_activate), NULL); g_signal_connect ((gpointer) main_open_input, "activate", G_CALLBACK (on_open_input_activate), NULL); g_signal_connect ((gpointer) nec2_edit, "activate", G_CALLBACK (on_nec2_edit_activate), NULL); g_signal_connect ((gpointer) main_save, "activate", G_CALLBACK (on_main_save_activate), NULL); g_signal_connect ((gpointer) main_save_as, "activate", G_CALLBACK (on_main_save_as_activate), NULL); g_signal_connect ((gpointer) struct_save_as_gnuplot, "activate", G_CALLBACK (on_struct_save_as_gnuplot_activate), NULL); g_signal_connect ((gpointer) main_quit, "activate", G_CALLBACK (on_quit_activate), NULL); g_signal_connect ((gpointer) main_view_menuitem, "activate", G_CALLBACK (main_view_menuitem_activate), NULL); g_signal_connect ((gpointer) main_rdpattern, "activate", G_CALLBACK (on_main_rdpattern_activate), NULL); g_signal_connect ((gpointer) main_freqplots, "activate", G_CALLBACK (on_main_freqplots_activate), NULL); g_signal_connect ((gpointer) main_pol_menu, "activate", G_CALLBACK (main_pol_menu_activate), NULL); g_signal_connect ((gpointer) rdpattern_total, "activate", G_CALLBACK (on_rdpattern_total_activate), NULL); g_signal_connect ((gpointer) rdpattern_horizontal, "activate", G_CALLBACK (on_rdpattern_horizontal_activate), NULL); g_signal_connect ((gpointer) rdpattern_vertical, "activate", G_CALLBACK (on_rdpattern_vertical_activate), NULL); g_signal_connect ((gpointer) rdpattern_right_hand, "activate", G_CALLBACK (on_rdpattern_right_hand_activate), NULL); g_signal_connect ((gpointer) rdpattern_left_hand, "activate", G_CALLBACK (on_rdpattern_left_hand_activate), NULL); g_signal_connect ((gpointer) common_projection, "activate", G_CALLBACK (on_common_projection_activate), NULL); g_signal_connect ((gpointer) common_freq, "activate", G_CALLBACK (on_common_freq_activate), NULL); g_signal_connect ((gpointer) about, "activate", G_CALLBACK (on_about_activate), NULL); g_signal_connect ((gpointer) main_currents_togglebutton, "toggled", G_CALLBACK (on_main_currents_togglebutton_toggled), NULL); g_signal_connect ((gpointer) main_charges_togglebutton, "toggled", G_CALLBACK (on_main_charges_togglebutton_toggled), NULL); g_signal_connect ((gpointer) main_loop_start, "clicked", G_CALLBACK (on_loop_start_clicked), NULL); g_signal_connect ((gpointer) main_loop_pause, "clicked", G_CALLBACK (on_loop_pause_clicked), NULL); g_signal_connect ((gpointer) main_loop_reset, "clicked", G_CALLBACK (on_loop_reset_clicked), NULL); g_signal_connect ((gpointer) main_colorcode_drawingarea, "expose_event", G_CALLBACK (on_main_colorcode_drawingarea_expose_event), NULL); g_signal_connect ((gpointer) main_freq_spinbutton, "value_changed", G_CALLBACK (on_main_freq_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) main_freq_checkbutton, "toggled", G_CALLBACK (on_main_freq_checkbutton_toggled), NULL); g_signal_connect ((gpointer) main_new_freq_button, "clicked", G_CALLBACK (on_main_new_freq_clicked), NULL); g_signal_connect ((gpointer) structure_drawingarea, "configure_event", G_CALLBACK (on_structure_drawingarea_configure_event), NULL); g_signal_connect ((gpointer) structure_drawingarea, "expose_event", G_CALLBACK (on_structure_drawingarea_expose_event), NULL); g_signal_connect ((gpointer) structure_drawingarea, "button_press_event", G_CALLBACK (on_structure_drawingarea_button_press_event), NULL); g_signal_connect ((gpointer) structure_drawingarea, "scroll_event", G_CALLBACK (on_structure_drawingarea_scroll_event), NULL); g_signal_connect ((gpointer) main_x_axis, "clicked", G_CALLBACK (on_main_x_axis_clicked), NULL); g_signal_connect ((gpointer) main_y_axis, "clicked", G_CALLBACK (on_main_y_axis_clicked), NULL); g_signal_connect ((gpointer) main_z_axis, "clicked", G_CALLBACK (on_main_z_axis_clicked), NULL); g_signal_connect ((gpointer) main_default_view, "clicked", G_CALLBACK (on_main_default_view_clicked), NULL); g_signal_connect ((gpointer) main_rotate_spinbutton, "value_changed", G_CALLBACK (on_main_rotate_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) main_incline_spinbutton, "value_changed", G_CALLBACK (on_main_incline_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) structure_zoom_spinbutton, "value_changed", G_CALLBACK (on_structure_zoom_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) structure_plus_button, "clicked", G_CALLBACK (on_structure_plus_button_clicked), NULL); g_signal_connect ((gpointer) structure_minus_button, "clicked", G_CALLBACK (on_structure_minus_button_clicked), NULL); g_signal_connect ((gpointer) structure_one_button, "clicked", G_CALLBACK (on_structure_one_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (main_window, main_window, "main_window"); GLADE_HOOKUP_OBJECT (main_window, vbox1, "vbox1"); GLADE_HOOKUP_OBJECT (main_window, hbox8, "hbox8"); GLADE_HOOKUP_OBJECT (main_window, menubar1, "menubar1"); GLADE_HOOKUP_OBJECT (main_window, menuitem1, "menuitem1"); GLADE_HOOKUP_OBJECT (main_window, menuitem1_menu, "menuitem1_menu"); GLADE_HOOKUP_OBJECT (main_window, main_new, "main_new"); GLADE_HOOKUP_OBJECT (main_window, main_open_input, "main_open_input"); GLADE_HOOKUP_OBJECT (main_window, nec2_edit, "nec2_edit"); GLADE_HOOKUP_OBJECT (main_window, main_save, "main_save"); GLADE_HOOKUP_OBJECT (main_window, main_save_as, "main_save_as"); GLADE_HOOKUP_OBJECT (main_window, struct_save_as_gnuplot, "struct_save_as_gnuplot"); GLADE_HOOKUP_OBJECT (main_window, image102, "image102"); GLADE_HOOKUP_OBJECT (main_window, separator1, "separator1"); GLADE_HOOKUP_OBJECT (main_window, main_quit, "main_quit"); GLADE_HOOKUP_OBJECT (main_window, main_view_menuitem, "main_view_menuitem"); GLADE_HOOKUP_OBJECT (main_window, main_view_menuitem_menu, "main_view_menuitem_menu"); GLADE_HOOKUP_OBJECT (main_window, main_rdpattern, "main_rdpattern"); GLADE_HOOKUP_OBJECT (main_window, main_freqplots, "main_freqplots"); GLADE_HOOKUP_OBJECT (main_window, main_pol_menu, "main_pol_menu"); GLADE_HOOKUP_OBJECT (main_window, main_pol_menu_menu, "main_pol_menu_menu"); GLADE_HOOKUP_OBJECT (main_window, rdpattern_total, "rdpattern_total"); GLADE_HOOKUP_OBJECT (main_window, rdpattern_horizontal, "rdpattern_horizontal"); GLADE_HOOKUP_OBJECT (main_window, rdpattern_vertical, "rdpattern_vertical"); GLADE_HOOKUP_OBJECT (main_window, rdpattern_right_hand, "rdpattern_right_hand"); GLADE_HOOKUP_OBJECT (main_window, rdpattern_left_hand, "rdpattern_left_hand"); GLADE_HOOKUP_OBJECT (main_window, common_projection, "common_projection"); GLADE_HOOKUP_OBJECT (main_window, common_freq, "common_freq"); GLADE_HOOKUP_OBJECT (main_window, menuitem4, "menuitem4"); GLADE_HOOKUP_OBJECT (main_window, menuitem4_menu, "menuitem4_menu"); GLADE_HOOKUP_OBJECT (main_window, about, "about"); GLADE_HOOKUP_OBJECT (main_window, image103, "image103"); GLADE_HOOKUP_OBJECT (main_window, main_hbox1, "main_hbox1"); GLADE_HOOKUP_OBJECT (main_window, vseparator2, "vseparator2"); GLADE_HOOKUP_OBJECT (main_window, main_currents_togglebutton, "main_currents_togglebutton"); GLADE_HOOKUP_OBJECT (main_window, main_charges_togglebutton, "main_charges_togglebutton"); GLADE_HOOKUP_OBJECT (main_window, vseparator7, "vseparator7"); GLADE_HOOKUP_OBJECT (main_window, label214, "label214"); GLADE_HOOKUP_OBJECT (main_window, main_loop_start, "main_loop_start"); GLADE_HOOKUP_OBJECT (main_window, alignment49, "alignment49"); GLADE_HOOKUP_OBJECT (main_window, hbox47, "hbox47"); GLADE_HOOKUP_OBJECT (main_window, image52, "image52"); GLADE_HOOKUP_OBJECT (main_window, label213, "label213"); GLADE_HOOKUP_OBJECT (main_window, main_loop_pause, "main_loop_pause"); GLADE_HOOKUP_OBJECT (main_window, image54, "image54"); GLADE_HOOKUP_OBJECT (main_window, main_loop_reset, "main_loop_reset"); GLADE_HOOKUP_OBJECT (main_window, image53, "image53"); GLADE_HOOKUP_OBJECT (main_window, label244, "label244"); GLADE_HOOKUP_OBJECT (main_window, structure_fstep_entry, "structure_fstep_entry"); GLADE_HOOKUP_OBJECT (main_window, hseparator1, "hseparator1"); GLADE_HOOKUP_OBJECT (main_window, main_hbox2, "main_hbox2"); GLADE_HOOKUP_OBJECT (main_window, main_colorcode_zerolabel, "main_colorcode_zerolabel"); GLADE_HOOKUP_OBJECT (main_window, main_colorcode_drawingarea, "main_colorcode_drawingarea"); GLADE_HOOKUP_OBJECT (main_window, main_colorcode_maxlabel, "main_colorcode_maxlabel"); GLADE_HOOKUP_OBJECT (main_window, main_gain_entry, "main_gain_entry"); GLADE_HOOKUP_OBJECT (main_window, label10, "label10"); GLADE_HOOKUP_OBJECT (main_window, main_freq_spinbutton, "main_freq_spinbutton"); GLADE_HOOKUP_OBJECT (main_window, main_freq_label, "main_freq_label"); GLADE_HOOKUP_OBJECT (main_window, main_freq_checkbutton, "main_freq_checkbutton"); GLADE_HOOKUP_OBJECT (main_window, main_new_freq_button, "main_new_freq_button"); GLADE_HOOKUP_OBJECT (main_window, image46, "image46"); GLADE_HOOKUP_OBJECT (main_window, hseparator11, "hseparator11"); GLADE_HOOKUP_OBJECT (main_window, frame1, "frame1"); GLADE_HOOKUP_OBJECT (main_window, alignment1, "alignment1"); GLADE_HOOKUP_OBJECT (main_window, structure_drawingarea, "structure_drawingarea"); GLADE_HOOKUP_OBJECT (main_window, main_hbox3, "main_hbox3"); GLADE_HOOKUP_OBJECT (main_window, struct_label, "struct_label"); GLADE_HOOKUP_OBJECT (main_window, main_x_axis, "main_x_axis"); GLADE_HOOKUP_OBJECT (main_window, main_y_axis, "main_y_axis"); GLADE_HOOKUP_OBJECT (main_window, main_z_axis, "main_z_axis"); GLADE_HOOKUP_OBJECT (main_window, main_default_view, "main_default_view"); GLADE_HOOKUP_OBJECT (main_window, image32, "image32"); GLADE_HOOKUP_OBJECT (main_window, vseparator1, "vseparator1"); GLADE_HOOKUP_OBJECT (main_window, image50, "image50"); GLADE_HOOKUP_OBJECT (main_window, main_rotate_spinbutton, "main_rotate_spinbutton"); GLADE_HOOKUP_OBJECT (main_window, image51, "image51"); GLADE_HOOKUP_OBJECT (main_window, main_incline_spinbutton, "main_incline_spinbutton"); GLADE_HOOKUP_OBJECT (main_window, label245, "label245"); GLADE_HOOKUP_OBJECT (main_window, structure_zoom_spinbutton, "structure_zoom_spinbutton"); GLADE_HOOKUP_OBJECT (main_window, structure_plus_button, "structure_plus_button"); GLADE_HOOKUP_OBJECT (main_window, image94, "image94"); GLADE_HOOKUP_OBJECT (main_window, structure_minus_button, "structure_minus_button"); GLADE_HOOKUP_OBJECT (main_window, image95, "image95"); GLADE_HOOKUP_OBJECT (main_window, structure_one_button, "structure_one_button"); GLADE_HOOKUP_OBJECT (main_window, image96, "image96"); GLADE_HOOKUP_OBJECT_NO_REF (main_window, tooltips, "tooltips"); gtk_window_add_accel_group (GTK_WINDOW (main_window), accel_group); return main_window; } GtkWidget* create_filechooserdialog (void) { GtkWidget *filechooserdialog; GtkWidget *dialog_vbox1; GtkWidget *dialog_action_area1; GtkWidget *filechoser_cancel; GtkWidget *filechooser_open; filechooserdialog = gtk_file_chooser_dialog_new (_("xnec2c"), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, NULL, NULL); gtk_container_set_border_width (GTK_CONTAINER (filechooserdialog), 5); g_object_set (filechooserdialog, "show-hidden", TRUE, NULL); gtk_window_set_position (GTK_WINDOW (filechooserdialog), GTK_WIN_POS_MOUSE); gtk_window_set_role (GTK_WINDOW (filechooserdialog), "GtkFileChooserDialog"); gtk_window_set_type_hint (GTK_WINDOW (filechooserdialog), GDK_WINDOW_TYPE_HINT_DIALOG); dialog_vbox1 = GTK_DIALOG (filechooserdialog)->vbox; gtk_widget_show (dialog_vbox1); dialog_action_area1 = GTK_DIALOG (filechooserdialog)->action_area; gtk_widget_show (dialog_action_area1); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END); filechoser_cancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_show (filechoser_cancel); gtk_dialog_add_action_widget (GTK_DIALOG (filechooserdialog), filechoser_cancel, GTK_RESPONSE_CANCEL); gtk_container_set_border_width (GTK_CONTAINER (filechoser_cancel), 2); GTK_WIDGET_SET_FLAGS (filechoser_cancel, GTK_CAN_DEFAULT); filechooser_open = gtk_button_new_from_stock ("gtk-open"); gtk_widget_show (filechooser_open); gtk_dialog_add_action_widget (GTK_DIALOG (filechooserdialog), filechooser_open, GTK_RESPONSE_OK); gtk_container_set_border_width (GTK_CONTAINER (filechooser_open), 2); GTK_WIDGET_SET_FLAGS (filechooser_open, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) filechooserdialog, "response", G_CALLBACK (on_filechooserdialog_response), NULL); g_signal_connect ((gpointer) filechoser_cancel, "clicked", G_CALLBACK (on_filechoser_cancel_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (filechooserdialog, filechooserdialog, "filechooserdialog"); GLADE_HOOKUP_OBJECT_NO_REF (filechooserdialog, dialog_vbox1, "dialog_vbox1"); GLADE_HOOKUP_OBJECT_NO_REF (filechooserdialog, dialog_action_area1, "dialog_action_area1"); GLADE_HOOKUP_OBJECT (filechooserdialog, filechoser_cancel, "filechoser_cancel"); GLADE_HOOKUP_OBJECT (filechooserdialog, filechooser_open, "filechooser_open"); gtk_widget_grab_default (filechooser_open); return filechooserdialog; } GtkWidget* create_fileselection (void) { GtkWidget *fileselection; GtkWidget *ok_button1; GtkWidget *fileselection_cancel; fileselection = gtk_file_selection_new (_("Select File")); gtk_container_set_border_width (GTK_CONTAINER (fileselection), 10); gtk_window_set_position (GTK_WINDOW (fileselection), GTK_WIN_POS_MOUSE); gtk_window_set_type_hint (GTK_WINDOW (fileselection), GDK_WINDOW_TYPE_HINT_DIALOG); ok_button1 = GTK_FILE_SELECTION (fileselection)->ok_button; gtk_widget_show (ok_button1); GTK_WIDGET_SET_FLAGS (ok_button1, GTK_CAN_DEFAULT); fileselection_cancel = GTK_FILE_SELECTION (fileselection)->cancel_button; gtk_widget_show (fileselection_cancel); GTK_WIDGET_SET_FLAGS (fileselection_cancel, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) fileselection, "response", G_CALLBACK (on_fileselection_response), NULL); g_signal_connect ((gpointer) fileselection_cancel, "clicked", G_CALLBACK (on_fileselection_cancel_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (fileselection, fileselection, "fileselection"); GLADE_HOOKUP_OBJECT_NO_REF (fileselection, ok_button1, "ok_button1"); GLADE_HOOKUP_OBJECT_NO_REF (fileselection, fileselection_cancel, "fileselection_cancel"); return fileselection; } GtkWidget* create_freqplots_window (void) { GtkWidget *freqplots_window; GtkWidget *vbox2; GtkWidget *freqplots_hbox1; GtkWidget *menubar2; GtkWidget *menuitem5; GtkWidget *menuitem5_menu; GtkWidget *freqplots_new; GtkWidget *freqplots_open_input; GtkWidget *freqplots_save; GtkWidget *freqplots_save_as; GtkWidget *freqplots_save_as_gnuplot; GtkWidget *separatormenuitem2; GtkWidget *freqplots_quit; GtkWidget *view_menuitem; GtkWidget *view_menuitem_menu; GtkWidget *freqplots_pol_menu; GtkWidget *freqplots_pol_menu_menu; GSList *rdpattern_total_group = NULL; GtkWidget *rdpattern_total; GtkWidget *rdpattern_horizontal; GtkWidget *rdpattern_vertical; GtkWidget *rdpattern_right_hand; GtkWidget *rdpattern_left_hand; GtkWidget *net_gain; GtkWidget *hbox10; GtkWidget *freqplots_gmax_togglebutton; GtkWidget *freqplots_gdir_togglebutton; GtkWidget *freqplots_gviewer_togglebutton; GtkWidget *freqplots_vswr_togglebutton; GtkWidget *freqplots_zrlzim_togglebutton; GtkWidget *freqplots_zmgzph_togglebutton; GtkWidget *label215; GtkWidget *plot_loop_start; GtkWidget *image61; GtkWidget *plot_loop_pause; GtkWidget *image64; GtkWidget *plot_loop_reset; GtkWidget *image63; GtkWidget *hseparator4; GtkWidget *hbox15; GtkWidget *label16; GtkWidget *freqplots_fmhz_entry; GtkWidget *label12; GtkWidget *freqplots_maxgain_entry; GtkWidget *label13; GtkWidget *freqplots_vswr_entry; GtkWidget *label14; GtkWidget *freqplots_zreal_entry; GtkWidget *label15; GtkWidget *freqplots_zimag_entry; GtkWidget *label212; GtkObject *freqplots_zo_spinbutton_adj; GtkWidget *freqplots_zo_spinbutton; GtkWidget *frame2; GtkWidget *alignment2; GtkWidget *freqplots_drawingarea; GtkWidget *freqplots_label; GtkAccelGroup *accel_group; GtkTooltips *tooltips; tooltips = gtk_tooltips_new (); accel_group = gtk_accel_group_new (); freqplots_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (freqplots_window), 4); gtk_window_set_title (GTK_WINDOW (freqplots_window), _("Xnec2c: Frequency Data Plots")); gtk_window_set_gravity (GTK_WINDOW (freqplots_window), GDK_GRAVITY_EAST); vbox2 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox2); gtk_container_add (GTK_CONTAINER (freqplots_window), vbox2); freqplots_hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (freqplots_hbox1); gtk_box_pack_start (GTK_BOX (vbox2), freqplots_hbox1, FALSE, FALSE, 0); menubar2 = gtk_menu_bar_new (); gtk_widget_show (menubar2); gtk_box_pack_start (GTK_BOX (freqplots_hbox1), menubar2, FALSE, FALSE, 0); menuitem5 = gtk_menu_item_new_with_mnemonic (_("_File")); gtk_widget_show (menuitem5); gtk_container_add (GTK_CONTAINER (menubar2), menuitem5); menuitem5_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem5), menuitem5_menu); freqplots_new = gtk_image_menu_item_new_from_stock ("gtk-new", accel_group); gtk_widget_show (freqplots_new); gtk_container_add (GTK_CONTAINER (menuitem5_menu), freqplots_new); freqplots_open_input = gtk_image_menu_item_new_from_stock ("gtk-open", accel_group); gtk_widget_show (freqplots_open_input); gtk_container_add (GTK_CONTAINER (menuitem5_menu), freqplots_open_input); freqplots_save = gtk_image_menu_item_new_from_stock ("gtk-save", accel_group); gtk_widget_show (freqplots_save); gtk_container_add (GTK_CONTAINER (menuitem5_menu), freqplots_save); freqplots_save_as = gtk_image_menu_item_new_from_stock ("gtk-save-as", accel_group); gtk_widget_show (freqplots_save_as); gtk_container_add (GTK_CONTAINER (menuitem5_menu), freqplots_save_as); freqplots_save_as_gnuplot = gtk_menu_item_new_with_mnemonic (_("Save As gnuplot")); gtk_widget_show (freqplots_save_as_gnuplot); gtk_container_add (GTK_CONTAINER (menuitem5_menu), freqplots_save_as_gnuplot); separatormenuitem2 = gtk_separator_menu_item_new (); gtk_widget_show (separatormenuitem2); gtk_container_add (GTK_CONTAINER (menuitem5_menu), separatormenuitem2); gtk_widget_set_sensitive (separatormenuitem2, FALSE); freqplots_quit = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group); gtk_widget_show (freqplots_quit); gtk_container_add (GTK_CONTAINER (menuitem5_menu), freqplots_quit); view_menuitem = gtk_menu_item_new_with_mnemonic (_("_View")); gtk_widget_show (view_menuitem); gtk_container_add (GTK_CONTAINER (menubar2), view_menuitem); view_menuitem_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (view_menuitem), view_menuitem_menu); freqplots_pol_menu = gtk_menu_item_new_with_mnemonic (_("Polarization")); gtk_widget_show (freqplots_pol_menu); gtk_container_add (GTK_CONTAINER (view_menuitem_menu), freqplots_pol_menu); gtk_tooltips_set_tip (tooltips, freqplots_pol_menu, _("Disply gain data relevant to polarization"), NULL); freqplots_pol_menu_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (freqplots_pol_menu), freqplots_pol_menu_menu); rdpattern_total = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Total")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_total)); gtk_widget_show (rdpattern_total); gtk_container_add (GTK_CONTAINER (freqplots_pol_menu_menu), rdpattern_total); gtk_tooltips_set_tip (tooltips, rdpattern_total, _("Total gain"), NULL); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (rdpattern_total), TRUE); rdpattern_horizontal = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Horizontal")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_horizontal)); gtk_widget_show (rdpattern_horizontal); gtk_container_add (GTK_CONTAINER (freqplots_pol_menu_menu), rdpattern_horizontal); gtk_tooltips_set_tip (tooltips, rdpattern_horizontal, _("Gain in horizontal polarization"), NULL); rdpattern_vertical = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Vertical")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_vertical)); gtk_widget_show (rdpattern_vertical); gtk_container_add (GTK_CONTAINER (freqplots_pol_menu_menu), rdpattern_vertical); gtk_tooltips_set_tip (tooltips, rdpattern_vertical, _("Plot gain in vertical polarization"), NULL); rdpattern_right_hand = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Right Hand")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_right_hand)); gtk_widget_show (rdpattern_right_hand); gtk_container_add (GTK_CONTAINER (freqplots_pol_menu_menu), rdpattern_right_hand); gtk_tooltips_set_tip (tooltips, rdpattern_right_hand, _("Plot gain in rhcp"), NULL); rdpattern_left_hand = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Left Hand")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_left_hand)); gtk_widget_show (rdpattern_left_hand); gtk_container_add (GTK_CONTAINER (freqplots_pol_menu_menu), rdpattern_left_hand); gtk_tooltips_set_tip (tooltips, rdpattern_left_hand, _("Plot gain in lhcp"), NULL); net_gain = gtk_check_menu_item_new_with_mnemonic (_("Net Gain")); gtk_widget_show (net_gain); gtk_container_add (GTK_CONTAINER (view_menuitem_menu), net_gain); gtk_tooltips_set_tip (tooltips, net_gain, _("Display Net Gain towards Viewer"), NULL); hbox10 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox10); gtk_box_pack_start (GTK_BOX (freqplots_hbox1), hbox10, FALSE, FALSE, 0); freqplots_gmax_togglebutton = gtk_toggle_button_new_with_mnemonic (_("Max Gain")); gtk_widget_show (freqplots_gmax_togglebutton); gtk_box_pack_start (GTK_BOX (hbox10), freqplots_gmax_togglebutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, freqplots_gmax_togglebutton, _("Plot maximum gain over frequency range"), NULL); freqplots_gdir_togglebutton = gtk_toggle_button_new_with_mnemonic (_("Direct.")); gtk_widget_show (freqplots_gdir_togglebutton); gtk_box_pack_start (GTK_BOX (hbox10), freqplots_gdir_togglebutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, freqplots_gdir_togglebutton, _("Plot direction of maximum gain"), NULL); freqplots_gviewer_togglebutton = gtk_toggle_button_new_with_mnemonic (_("Viewer")); gtk_widget_show (freqplots_gviewer_togglebutton); gtk_box_pack_start (GTK_BOX (hbox10), freqplots_gviewer_togglebutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, freqplots_gviewer_togglebutton, _("Plot gain in direction of viewer\n(perpenticular to screen)"), NULL); freqplots_vswr_togglebutton = gtk_toggle_button_new_with_mnemonic (_("VSWR")); gtk_widget_show (freqplots_vswr_togglebutton); gtk_box_pack_start (GTK_BOX (hbox10), freqplots_vswr_togglebutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, freqplots_vswr_togglebutton, _("Plot VSWR over frequency"), NULL); freqplots_zrlzim_togglebutton = gtk_toggle_button_new_with_mnemonic (_("Zr/Zi")); gtk_widget_show (freqplots_zrlzim_togglebutton); gtk_box_pack_start (GTK_BOX (hbox10), freqplots_zrlzim_togglebutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, freqplots_zrlzim_togglebutton, _("Plot real and imaginary input impedances"), NULL); freqplots_zmgzph_togglebutton = gtk_toggle_button_new_with_mnemonic (_("Zm/Zph")); gtk_widget_show (freqplots_zmgzph_togglebutton); gtk_box_pack_start (GTK_BOX (hbox10), freqplots_zmgzph_togglebutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, freqplots_zmgzph_togglebutton, _("Plot magnitude and phase of input impedance"), NULL); label215 = gtk_label_new (_(" Freq Loop ")); gtk_widget_show (label215); gtk_box_pack_start (GTK_BOX (hbox10), label215, FALSE, FALSE, 0); plot_loop_start = gtk_button_new (); gtk_widget_show (plot_loop_start); gtk_box_pack_start (GTK_BOX (freqplots_hbox1), plot_loop_start, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, plot_loop_start, _("Start Frequency Loop"), NULL); image61 = gtk_image_new_from_stock ("gtk-media-play", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image61); gtk_container_add (GTK_CONTAINER (plot_loop_start), image61); plot_loop_pause = gtk_button_new (); gtk_widget_show (plot_loop_pause); gtk_box_pack_start (GTK_BOX (freqplots_hbox1), plot_loop_pause, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, plot_loop_pause, _("Pause Frequency Loop"), NULL); image64 = gtk_image_new_from_stock ("gtk-media-pause", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image64); gtk_container_add (GTK_CONTAINER (plot_loop_pause), image64); plot_loop_reset = gtk_button_new (); gtk_widget_show (plot_loop_reset); gtk_box_pack_start (GTK_BOX (freqplots_hbox1), plot_loop_reset, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, plot_loop_reset, _("Reset Frequency Loop"), NULL); image63 = gtk_image_new_from_stock ("gtk-media-rewind", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image63); gtk_container_add (GTK_CONTAINER (plot_loop_reset), image63); hseparator4 = gtk_hseparator_new (); gtk_widget_show (hseparator4); gtk_box_pack_start (GTK_BOX (vbox2), hseparator4, FALSE, FALSE, 4); hbox15 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox15); gtk_box_pack_start (GTK_BOX (vbox2), hbox15, FALSE, FALSE, 0); gtk_widget_set_size_request (hbox15, -1, 30); label16 = gtk_label_new (_("F MHz")); gtk_widget_show (label16); gtk_box_pack_start (GTK_BOX (hbox15), label16, FALSE, FALSE, 0); freqplots_fmhz_entry = gtk_entry_new (); gtk_widget_show (freqplots_fmhz_entry); gtk_box_pack_start (GTK_BOX (hbox15), freqplots_fmhz_entry, FALSE, FALSE, 0); gtk_entry_set_text (GTK_ENTRY (freqplots_fmhz_entry), _(" - - - - - - -")); gtk_entry_set_width_chars (GTK_ENTRY (freqplots_fmhz_entry), 8); label12 = gtk_label_new (_(" Max Gain")); gtk_widget_show (label12); gtk_box_pack_start (GTK_BOX (hbox15), label12, FALSE, FALSE, 0); freqplots_maxgain_entry = gtk_entry_new (); gtk_widget_show (freqplots_maxgain_entry); gtk_box_pack_start (GTK_BOX (hbox15), freqplots_maxgain_entry, FALSE, FALSE, 0); gtk_entry_set_text (GTK_ENTRY (freqplots_maxgain_entry), _(" - - - - -")); gtk_entry_set_width_chars (GTK_ENTRY (freqplots_maxgain_entry), 6); label13 = gtk_label_new (_(" VSWR")); gtk_widget_show (label13); gtk_box_pack_start (GTK_BOX (hbox15), label13, FALSE, FALSE, 1); freqplots_vswr_entry = gtk_entry_new (); gtk_widget_show (freqplots_vswr_entry); gtk_box_pack_start (GTK_BOX (hbox15), freqplots_vswr_entry, FALSE, FALSE, 0); gtk_entry_set_text (GTK_ENTRY (freqplots_vswr_entry), _(" - - - -")); gtk_entry_set_width_chars (GTK_ENTRY (freqplots_vswr_entry), 5); label14 = gtk_label_new (_(" Zreal")); gtk_widget_show (label14); gtk_box_pack_start (GTK_BOX (hbox15), label14, FALSE, FALSE, 1); freqplots_zreal_entry = gtk_entry_new (); gtk_widget_show (freqplots_zreal_entry); gtk_box_pack_start (GTK_BOX (hbox15), freqplots_zreal_entry, FALSE, FALSE, 0); gtk_entry_set_text (GTK_ENTRY (freqplots_zreal_entry), _(" - - - -")); gtk_entry_set_width_chars (GTK_ENTRY (freqplots_zreal_entry), 5); label15 = gtk_label_new (_(" Zim")); gtk_widget_show (label15); gtk_box_pack_start (GTK_BOX (hbox15), label15, FALSE, FALSE, 1); freqplots_zimag_entry = gtk_entry_new (); gtk_widget_show (freqplots_zimag_entry); gtk_box_pack_start (GTK_BOX (hbox15), freqplots_zimag_entry, FALSE, FALSE, 0); gtk_entry_set_text (GTK_ENTRY (freqplots_zimag_entry), _(" - - - -")); gtk_entry_set_width_chars (GTK_ENTRY (freqplots_zimag_entry), 5); label212 = gtk_label_new (_(" Zo")); gtk_widget_show (label212); gtk_box_pack_start (GTK_BOX (hbox15), label212, FALSE, FALSE, 0); freqplots_zo_spinbutton_adj = gtk_adjustment_new (50, 1, 999, 0.10000000149, 10, 0); freqplots_zo_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (freqplots_zo_spinbutton_adj), 0.20000000298, 1); gtk_widget_show (freqplots_zo_spinbutton); gtk_box_pack_start (GTK_BOX (hbox15), freqplots_zo_spinbutton, FALSE, FALSE, 4); gtk_tooltips_set_tip (tooltips, freqplots_zo_spinbutton, _("Specify Zo of transmission line"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (freqplots_zo_spinbutton), TRUE); frame2 = gtk_frame_new (NULL); gtk_widget_show (frame2); gtk_box_pack_start (GTK_BOX (vbox2), frame2, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame2), 4); alignment2 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment2); gtk_container_add (GTK_CONTAINER (frame2), alignment2); gtk_container_set_border_width (GTK_CONTAINER (alignment2), 2); freqplots_drawingarea = gtk_drawing_area_new (); gtk_widget_show (freqplots_drawingarea); gtk_container_add (GTK_CONTAINER (alignment2), freqplots_drawingarea); gtk_widget_set_size_request (freqplots_drawingarea, 769, 769); GTK_WIDGET_SET_FLAGS (freqplots_drawingarea, GTK_CAN_FOCUS); gtk_widget_set_events (freqplots_drawingarea, GDK_BUTTON_PRESS_MASK); freqplots_label = gtk_label_new (_("Structure Data Plots")); gtk_widget_show (freqplots_label); gtk_frame_set_label_widget (GTK_FRAME (frame2), freqplots_label); gtk_misc_set_padding (GTK_MISC (freqplots_label), 4, 0); g_signal_connect ((gpointer) freqplots_window, "delete_event", G_CALLBACK (on_freqplots_window_delete_event), NULL); g_signal_connect ((gpointer) freqplots_window, "destroy", G_CALLBACK (on_freqplots_window_destroy), NULL); g_signal_connect ((gpointer) freqplots_new, "activate", G_CALLBACK (on_new_activate), NULL); g_signal_connect ((gpointer) freqplots_open_input, "activate", G_CALLBACK (on_open_input_activate), NULL); g_signal_connect ((gpointer) freqplots_save, "activate", G_CALLBACK (on_freqplots_save_activate), NULL); g_signal_connect ((gpointer) freqplots_save_as, "activate", G_CALLBACK (on_freqplots_save_as_activate), NULL); g_signal_connect ((gpointer) freqplots_save_as_gnuplot, "activate", G_CALLBACK (on_freqplots_save_as_gnuplot_activate), NULL); g_signal_connect ((gpointer) freqplots_quit, "activate", G_CALLBACK (on_quit_activate), NULL); g_signal_connect ((gpointer) freqplots_pol_menu, "activate", G_CALLBACK (freqplots_pol_menu_activate), NULL); g_signal_connect ((gpointer) rdpattern_total, "activate", G_CALLBACK (on_rdpattern_total_activate), NULL); g_signal_connect ((gpointer) rdpattern_horizontal, "activate", G_CALLBACK (on_rdpattern_horizontal_activate), NULL); g_signal_connect ((gpointer) rdpattern_vertical, "activate", G_CALLBACK (on_rdpattern_vertical_activate), NULL); g_signal_connect ((gpointer) rdpattern_right_hand, "activate", G_CALLBACK (on_rdpattern_right_hand_activate), NULL); g_signal_connect ((gpointer) rdpattern_left_hand, "activate", G_CALLBACK (on_rdpattern_left_hand_activate), NULL); g_signal_connect ((gpointer) net_gain, "activate", G_CALLBACK (on_net_gain_activate), NULL); g_signal_connect ((gpointer) freqplots_gmax_togglebutton, "toggled", G_CALLBACK (on_freqplots_gmax_togglebutton_toggled), NULL); g_signal_connect ((gpointer) freqplots_gdir_togglebutton, "toggled", G_CALLBACK (on_freqplots_gdir_togglebutton_toggled), NULL); g_signal_connect ((gpointer) freqplots_gviewer_togglebutton, "toggled", G_CALLBACK (on_freqplots_gviewer_togglebutton_toggled), NULL); g_signal_connect ((gpointer) freqplots_vswr_togglebutton, "toggled", G_CALLBACK (on_freqplots_vswr_togglebutton_toggled), NULL); g_signal_connect ((gpointer) freqplots_zrlzim_togglebutton, "toggled", G_CALLBACK (on_freqplots_zrlzim_togglebutton_toggled), NULL); g_signal_connect ((gpointer) freqplots_zmgzph_togglebutton, "toggled", G_CALLBACK (on_freqplots_zmgzph_togglebutton_toggled), NULL); g_signal_connect ((gpointer) plot_loop_start, "clicked", G_CALLBACK (on_loop_start_clicked), NULL); g_signal_connect ((gpointer) plot_loop_pause, "clicked", G_CALLBACK (on_loop_pause_clicked), NULL); g_signal_connect ((gpointer) plot_loop_reset, "clicked", G_CALLBACK (on_loop_reset_clicked), NULL); g_signal_connect ((gpointer) freqplots_zo_spinbutton, "value_changed", G_CALLBACK (on_freqplots_zo_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) freqplots_drawingarea, "expose_event", G_CALLBACK (on_freqplots_drawingarea_expose_event), NULL); g_signal_connect ((gpointer) freqplots_drawingarea, "configure_event", G_CALLBACK (on_freqplots_drawingarea_configure_event), NULL); g_signal_connect ((gpointer) freqplots_drawingarea, "button_press_event", G_CALLBACK (on_freqplots_drawingarea_button_press_event), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (freqplots_window, freqplots_window, "freqplots_window"); GLADE_HOOKUP_OBJECT (freqplots_window, vbox2, "vbox2"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_hbox1, "freqplots_hbox1"); GLADE_HOOKUP_OBJECT (freqplots_window, menubar2, "menubar2"); GLADE_HOOKUP_OBJECT (freqplots_window, menuitem5, "menuitem5"); GLADE_HOOKUP_OBJECT (freqplots_window, menuitem5_menu, "menuitem5_menu"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_new, "freqplots_new"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_open_input, "freqplots_open_input"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_save, "freqplots_save"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_save_as, "freqplots_save_as"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_save_as_gnuplot, "freqplots_save_as_gnuplot"); GLADE_HOOKUP_OBJECT (freqplots_window, separatormenuitem2, "separatormenuitem2"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_quit, "freqplots_quit"); GLADE_HOOKUP_OBJECT (freqplots_window, view_menuitem, "view_menuitem"); GLADE_HOOKUP_OBJECT (freqplots_window, view_menuitem_menu, "view_menuitem_menu"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_pol_menu, "freqplots_pol_menu"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_pol_menu_menu, "freqplots_pol_menu_menu"); GLADE_HOOKUP_OBJECT (freqplots_window, rdpattern_total, "rdpattern_total"); GLADE_HOOKUP_OBJECT (freqplots_window, rdpattern_horizontal, "rdpattern_horizontal"); GLADE_HOOKUP_OBJECT (freqplots_window, rdpattern_vertical, "rdpattern_vertical"); GLADE_HOOKUP_OBJECT (freqplots_window, rdpattern_right_hand, "rdpattern_right_hand"); GLADE_HOOKUP_OBJECT (freqplots_window, rdpattern_left_hand, "rdpattern_left_hand"); GLADE_HOOKUP_OBJECT (freqplots_window, net_gain, "net_gain"); GLADE_HOOKUP_OBJECT (freqplots_window, hbox10, "hbox10"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_gmax_togglebutton, "freqplots_gmax_togglebutton"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_gdir_togglebutton, "freqplots_gdir_togglebutton"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_gviewer_togglebutton, "freqplots_gviewer_togglebutton"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_vswr_togglebutton, "freqplots_vswr_togglebutton"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_zrlzim_togglebutton, "freqplots_zrlzim_togglebutton"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_zmgzph_togglebutton, "freqplots_zmgzph_togglebutton"); GLADE_HOOKUP_OBJECT (freqplots_window, label215, "label215"); GLADE_HOOKUP_OBJECT (freqplots_window, plot_loop_start, "plot_loop_start"); GLADE_HOOKUP_OBJECT (freqplots_window, image61, "image61"); GLADE_HOOKUP_OBJECT (freqplots_window, plot_loop_pause, "plot_loop_pause"); GLADE_HOOKUP_OBJECT (freqplots_window, image64, "image64"); GLADE_HOOKUP_OBJECT (freqplots_window, plot_loop_reset, "plot_loop_reset"); GLADE_HOOKUP_OBJECT (freqplots_window, image63, "image63"); GLADE_HOOKUP_OBJECT (freqplots_window, hseparator4, "hseparator4"); GLADE_HOOKUP_OBJECT (freqplots_window, hbox15, "hbox15"); GLADE_HOOKUP_OBJECT (freqplots_window, label16, "label16"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_fmhz_entry, "freqplots_fmhz_entry"); GLADE_HOOKUP_OBJECT (freqplots_window, label12, "label12"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_maxgain_entry, "freqplots_maxgain_entry"); GLADE_HOOKUP_OBJECT (freqplots_window, label13, "label13"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_vswr_entry, "freqplots_vswr_entry"); GLADE_HOOKUP_OBJECT (freqplots_window, label14, "label14"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_zreal_entry, "freqplots_zreal_entry"); GLADE_HOOKUP_OBJECT (freqplots_window, label15, "label15"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_zimag_entry, "freqplots_zimag_entry"); GLADE_HOOKUP_OBJECT (freqplots_window, label212, "label212"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_zo_spinbutton, "freqplots_zo_spinbutton"); GLADE_HOOKUP_OBJECT (freqplots_window, frame2, "frame2"); GLADE_HOOKUP_OBJECT (freqplots_window, alignment2, "alignment2"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_drawingarea, "freqplots_drawingarea"); GLADE_HOOKUP_OBJECT (freqplots_window, freqplots_label, "freqplots_label"); GLADE_HOOKUP_OBJECT_NO_REF (freqplots_window, tooltips, "tooltips"); gtk_window_add_accel_group (GTK_WINDOW (freqplots_window), accel_group); return freqplots_window; } GtkWidget* create_rdpattern_window (void) { GtkWidget *rdpattern_window; GtkWidget *vbox3; GtkWidget *hbox11; GtkWidget *menubar3; GtkWidget *menuitem9; GtkWidget *menuitem9_menu; GtkWidget *rdpattern_new; GtkWidget *rdpattern_open; GtkWidget *rdpattern_save; GtkWidget *rdpattern_save_as; GtkWidget *rdpattern_save_as_gnuplot; GtkWidget *image101; GtkWidget *separatormenuitem3; GtkWidget *rdpattern_quit; GtkWidget *rdpattern_view_menuitem; GtkWidget *rdpattern_view_menuitem_menu; GtkWidget *rdpattern_pol_menu; GtkWidget *rdpattern_pol_menu_menu; GSList *rdpattern_total_group = NULL; GtkWidget *rdpattern_total; GtkWidget *rdpattern_horizontal; GtkWidget *rdpattern_vertical; GtkWidget *rdpattern_right_hand; GtkWidget *rdpattern_left_hand; GtkWidget *rdpattern_gain_scaling; GtkWidget *rdpattern_gain_scaling_menu; GSList *rdpattern_linear_power_group = NULL; GtkWidget *rdpattern_linear_power; GtkWidget *rdpattern_linear_voltage; GtkWidget *rdpattern_arrl_style; GtkWidget *rdpattern_logarithmic; GtkWidget *near_field; GtkWidget *near_field_menu; GtkWidget *rdpattern_e_field; GtkWidget *rdpattern_h_field; GtkWidget *rdpattern_poynting_vector; GtkWidget *rdpattern_animate; GtkWidget *total_field; GtkWidget *total_field_menu; GSList *near_peak_value_group = NULL; GtkWidget *near_peak_value; GtkWidget *near_snapshot; GtkWidget *common_projection; GtkWidget *common_freq; GtkWidget *rdpattern_overlay_structure; GtkWidget *vseparator8; GtkWidget *rdpattern_hbox1; GtkWidget *rdpattern_gain_togglebutton; GtkWidget *rdpattern_eh_togglebutton; GtkWidget *vseparator9; GtkWidget *label216; GtkWidget *rdpatttern_loop_start; GtkWidget *image59; GtkWidget *rdpattern_loop_pause; GtkWidget *image60; GtkWidget *rdpattern_loop_reset; GtkWidget *image58; GtkWidget *label246; GtkWidget *rdpattern_fstep_entry; GtkWidget *hseparator3; GtkWidget *rdpattern_hbox2; GtkWidget *rdpattern_colorcode_minlabel; GtkWidget *rdpattern_colorcode_drawingarea; GtkWidget *rdpattern_colorcode_maxlabel; GtkWidget *rdpattern_viewer_gain; GtkWidget *label11; GtkObject *rdpattern_freq_spinbutton_adj; GtkWidget *rdpattern_freq_spinbutton; GtkWidget *rdpattern_freq_label; GtkWidget *rdpattern_freq_checkbutton; GtkWidget *rdpattern_new_freq_button; GtkWidget *image49; GtkWidget *hseparator12; GtkWidget *rdpattern_label; GtkWidget *frame3; GtkWidget *alignment3; GtkWidget *rdpattern_drawingarea; GtkWidget *rdpattern_hbox3; GtkWidget *label248; GtkWidget *rdpattern_x_axis; GtkWidget *rdpattern_y_axis; GtkWidget *rdpattern_z_axis; GtkWidget *rdpattern_default_view; GtkWidget *image34; GtkWidget *image55; GtkObject *rdpattern_rotate_spinbutton_adj; GtkWidget *rdpattern_rotate_spinbutton; GtkWidget *image56; GtkObject *rdpattern_incline_spinbutton_adj; GtkWidget *rdpattern_incline_spinbutton; GtkWidget *label247; GtkObject *rdpattern_zoom_spinbutton_adj; GtkWidget *rdpattern_zoom_spinbutton; GtkWidget *rdpattern_plus_button; GtkWidget *image98; GtkWidget *rdpattern_minus_button; GtkWidget *image99; GtkWidget *rdpattern_one_button; GtkWidget *image100; GtkAccelGroup *accel_group; GtkTooltips *tooltips; tooltips = gtk_tooltips_new (); accel_group = gtk_accel_group_new (); rdpattern_window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (rdpattern_window), 4); gtk_window_set_title (GTK_WINDOW (rdpattern_window), _("Xnec2c: Radiation Patterns")); gtk_window_set_gravity (GTK_WINDOW (rdpattern_window), GDK_GRAVITY_WEST); vbox3 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox3); gtk_container_add (GTK_CONTAINER (rdpattern_window), vbox3); hbox11 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox11); gtk_box_pack_start (GTK_BOX (vbox3), hbox11, FALSE, FALSE, 0); menubar3 = gtk_menu_bar_new (); gtk_widget_show (menubar3); gtk_box_pack_start (GTK_BOX (hbox11), menubar3, FALSE, FALSE, 0); menuitem9 = gtk_menu_item_new_with_mnemonic (_("_File")); gtk_widget_show (menuitem9); gtk_container_add (GTK_CONTAINER (menubar3), menuitem9); menuitem9_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem9), menuitem9_menu); rdpattern_new = gtk_image_menu_item_new_from_stock ("gtk-new", accel_group); gtk_widget_show (rdpattern_new); gtk_container_add (GTK_CONTAINER (menuitem9_menu), rdpattern_new); rdpattern_open = gtk_image_menu_item_new_from_stock ("gtk-open", accel_group); gtk_widget_show (rdpattern_open); gtk_container_add (GTK_CONTAINER (menuitem9_menu), rdpattern_open); rdpattern_save = gtk_image_menu_item_new_from_stock ("gtk-save", accel_group); gtk_widget_show (rdpattern_save); gtk_container_add (GTK_CONTAINER (menuitem9_menu), rdpattern_save); rdpattern_save_as = gtk_image_menu_item_new_from_stock ("gtk-save-as", accel_group); gtk_widget_show (rdpattern_save_as); gtk_container_add (GTK_CONTAINER (menuitem9_menu), rdpattern_save_as); rdpattern_save_as_gnuplot = gtk_image_menu_item_new_with_mnemonic (_("Save As gnuplot")); gtk_widget_show (rdpattern_save_as_gnuplot); gtk_container_add (GTK_CONTAINER (menuitem9_menu), rdpattern_save_as_gnuplot); image101 = gtk_image_new_from_stock ("gtk-save-as", GTK_ICON_SIZE_MENU); gtk_widget_show (image101); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (rdpattern_save_as_gnuplot), image101); separatormenuitem3 = gtk_separator_menu_item_new (); gtk_widget_show (separatormenuitem3); gtk_container_add (GTK_CONTAINER (menuitem9_menu), separatormenuitem3); gtk_widget_set_sensitive (separatormenuitem3, FALSE); rdpattern_quit = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group); gtk_widget_show (rdpattern_quit); gtk_container_add (GTK_CONTAINER (menuitem9_menu), rdpattern_quit); rdpattern_view_menuitem = gtk_menu_item_new_with_mnemonic (_("_View")); gtk_widget_show (rdpattern_view_menuitem); gtk_container_add (GTK_CONTAINER (menubar3), rdpattern_view_menuitem); rdpattern_view_menuitem_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (rdpattern_view_menuitem), rdpattern_view_menuitem_menu); rdpattern_pol_menu = gtk_menu_item_new_with_mnemonic (_("Polarization")); gtk_widget_show (rdpattern_pol_menu); gtk_container_add (GTK_CONTAINER (rdpattern_view_menuitem_menu), rdpattern_pol_menu); gtk_tooltips_set_tip (tooltips, rdpattern_pol_menu, _("Display gain data relevant to polarization"), NULL); rdpattern_pol_menu_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (rdpattern_pol_menu), rdpattern_pol_menu_menu); rdpattern_total = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Total")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_total)); gtk_widget_show (rdpattern_total); gtk_container_add (GTK_CONTAINER (rdpattern_pol_menu_menu), rdpattern_total); gtk_tooltips_set_tip (tooltips, rdpattern_total, _("Total gain"), NULL); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (rdpattern_total), TRUE); rdpattern_horizontal = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Horizontal")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_horizontal)); gtk_widget_show (rdpattern_horizontal); gtk_container_add (GTK_CONTAINER (rdpattern_pol_menu_menu), rdpattern_horizontal); gtk_tooltips_set_tip (tooltips, rdpattern_horizontal, _("Gain in horizontal polarization"), NULL); rdpattern_vertical = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Vertical")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_vertical)); gtk_widget_show (rdpattern_vertical); gtk_container_add (GTK_CONTAINER (rdpattern_pol_menu_menu), rdpattern_vertical); gtk_tooltips_set_tip (tooltips, rdpattern_vertical, _("Gain in vertical polarization"), NULL); rdpattern_right_hand = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Right Hand")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_right_hand)); gtk_widget_show (rdpattern_right_hand); gtk_container_add (GTK_CONTAINER (rdpattern_pol_menu_menu), rdpattern_right_hand); gtk_tooltips_set_tip (tooltips, rdpattern_right_hand, _("Gain in rhcp"), NULL); rdpattern_left_hand = gtk_radio_menu_item_new_with_mnemonic (rdpattern_total_group, _("Left Hand")); rdpattern_total_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_left_hand)); gtk_widget_show (rdpattern_left_hand); gtk_container_add (GTK_CONTAINER (rdpattern_pol_menu_menu), rdpattern_left_hand); gtk_tooltips_set_tip (tooltips, rdpattern_left_hand, _("Gain in lhcp"), NULL); rdpattern_gain_scaling = gtk_menu_item_new_with_mnemonic (_("Gain Scaling")); gtk_widget_show (rdpattern_gain_scaling); gtk_container_add (GTK_CONTAINER (rdpattern_view_menuitem_menu), rdpattern_gain_scaling); gtk_tooltips_set_tip (tooltips, rdpattern_gain_scaling, _("Select a style of gain scaling"), NULL); rdpattern_gain_scaling_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (rdpattern_gain_scaling), rdpattern_gain_scaling_menu); rdpattern_linear_power = gtk_radio_menu_item_new_with_mnemonic (rdpattern_linear_power_group, _("Linear Power")); rdpattern_linear_power_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_linear_power)); gtk_widget_show (rdpattern_linear_power); gtk_container_add (GTK_CONTAINER (rdpattern_gain_scaling_menu), rdpattern_linear_power); gtk_tooltips_set_tip (tooltips, rdpattern_linear_power, _("Linear power scaling"), NULL); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (rdpattern_linear_power), TRUE); rdpattern_linear_voltage = gtk_radio_menu_item_new_with_mnemonic (rdpattern_linear_power_group, _("Linear Voltage")); rdpattern_linear_power_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_linear_voltage)); gtk_widget_show (rdpattern_linear_voltage); gtk_container_add (GTK_CONTAINER (rdpattern_gain_scaling_menu), rdpattern_linear_voltage); gtk_tooltips_set_tip (tooltips, rdpattern_linear_voltage, _("Linear field voltage scaling"), NULL); rdpattern_arrl_style = gtk_radio_menu_item_new_with_mnemonic (rdpattern_linear_power_group, _("ARRL Style")); rdpattern_linear_power_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_arrl_style)); gtk_widget_show (rdpattern_arrl_style); gtk_container_add (GTK_CONTAINER (rdpattern_gain_scaling_menu), rdpattern_arrl_style); gtk_tooltips_set_tip (tooltips, rdpattern_arrl_style, _("Scale gain in ARRL style"), NULL); rdpattern_logarithmic = gtk_radio_menu_item_new_with_mnemonic (rdpattern_linear_power_group, _("Logarithmic")); rdpattern_linear_power_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (rdpattern_logarithmic)); gtk_widget_show (rdpattern_logarithmic); gtk_container_add (GTK_CONTAINER (rdpattern_gain_scaling_menu), rdpattern_logarithmic); gtk_tooltips_set_tip (tooltips, rdpattern_logarithmic, _("Logarithmic gain scaling"), NULL); near_field = gtk_menu_item_new_with_mnemonic (_("Near Field")); gtk_widget_show (near_field); gtk_container_add (GTK_CONTAINER (rdpattern_view_menuitem_menu), near_field); near_field_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (near_field), near_field_menu); rdpattern_e_field = gtk_check_menu_item_new_with_mnemonic (_("Near E Field")); gtk_widget_show (rdpattern_e_field); gtk_container_add (GTK_CONTAINER (near_field_menu), rdpattern_e_field); gtk_tooltips_set_tip (tooltips, rdpattern_e_field, _("Display near E field"), NULL); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (rdpattern_e_field), TRUE); rdpattern_h_field = gtk_check_menu_item_new_with_mnemonic (_("Near H Field")); gtk_widget_show (rdpattern_h_field); gtk_container_add (GTK_CONTAINER (near_field_menu), rdpattern_h_field); gtk_tooltips_set_tip (tooltips, rdpattern_h_field, _("Display near H field"), NULL); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (rdpattern_h_field), TRUE); rdpattern_poynting_vector = gtk_check_menu_item_new_with_mnemonic (_("Poynting Vector")); gtk_widget_show (rdpattern_poynting_vector); gtk_container_add (GTK_CONTAINER (near_field_menu), rdpattern_poynting_vector); gtk_tooltips_set_tip (tooltips, rdpattern_poynting_vector, _("Display Poynting vector"), NULL); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (rdpattern_poynting_vector), TRUE); rdpattern_animate = gtk_menu_item_new_with_mnemonic (_("Animate Dialog")); gtk_widget_show (rdpattern_animate); gtk_container_add (GTK_CONTAINER (near_field_menu), rdpattern_animate); total_field = gtk_menu_item_new_with_mnemonic (_("Total Field")); gtk_widget_show (total_field); gtk_container_add (GTK_CONTAINER (near_field_menu), total_field); total_field_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (total_field), total_field_menu); near_peak_value = gtk_radio_menu_item_new_with_mnemonic (near_peak_value_group, _("Peak Value")); near_peak_value_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (near_peak_value)); gtk_widget_show (near_peak_value); gtk_container_add (GTK_CONTAINER (total_field_menu), near_peak_value); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (near_peak_value), TRUE); near_snapshot = gtk_radio_menu_item_new_with_mnemonic (near_peak_value_group, _("Snapshot")); near_peak_value_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (near_snapshot)); gtk_widget_show (near_snapshot); gtk_container_add (GTK_CONTAINER (total_field_menu), near_snapshot); common_projection = gtk_check_menu_item_new_with_mnemonic (_("Common Projection")); gtk_widget_show (common_projection); gtk_container_add (GTK_CONTAINER (rdpattern_view_menuitem_menu), common_projection); gtk_tooltips_set_tip (tooltips, common_projection, _("Synchronize projection parametrs in different windows"), NULL); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (common_projection), TRUE); common_freq = gtk_check_menu_item_new_with_mnemonic (_("Common Frequency")); gtk_widget_show (common_freq); gtk_container_add (GTK_CONTAINER (rdpattern_view_menuitem_menu), common_freq); gtk_tooltips_set_tip (tooltips, common_freq, _("Synchronize frequency selection in different windows"), NULL); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (common_freq), TRUE); rdpattern_overlay_structure = gtk_check_menu_item_new_with_mnemonic (_("Overlay Structure")); gtk_widget_show (rdpattern_overlay_structure); gtk_container_add (GTK_CONTAINER (rdpattern_view_menuitem_menu), rdpattern_overlay_structure); vseparator8 = gtk_vseparator_new (); gtk_widget_show (vseparator8); gtk_box_pack_start (GTK_BOX (hbox11), vseparator8, FALSE, FALSE, 4); rdpattern_hbox1 = gtk_hbox_new (FALSE, 0); gtk_widget_show (rdpattern_hbox1); gtk_box_pack_start (GTK_BOX (hbox11), rdpattern_hbox1, FALSE, FALSE, 0); rdpattern_gain_togglebutton = gtk_toggle_button_new_with_mnemonic (_("Gain Pattern")); gtk_widget_show (rdpattern_gain_togglebutton); gtk_box_pack_start (GTK_BOX (rdpattern_hbox1), rdpattern_gain_togglebutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_gain_togglebutton, _("Calculate and display radiation pattern"), NULL); rdpattern_eh_togglebutton = gtk_toggle_button_new_with_mnemonic (_("E/H Fields")); gtk_widget_show (rdpattern_eh_togglebutton); gtk_box_pack_start (GTK_BOX (rdpattern_hbox1), rdpattern_eh_togglebutton, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_eh_togglebutton, _("Calculate and display the near E/H fields"), NULL); vseparator9 = gtk_vseparator_new (); gtk_widget_show (vseparator9); gtk_box_pack_start (GTK_BOX (rdpattern_hbox1), vseparator9, FALSE, FALSE, 4); label216 = gtk_label_new (_("Frequency Loop ")); gtk_widget_show (label216); gtk_box_pack_start (GTK_BOX (rdpattern_hbox1), label216, FALSE, FALSE, 0); gtk_label_set_single_line_mode (GTK_LABEL (label216), TRUE); rdpatttern_loop_start = gtk_button_new (); gtk_widget_show (rdpatttern_loop_start); gtk_box_pack_start (GTK_BOX (rdpattern_hbox1), rdpatttern_loop_start, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rdpatttern_loop_start, _("Start Frequency Loop"), NULL); image59 = gtk_image_new_from_stock ("gtk-media-play", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image59); gtk_container_add (GTK_CONTAINER (rdpatttern_loop_start), image59); rdpattern_loop_pause = gtk_button_new (); gtk_widget_show (rdpattern_loop_pause); gtk_box_pack_start (GTK_BOX (rdpattern_hbox1), rdpattern_loop_pause, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_loop_pause, _("Pause Frequency Loop"), NULL); image60 = gtk_image_new_from_stock ("gtk-media-pause", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image60); gtk_container_add (GTK_CONTAINER (rdpattern_loop_pause), image60); rdpattern_loop_reset = gtk_button_new (); gtk_widget_show (rdpattern_loop_reset); gtk_box_pack_start (GTK_BOX (rdpattern_hbox1), rdpattern_loop_reset, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_loop_reset, _("Reset Frequency Loop"), NULL); image58 = gtk_image_new_from_stock ("gtk-media-rewind", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image58); gtk_container_add (GTK_CONTAINER (rdpattern_loop_reset), image58); label246 = gtk_label_new (_(" Step ")); gtk_widget_show (label246); gtk_box_pack_start (GTK_BOX (rdpattern_hbox1), label246, FALSE, FALSE, 0); gtk_label_set_single_line_mode (GTK_LABEL (label246), TRUE); rdpattern_fstep_entry = gtk_entry_new (); gtk_widget_show (rdpattern_fstep_entry); gtk_box_pack_start (GTK_BOX (rdpattern_hbox1), rdpattern_fstep_entry, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_fstep_entry, _("Current Frequency Step"), NULL); gtk_entry_set_max_length (GTK_ENTRY (rdpattern_fstep_entry), 3); gtk_editable_set_editable (GTK_EDITABLE (rdpattern_fstep_entry), FALSE); gtk_entry_set_text (GTK_ENTRY (rdpattern_fstep_entry), _("1")); gtk_entry_set_invisible_char (GTK_ENTRY (rdpattern_fstep_entry), 9679); gtk_entry_set_width_chars (GTK_ENTRY (rdpattern_fstep_entry), 3); hseparator3 = gtk_hseparator_new (); gtk_widget_show (hseparator3); gtk_box_pack_start (GTK_BOX (vbox3), hseparator3, FALSE, FALSE, 4); rdpattern_hbox2 = gtk_hbox_new (FALSE, 0); gtk_widget_show (rdpattern_hbox2); gtk_box_pack_start (GTK_BOX (vbox3), rdpattern_hbox2, FALSE, FALSE, 0); rdpattern_colorcode_minlabel = gtk_label_new (_("0.0")); gtk_widget_show (rdpattern_colorcode_minlabel); gtk_box_pack_start (GTK_BOX (rdpattern_hbox2), rdpattern_colorcode_minlabel, FALSE, FALSE, 1); gtk_label_set_width_chars (GTK_LABEL (rdpattern_colorcode_minlabel), 5); rdpattern_colorcode_drawingarea = gtk_drawing_area_new (); gtk_widget_show (rdpattern_colorcode_drawingarea); gtk_box_pack_start (GTK_BOX (rdpattern_hbox2), rdpattern_colorcode_drawingarea, FALSE, FALSE, 1); gtk_widget_set_size_request (rdpattern_colorcode_drawingarea, 160, -1); gtk_tooltips_set_tip (tooltips, rdpattern_colorcode_drawingarea, _("Color code for Gain or E/H field values"), NULL); rdpattern_colorcode_maxlabel = gtk_label_new (_("0.00")); gtk_widget_show (rdpattern_colorcode_maxlabel); gtk_box_pack_start (GTK_BOX (rdpattern_hbox2), rdpattern_colorcode_maxlabel, FALSE, FALSE, 1); gtk_misc_set_alignment (GTK_MISC (rdpattern_colorcode_maxlabel), 0, 0.5); gtk_label_set_width_chars (GTK_LABEL (rdpattern_colorcode_maxlabel), 9); rdpattern_viewer_gain = gtk_entry_new (); gtk_widget_show (rdpattern_viewer_gain); gtk_box_pack_start (GTK_BOX (rdpattern_hbox2), rdpattern_viewer_gain, FALSE, FALSE, 1); gtk_tooltips_set_tip (tooltips, rdpattern_viewer_gain, _("Gain in direction of viewer\n(perpenticular to screen)"), NULL); gtk_entry_set_text (GTK_ENTRY (rdpattern_viewer_gain), _(" - - - - -")); gtk_entry_set_width_chars (GTK_ENTRY (rdpattern_viewer_gain), 6); label11 = gtk_label_new (_("dB")); gtk_widget_show (label11); gtk_box_pack_start (GTK_BOX (rdpattern_hbox2), label11, FALSE, FALSE, 1); gtk_label_set_single_line_mode (GTK_LABEL (label11), TRUE); rdpattern_freq_spinbutton_adj = gtk_adjustment_new (0.00999999977648, 0.00999999977648, 9999, 0.00999999977648, 10, 0); rdpattern_freq_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (rdpattern_freq_spinbutton_adj), 0.0010000000475, 3); gtk_widget_show (rdpattern_freq_spinbutton); gtk_box_pack_start (GTK_BOX (rdpattern_hbox2), rdpattern_freq_spinbutton, FALSE, FALSE, 1); gtk_tooltips_set_tip (tooltips, rdpattern_freq_spinbutton, _("Enter frequency in MHz"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (rdpattern_freq_spinbutton), TRUE); rdpattern_freq_label = gtk_label_new (_("MHz")); gtk_widget_show (rdpattern_freq_label); gtk_box_pack_start (GTK_BOX (rdpattern_hbox2), rdpattern_freq_label, FALSE, FALSE, 1); gtk_misc_set_padding (GTK_MISC (rdpattern_freq_label), 4, 0); gtk_label_set_single_line_mode (GTK_LABEL (rdpattern_freq_label), TRUE); rdpattern_freq_checkbutton = gtk_check_button_new_with_mnemonic (_("Apply")); gtk_widget_show (rdpattern_freq_checkbutton); gtk_box_pack_start (GTK_BOX (rdpattern_hbox2), rdpattern_freq_checkbutton, FALSE, FALSE, 2); gtk_tooltips_set_tip (tooltips, rdpattern_freq_checkbutton, _("Enable data calculation on frequency change"), NULL); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rdpattern_freq_checkbutton), TRUE); rdpattern_new_freq_button = gtk_button_new (); gtk_widget_show (rdpattern_new_freq_button); gtk_box_pack_start (GTK_BOX (rdpattern_hbox2), rdpattern_new_freq_button, FALSE, FALSE, 2); gtk_tooltips_set_tip (tooltips, rdpattern_new_freq_button, _("Calculate data for new frequency"), NULL); image49 = gtk_image_new_from_stock ("gtk-apply", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image49); gtk_container_add (GTK_CONTAINER (rdpattern_new_freq_button), image49); hseparator12 = gtk_hseparator_new (); gtk_widget_show (hseparator12); gtk_box_pack_start (GTK_BOX (vbox3), hseparator12, FALSE, FALSE, 4); rdpattern_label = gtk_label_new (_("Radiation Patterns")); gtk_widget_show (rdpattern_label); gtk_box_pack_start (GTK_BOX (vbox3), rdpattern_label, FALSE, FALSE, 0); gtk_label_set_width_chars (GTK_LABEL (rdpattern_label), 14); gtk_label_set_single_line_mode (GTK_LABEL (rdpattern_label), TRUE); frame3 = gtk_frame_new (NULL); gtk_widget_show (frame3); gtk_box_pack_start (GTK_BOX (vbox3), frame3, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame3), 4); alignment3 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment3); gtk_container_add (GTK_CONTAINER (frame3), alignment3); gtk_container_set_border_width (GTK_CONTAINER (alignment3), 2); rdpattern_drawingarea = gtk_drawing_area_new (); gtk_widget_show (rdpattern_drawingarea); gtk_container_add (GTK_CONTAINER (alignment3), rdpattern_drawingarea); gtk_widget_set_size_request (rdpattern_drawingarea, 769, 769); GTK_WIDGET_SET_FLAGS (rdpattern_drawingarea, GTK_CAN_FOCUS); rdpattern_hbox3 = gtk_hbox_new (FALSE, 0); gtk_widget_show (rdpattern_hbox3); gtk_frame_set_label_widget (GTK_FRAME (frame3), rdpattern_hbox3); label248 = gtk_label_new (_("View Radiation")); gtk_widget_show (label248); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), label248, FALSE, FALSE, 0); gtk_label_set_width_chars (GTK_LABEL (label248), 14); rdpattern_x_axis = gtk_button_new_with_mnemonic (_("X")); gtk_widget_show (rdpattern_x_axis); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), rdpattern_x_axis, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_x_axis, _("View radiation pattern along X-axis"), NULL); gtk_widget_add_accelerator (rdpattern_x_axis, "clicked", accel_group, GDK_X, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); rdpattern_y_axis = gtk_button_new_with_mnemonic (_("Y")); gtk_widget_show (rdpattern_y_axis); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), rdpattern_y_axis, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_y_axis, _("View radiation pattern along Y-axis"), NULL); gtk_widget_add_accelerator (rdpattern_y_axis, "clicked", accel_group, GDK_Y, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); rdpattern_z_axis = gtk_button_new_with_mnemonic (_("Z")); gtk_widget_show (rdpattern_z_axis); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), rdpattern_z_axis, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_z_axis, _("View radiation pattern along Z-axis"), NULL); gtk_widget_add_accelerator (rdpattern_z_axis, "clicked", accel_group, GDK_Z, (GdkModifierType) 0, GTK_ACCEL_VISIBLE); rdpattern_default_view = gtk_button_new (); gtk_widget_show (rdpattern_default_view); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), rdpattern_default_view, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_default_view, _("View radiation pattern in default projection"), NULL); image34 = gtk_image_new_from_stock ("gtk-redo", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image34); gtk_container_add (GTK_CONTAINER (rdpattern_default_view), image34); image55 = gtk_image_new_from_stock ("gtk-refresh", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image55); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), image55, TRUE, TRUE, 0); rdpattern_rotate_spinbutton_adj = gtk_adjustment_new (45, -360, 360, 1, 10, 0); rdpattern_rotate_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (rdpattern_rotate_spinbutton_adj), 1, 0); gtk_widget_show (rdpattern_rotate_spinbutton); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), rdpattern_rotate_spinbutton, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_rotate_spinbutton, _("Rotate radiation pattern around Z-axis"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (rdpattern_rotate_spinbutton), TRUE); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (rdpattern_rotate_spinbutton), TRUE); image56 = gtk_image_new_from_stock ("gtk-go-down", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image56); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), image56, TRUE, TRUE, 0); rdpattern_incline_spinbutton_adj = gtk_adjustment_new (45, -180, 180, 1, 10, 0); rdpattern_incline_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (rdpattern_incline_spinbutton_adj), 1, 0); gtk_widget_show (rdpattern_incline_spinbutton); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), rdpattern_incline_spinbutton, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_incline_spinbutton, _("Incline radiation pattern to plane of screen"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (rdpattern_incline_spinbutton), TRUE); gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (rdpattern_incline_spinbutton), TRUE); label247 = gtk_label_new (_(" Zoom % ")); gtk_widget_show (label247); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), label247, FALSE, FALSE, 0); gtk_label_set_single_line_mode (GTK_LABEL (label247), TRUE); rdpattern_zoom_spinbutton_adj = gtk_adjustment_new (100, 10, 999, 1, 10, 0); rdpattern_zoom_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (rdpattern_zoom_spinbutton_adj), 1, 0); gtk_widget_show (rdpattern_zoom_spinbutton); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), rdpattern_zoom_spinbutton, TRUE, TRUE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_zoom_spinbutton, _("Zoom Structure Display"), NULL); rdpattern_plus_button = gtk_button_new (); gtk_widget_show (rdpattern_plus_button); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), rdpattern_plus_button, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_plus_button, _("Zoom In"), NULL); image98 = gtk_image_new_from_stock ("gtk-zoom-in", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image98); gtk_container_add (GTK_CONTAINER (rdpattern_plus_button), image98); rdpattern_minus_button = gtk_button_new (); gtk_widget_show (rdpattern_minus_button); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), rdpattern_minus_button, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_minus_button, _("Zoom Out"), NULL); image99 = gtk_image_new_from_stock ("gtk-zoom-out", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image99); gtk_container_add (GTK_CONTAINER (rdpattern_minus_button), image99); rdpattern_one_button = gtk_button_new (); gtk_widget_show (rdpattern_one_button); gtk_box_pack_start (GTK_BOX (rdpattern_hbox3), rdpattern_one_button, FALSE, FALSE, 0); gtk_tooltips_set_tip (tooltips, rdpattern_one_button, _("Zoom to Default 1:1"), NULL); image100 = gtk_image_new_from_stock ("gtk-zoom-100", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image100); gtk_container_add (GTK_CONTAINER (rdpattern_one_button), image100); g_signal_connect ((gpointer) rdpattern_window, "delete_event", G_CALLBACK (on_rdpattern_window_delete_event), NULL); g_signal_connect ((gpointer) rdpattern_window, "destroy", G_CALLBACK (on_rdpattern_window_destroy), NULL); g_signal_connect ((gpointer) rdpattern_new, "activate", G_CALLBACK (on_new_activate), NULL); g_signal_connect ((gpointer) rdpattern_open, "activate", G_CALLBACK (on_open_input_activate), NULL); g_signal_connect ((gpointer) rdpattern_save, "activate", G_CALLBACK (on_rdpattern_save_activate), NULL); g_signal_connect ((gpointer) rdpattern_save_as, "activate", G_CALLBACK (on_rdpattern_save_as_activate), NULL); g_signal_connect ((gpointer) rdpattern_save_as_gnuplot, "activate", G_CALLBACK (on_rdpattern_save_as_gnuplot_activate), NULL); g_signal_connect ((gpointer) rdpattern_quit, "activate", G_CALLBACK (on_quit_activate), NULL); g_signal_connect ((gpointer) rdpattern_view_menuitem, "activate", G_CALLBACK (rdpattern_view_menuitem_activate), NULL); g_signal_connect ((gpointer) rdpattern_pol_menu, "activate", G_CALLBACK (rdpattern_pol_menu_activate), NULL); g_signal_connect ((gpointer) rdpattern_total, "activate", G_CALLBACK (on_rdpattern_total_activate), NULL); g_signal_connect ((gpointer) rdpattern_horizontal, "activate", G_CALLBACK (on_rdpattern_horizontal_activate), NULL); g_signal_connect ((gpointer) rdpattern_vertical, "activate", G_CALLBACK (on_rdpattern_vertical_activate), NULL); g_signal_connect ((gpointer) rdpattern_right_hand, "activate", G_CALLBACK (on_rdpattern_right_hand_activate), NULL); g_signal_connect ((gpointer) rdpattern_left_hand, "activate", G_CALLBACK (on_rdpattern_left_hand_activate), NULL); g_signal_connect ((gpointer) rdpattern_linear_power, "activate", G_CALLBACK (on_rdpattern_linear_power_activate), NULL); g_signal_connect ((gpointer) rdpattern_linear_voltage, "activate", G_CALLBACK (on_rdpattern_linear_voltage_activate), NULL); g_signal_connect ((gpointer) rdpattern_arrl_style, "activate", G_CALLBACK (on_rdpattern_arrl_style_activate), NULL); g_signal_connect ((gpointer) rdpattern_logarithmic, "activate", G_CALLBACK (on_rdpattern_logarithmic_activate), NULL); g_signal_connect ((gpointer) rdpattern_e_field, "activate", G_CALLBACK (on_rdpattern_e_field_activate), NULL); g_signal_connect ((gpointer) rdpattern_h_field, "activate", G_CALLBACK (on_rdpattern_h_field_activate), NULL); g_signal_connect ((gpointer) rdpattern_poynting_vector, "activate", G_CALLBACK (on_rdpattern_poynting_vector_activate), NULL); g_signal_connect ((gpointer) rdpattern_animate, "activate", G_CALLBACK (on_rdpattern_animate_activate), NULL); g_signal_connect ((gpointer) near_peak_value, "activate", G_CALLBACK (on_near_peak_value_activate), NULL); g_signal_connect ((gpointer) near_snapshot, "activate", G_CALLBACK (on_near_snapshot_activate), NULL); g_signal_connect ((gpointer) common_projection, "activate", G_CALLBACK (on_common_projection_activate), NULL); g_signal_connect ((gpointer) common_freq, "activate", G_CALLBACK (on_common_freq_activate), NULL); g_signal_connect ((gpointer) rdpattern_overlay_structure, "activate", G_CALLBACK (on_rdpattern_overlay_structure_activate), NULL); g_signal_connect ((gpointer) rdpattern_gain_togglebutton, "toggled", G_CALLBACK (on_rdpattern_gain_togglebutton_toggled), NULL); g_signal_connect ((gpointer) rdpattern_eh_togglebutton, "toggled", G_CALLBACK (on_rdpattern_eh_togglebutton_toggled), NULL); g_signal_connect ((gpointer) rdpatttern_loop_start, "clicked", G_CALLBACK (on_loop_start_clicked), NULL); g_signal_connect ((gpointer) rdpattern_loop_pause, "clicked", G_CALLBACK (on_loop_pause_clicked), NULL); g_signal_connect ((gpointer) rdpattern_loop_reset, "clicked", G_CALLBACK (on_loop_reset_clicked), NULL); g_signal_connect ((gpointer) rdpattern_colorcode_drawingarea, "expose_event", G_CALLBACK (on_rdpattern_colorcode_drawingarea_expose_event), NULL); g_signal_connect ((gpointer) rdpattern_freq_spinbutton, "value_changed", G_CALLBACK (on_rdpattern_freq_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) rdpattern_new_freq_button, "clicked", G_CALLBACK (on_rdpattern_new_freq_clicked), NULL); g_signal_connect ((gpointer) rdpattern_drawingarea, "configure_event", G_CALLBACK (on_rdpattern_drawingarea_configure_event), NULL); g_signal_connect ((gpointer) rdpattern_drawingarea, "expose_event", G_CALLBACK (on_rdpattern_drawingarea_expose_event), NULL); g_signal_connect ((gpointer) rdpattern_drawingarea, "button_press_event", G_CALLBACK (on_rdpattern_drawingarea_button_press_event), NULL); g_signal_connect ((gpointer) rdpattern_drawingarea, "scroll_event", G_CALLBACK (on_rdpattern_drawingarea_scroll_event), NULL); g_signal_connect ((gpointer) rdpattern_x_axis, "clicked", G_CALLBACK (on_rdpattern_x_axis_clicked), NULL); g_signal_connect ((gpointer) rdpattern_y_axis, "clicked", G_CALLBACK (on_rdpattern_y_axis_clicked), NULL); g_signal_connect ((gpointer) rdpattern_z_axis, "clicked", G_CALLBACK (on_rdpattern_z_axis_clicked), NULL); g_signal_connect ((gpointer) rdpattern_default_view, "clicked", G_CALLBACK (on_rdpattern_default_view_clicked), NULL); g_signal_connect ((gpointer) rdpattern_rotate_spinbutton, "value_changed", G_CALLBACK (on_rdpattern_rotate_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) rdpattern_incline_spinbutton, "value_changed", G_CALLBACK (on_rdpattern_incline_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) rdpattern_zoom_spinbutton, "value_changed", G_CALLBACK (on_rdpattern_zoom_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) rdpattern_plus_button, "clicked", G_CALLBACK (on_rdpattern_plus_button_clicked), NULL); g_signal_connect ((gpointer) rdpattern_minus_button, "clicked", G_CALLBACK (on_rdpattern_minus_button_clicked), NULL); g_signal_connect ((gpointer) rdpattern_one_button, "clicked", G_CALLBACK (on_rdpattern_one_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (rdpattern_window, rdpattern_window, "rdpattern_window"); GLADE_HOOKUP_OBJECT (rdpattern_window, vbox3, "vbox3"); GLADE_HOOKUP_OBJECT (rdpattern_window, hbox11, "hbox11"); GLADE_HOOKUP_OBJECT (rdpattern_window, menubar3, "menubar3"); GLADE_HOOKUP_OBJECT (rdpattern_window, menuitem9, "menuitem9"); GLADE_HOOKUP_OBJECT (rdpattern_window, menuitem9_menu, "menuitem9_menu"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_new, "rdpattern_new"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_open, "rdpattern_open"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_save, "rdpattern_save"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_save_as, "rdpattern_save_as"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_save_as_gnuplot, "rdpattern_save_as_gnuplot"); GLADE_HOOKUP_OBJECT (rdpattern_window, image101, "image101"); GLADE_HOOKUP_OBJECT (rdpattern_window, separatormenuitem3, "separatormenuitem3"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_quit, "rdpattern_quit"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_view_menuitem, "rdpattern_view_menuitem"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_view_menuitem_menu, "rdpattern_view_menuitem_menu"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_pol_menu, "rdpattern_pol_menu"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_pol_menu_menu, "rdpattern_pol_menu_menu"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_total, "rdpattern_total"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_horizontal, "rdpattern_horizontal"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_vertical, "rdpattern_vertical"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_right_hand, "rdpattern_right_hand"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_left_hand, "rdpattern_left_hand"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_gain_scaling, "rdpattern_gain_scaling"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_gain_scaling_menu, "rdpattern_gain_scaling_menu"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_linear_power, "rdpattern_linear_power"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_linear_voltage, "rdpattern_linear_voltage"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_arrl_style, "rdpattern_arrl_style"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_logarithmic, "rdpattern_logarithmic"); GLADE_HOOKUP_OBJECT (rdpattern_window, near_field, "near_field"); GLADE_HOOKUP_OBJECT (rdpattern_window, near_field_menu, "near_field_menu"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_e_field, "rdpattern_e_field"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_h_field, "rdpattern_h_field"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_poynting_vector, "rdpattern_poynting_vector"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_animate, "rdpattern_animate"); GLADE_HOOKUP_OBJECT (rdpattern_window, total_field, "total_field"); GLADE_HOOKUP_OBJECT (rdpattern_window, total_field_menu, "total_field_menu"); GLADE_HOOKUP_OBJECT (rdpattern_window, near_peak_value, "near_peak_value"); GLADE_HOOKUP_OBJECT (rdpattern_window, near_snapshot, "near_snapshot"); GLADE_HOOKUP_OBJECT (rdpattern_window, common_projection, "common_projection"); GLADE_HOOKUP_OBJECT (rdpattern_window, common_freq, "common_freq"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_overlay_structure, "rdpattern_overlay_structure"); GLADE_HOOKUP_OBJECT (rdpattern_window, vseparator8, "vseparator8"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_hbox1, "rdpattern_hbox1"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_gain_togglebutton, "rdpattern_gain_togglebutton"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_eh_togglebutton, "rdpattern_eh_togglebutton"); GLADE_HOOKUP_OBJECT (rdpattern_window, vseparator9, "vseparator9"); GLADE_HOOKUP_OBJECT (rdpattern_window, label216, "label216"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpatttern_loop_start, "rdpatttern_loop_start"); GLADE_HOOKUP_OBJECT (rdpattern_window, image59, "image59"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_loop_pause, "rdpattern_loop_pause"); GLADE_HOOKUP_OBJECT (rdpattern_window, image60, "image60"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_loop_reset, "rdpattern_loop_reset"); GLADE_HOOKUP_OBJECT (rdpattern_window, image58, "image58"); GLADE_HOOKUP_OBJECT (rdpattern_window, label246, "label246"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_fstep_entry, "rdpattern_fstep_entry"); GLADE_HOOKUP_OBJECT (rdpattern_window, hseparator3, "hseparator3"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_hbox2, "rdpattern_hbox2"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_colorcode_minlabel, "rdpattern_colorcode_minlabel"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_colorcode_drawingarea, "rdpattern_colorcode_drawingarea"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_colorcode_maxlabel, "rdpattern_colorcode_maxlabel"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_viewer_gain, "rdpattern_viewer_gain"); GLADE_HOOKUP_OBJECT (rdpattern_window, label11, "label11"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_freq_spinbutton, "rdpattern_freq_spinbutton"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_freq_label, "rdpattern_freq_label"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_freq_checkbutton, "rdpattern_freq_checkbutton"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_new_freq_button, "rdpattern_new_freq_button"); GLADE_HOOKUP_OBJECT (rdpattern_window, image49, "image49"); GLADE_HOOKUP_OBJECT (rdpattern_window, hseparator12, "hseparator12"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_label, "rdpattern_label"); GLADE_HOOKUP_OBJECT (rdpattern_window, frame3, "frame3"); GLADE_HOOKUP_OBJECT (rdpattern_window, alignment3, "alignment3"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_drawingarea, "rdpattern_drawingarea"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_hbox3, "rdpattern_hbox3"); GLADE_HOOKUP_OBJECT (rdpattern_window, label248, "label248"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_x_axis, "rdpattern_x_axis"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_y_axis, "rdpattern_y_axis"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_z_axis, "rdpattern_z_axis"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_default_view, "rdpattern_default_view"); GLADE_HOOKUP_OBJECT (rdpattern_window, image34, "image34"); GLADE_HOOKUP_OBJECT (rdpattern_window, image55, "image55"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_rotate_spinbutton, "rdpattern_rotate_spinbutton"); GLADE_HOOKUP_OBJECT (rdpattern_window, image56, "image56"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_incline_spinbutton, "rdpattern_incline_spinbutton"); GLADE_HOOKUP_OBJECT (rdpattern_window, label247, "label247"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_zoom_spinbutton, "rdpattern_zoom_spinbutton"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_plus_button, "rdpattern_plus_button"); GLADE_HOOKUP_OBJECT (rdpattern_window, image98, "image98"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_minus_button, "rdpattern_minus_button"); GLADE_HOOKUP_OBJECT (rdpattern_window, image99, "image99"); GLADE_HOOKUP_OBJECT (rdpattern_window, rdpattern_one_button, "rdpattern_one_button"); GLADE_HOOKUP_OBJECT (rdpattern_window, image100, "image100"); GLADE_HOOKUP_OBJECT_NO_REF (rdpattern_window, tooltips, "tooltips"); gtk_window_add_accel_group (GTK_WINDOW (rdpattern_window), accel_group); return rdpattern_window; } GtkWidget* create_quit_dialog (void) { GtkWidget *quit_dialog; GtkWidget *dialog_vbox2; GtkWidget *hbox12; GtkWidget *image36; GtkWidget *quit_label; GtkWidget *dialog_action_area2; GtkWidget *quit_cancelbutton; GtkWidget *quit_okbutton; quit_dialog = gtk_dialog_new (); gtk_container_set_border_width (GTK_CONTAINER (quit_dialog), 2); gtk_window_set_title (GTK_WINDOW (quit_dialog), _("Confirmation")); gtk_window_set_position (GTK_WINDOW (quit_dialog), GTK_WIN_POS_MOUSE); gtk_window_set_modal (GTK_WINDOW (quit_dialog), TRUE); gtk_window_set_type_hint (GTK_WINDOW (quit_dialog), GDK_WINDOW_TYPE_HINT_DIALOG); dialog_vbox2 = GTK_DIALOG (quit_dialog)->vbox; gtk_widget_show (dialog_vbox2); hbox12 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox12); gtk_box_pack_start (GTK_BOX (dialog_vbox2), hbox12, TRUE, TRUE, 0); image36 = gtk_image_new_from_stock ("gtk-dialog-question", GTK_ICON_SIZE_DIALOG); gtk_widget_show (image36); gtk_box_pack_start (GTK_BOX (hbox12), image36, TRUE, TRUE, 0); gtk_misc_set_padding (GTK_MISC (image36), 4, 4); quit_label = gtk_label_new (_("Quit xnec2c?")); gtk_widget_show (quit_label); gtk_box_pack_start (GTK_BOX (hbox12), quit_label, FALSE, FALSE, 0); gtk_misc_set_padding (GTK_MISC (quit_label), 4, 0); dialog_action_area2 = GTK_DIALOG (quit_dialog)->action_area; gtk_widget_show (dialog_action_area2); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END); quit_cancelbutton = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_show (quit_cancelbutton); gtk_dialog_add_action_widget (GTK_DIALOG (quit_dialog), quit_cancelbutton, GTK_RESPONSE_CANCEL); gtk_container_set_border_width (GTK_CONTAINER (quit_cancelbutton), 2); GTK_WIDGET_SET_FLAGS (quit_cancelbutton, GTK_CAN_DEFAULT); quit_okbutton = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (quit_okbutton); gtk_dialog_add_action_widget (GTK_DIALOG (quit_dialog), quit_okbutton, GTK_RESPONSE_OK); gtk_container_set_border_width (GTK_CONTAINER (quit_okbutton), 2); GTK_WIDGET_SET_FLAGS (quit_okbutton, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) quit_dialog, "destroy", G_CALLBACK (on_quit_dialog_destroy), NULL); g_signal_connect ((gpointer) quit_cancelbutton, "clicked", G_CALLBACK (on_quit_cancelbutton_clicked), NULL); g_signal_connect ((gpointer) quit_okbutton, "clicked", G_CALLBACK (on_quit_okbutton_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (quit_dialog, quit_dialog, "quit_dialog"); GLADE_HOOKUP_OBJECT_NO_REF (quit_dialog, dialog_vbox2, "dialog_vbox2"); GLADE_HOOKUP_OBJECT (quit_dialog, hbox12, "hbox12"); GLADE_HOOKUP_OBJECT (quit_dialog, image36, "image36"); GLADE_HOOKUP_OBJECT (quit_dialog, quit_label, "quit_label"); GLADE_HOOKUP_OBJECT_NO_REF (quit_dialog, dialog_action_area2, "dialog_action_area2"); GLADE_HOOKUP_OBJECT (quit_dialog, quit_cancelbutton, "quit_cancelbutton"); GLADE_HOOKUP_OBJECT (quit_dialog, quit_okbutton, "quit_okbutton"); return quit_dialog; } GtkWidget* create_error_dialog (void) { GtkWidget *error_dialog; GtkWidget *dialog_vbox4; GtkWidget *hbox14; GtkWidget *image38; GtkWidget *error_label; GtkWidget *dialog_action_area4; GtkWidget *error_quitbutton; GtkWidget *error_okbutton; GtkWidget *error_stopbutton; error_dialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (error_dialog), _("Error")); gtk_window_set_position (GTK_WINDOW (error_dialog), GTK_WIN_POS_CENTER); gtk_window_set_modal (GTK_WINDOW (error_dialog), TRUE); gtk_window_set_type_hint (GTK_WINDOW (error_dialog), GDK_WINDOW_TYPE_HINT_DIALOG); dialog_vbox4 = GTK_DIALOG (error_dialog)->vbox; gtk_widget_show (dialog_vbox4); hbox14 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox14); gtk_box_pack_start (GTK_BOX (dialog_vbox4), hbox14, TRUE, TRUE, 0); image38 = gtk_image_new_from_stock ("gtk-dialog-error", GTK_ICON_SIZE_DIALOG); gtk_widget_show (image38); gtk_box_pack_start (GTK_BOX (hbox14), image38, TRUE, TRUE, 0); gtk_misc_set_padding (GTK_MISC (image38), 4, 4); error_label = gtk_label_new (_("Error")); gtk_widget_show (error_label); gtk_box_pack_start (GTK_BOX (hbox14), error_label, FALSE, FALSE, 0); gtk_misc_set_padding (GTK_MISC (error_label), 4, 0); dialog_action_area4 = GTK_DIALOG (error_dialog)->action_area; gtk_widget_show (dialog_action_area4); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area4), GTK_BUTTONBOX_END); error_quitbutton = gtk_button_new_from_stock ("gtk-quit"); gtk_widget_show (error_quitbutton); gtk_dialog_add_action_widget (GTK_DIALOG (error_dialog), error_quitbutton, GTK_RESPONSE_OK); gtk_container_set_border_width (GTK_CONTAINER (error_quitbutton), 2); GTK_WIDGET_SET_FLAGS (error_quitbutton, GTK_CAN_DEFAULT); error_okbutton = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (error_okbutton); gtk_dialog_add_action_widget (GTK_DIALOG (error_dialog), error_okbutton, GTK_RESPONSE_OK); gtk_container_set_border_width (GTK_CONTAINER (error_okbutton), 2); GTK_WIDGET_SET_FLAGS (error_okbutton, GTK_CAN_DEFAULT); error_stopbutton = gtk_button_new_from_stock ("gtk-stop"); gtk_widget_show (error_stopbutton); gtk_dialog_add_action_widget (GTK_DIALOG (error_dialog), error_stopbutton, 0); gtk_container_set_border_width (GTK_CONTAINER (error_stopbutton), 2); GTK_WIDGET_SET_FLAGS (error_stopbutton, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) error_dialog, "delete_event", G_CALLBACK (on_error_dialog_delete_event), NULL); g_signal_connect ((gpointer) error_quitbutton, "clicked", G_CALLBACK (on_error_quitbutton_clicked), NULL); g_signal_connect ((gpointer) error_okbutton, "clicked", G_CALLBACK (on_error_okbutton_clicked), NULL); g_signal_connect ((gpointer) error_stopbutton, "clicked", G_CALLBACK (on_error_stopbutton_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (error_dialog, error_dialog, "error_dialog"); GLADE_HOOKUP_OBJECT_NO_REF (error_dialog, dialog_vbox4, "dialog_vbox4"); GLADE_HOOKUP_OBJECT (error_dialog, hbox14, "hbox14"); GLADE_HOOKUP_OBJECT (error_dialog, image38, "image38"); GLADE_HOOKUP_OBJECT (error_dialog, error_label, "error_label"); GLADE_HOOKUP_OBJECT_NO_REF (error_dialog, dialog_action_area4, "dialog_action_area4"); GLADE_HOOKUP_OBJECT (error_dialog, error_quitbutton, "error_quitbutton"); GLADE_HOOKUP_OBJECT (error_dialog, error_okbutton, "error_okbutton"); GLADE_HOOKUP_OBJECT (error_dialog, error_stopbutton, "error_stopbutton"); return error_dialog; } GtkWidget* create_animate_dialog (void) { GtkWidget *animate_dialog; GtkWidget *dialog_vbox5; GtkWidget *table1; GtkWidget *label17; GtkWidget *label18; GtkObject *animate_steps_spinbutton_adj; GtkWidget *animate_steps_spinbutton; GtkObject *animate_freq_spinbutton_adj; GtkWidget *animate_freq_spinbutton; GtkWidget *dialog_action_area5; GtkWidget *animation_applybutton; GtkWidget *animation_cancelbutton; GtkWidget *animation_okbutton; GtkTooltips *tooltips; tooltips = gtk_tooltips_new (); animate_dialog = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (animate_dialog), _("Near Field Animation")); gtk_window_set_position (GTK_WINDOW (animate_dialog), GTK_WIN_POS_MOUSE); gtk_window_set_type_hint (GTK_WINDOW (animate_dialog), GDK_WINDOW_TYPE_HINT_DIALOG); dialog_vbox5 = GTK_DIALOG (animate_dialog)->vbox; gtk_widget_show (dialog_vbox5); table1 = gtk_table_new (2, 2, FALSE); gtk_widget_show (table1); gtk_box_pack_start (GTK_BOX (dialog_vbox5), table1, TRUE, TRUE, 0); label17 = gtk_label_new (_("Steps/Cycle")); gtk_widget_show (label17); gtk_table_attach (GTK_TABLE (table1), label17, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 2, 0); gtk_misc_set_alignment (GTK_MISC (label17), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label17), 2, 2); label18 = gtk_label_new (_("Animate Frequency (Hz)")); gtk_widget_show (label18); gtk_table_attach (GTK_TABLE (table1), label18, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 2, 0); gtk_misc_set_alignment (GTK_MISC (label18), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label18), 2, 2); animate_steps_spinbutton_adj = gtk_adjustment_new (36, 12, 360, 1, 10, 0); animate_steps_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (animate_steps_spinbutton_adj), 1, 0); gtk_widget_show (animate_steps_spinbutton); gtk_table_attach (GTK_TABLE (table1), animate_steps_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 4); gtk_tooltips_set_tip (tooltips, animate_steps_spinbutton, _("Steps per Cycle of Excitation"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (animate_steps_spinbutton), TRUE); animate_freq_spinbutton_adj = gtk_adjustment_new (1, 0.10000000149, 10, 0.10000000149, 10, 0); animate_freq_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (animate_freq_spinbutton_adj), 1, 1); gtk_widget_show (animate_freq_spinbutton); gtk_table_attach (GTK_TABLE (table1), animate_freq_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 4); gtk_tooltips_set_tip (tooltips, animate_freq_spinbutton, _("Frequency of Excitaion Animation"), NULL); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (animate_freq_spinbutton), TRUE); dialog_action_area5 = GTK_DIALOG (animate_dialog)->action_area; gtk_widget_show (dialog_action_area5); gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area5), GTK_BUTTONBOX_END); animation_applybutton = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (animation_applybutton); gtk_dialog_add_action_widget (GTK_DIALOG (animate_dialog), animation_applybutton, GTK_RESPONSE_APPLY); gtk_container_set_border_width (GTK_CONTAINER (animation_applybutton), 2); GTK_WIDGET_SET_FLAGS (animation_applybutton, GTK_CAN_DEFAULT); animation_cancelbutton = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_show (animation_cancelbutton); gtk_dialog_add_action_widget (GTK_DIALOG (animate_dialog), animation_cancelbutton, GTK_RESPONSE_CANCEL); gtk_container_set_border_width (GTK_CONTAINER (animation_cancelbutton), 2); GTK_WIDGET_SET_FLAGS (animation_cancelbutton, GTK_CAN_DEFAULT); animation_okbutton = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (animation_okbutton); gtk_dialog_add_action_widget (GTK_DIALOG (animate_dialog), animation_okbutton, GTK_RESPONSE_OK); gtk_container_set_border_width (GTK_CONTAINER (animation_okbutton), 2); GTK_WIDGET_SET_FLAGS (animation_okbutton, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) animate_dialog, "destroy", G_CALLBACK (on_animate_dialog_destroy), NULL); g_signal_connect ((gpointer) animation_applybutton, "clicked", G_CALLBACK (on_animation_applybutton_clicked), NULL); g_signal_connect ((gpointer) animation_cancelbutton, "clicked", G_CALLBACK (on_animation_cancelbutton_clicked), NULL); g_signal_connect ((gpointer) animation_okbutton, "clicked", G_CALLBACK (on_animation_okbutton_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (animate_dialog, animate_dialog, "animate_dialog"); GLADE_HOOKUP_OBJECT_NO_REF (animate_dialog, dialog_vbox5, "dialog_vbox5"); GLADE_HOOKUP_OBJECT (animate_dialog, table1, "table1"); GLADE_HOOKUP_OBJECT (animate_dialog, label17, "label17"); GLADE_HOOKUP_OBJECT (animate_dialog, label18, "label18"); GLADE_HOOKUP_OBJECT (animate_dialog, animate_steps_spinbutton, "animate_steps_spinbutton"); GLADE_HOOKUP_OBJECT (animate_dialog, animate_freq_spinbutton, "animate_freq_spinbutton"); GLADE_HOOKUP_OBJECT_NO_REF (animate_dialog, dialog_action_area5, "dialog_action_area5"); GLADE_HOOKUP_OBJECT (animate_dialog, animation_applybutton, "animation_applybutton"); GLADE_HOOKUP_OBJECT (animate_dialog, animation_cancelbutton, "animation_cancelbutton"); GLADE_HOOKUP_OBJECT (animate_dialog, animation_okbutton, "animation_okbutton"); GLADE_HOOKUP_OBJECT_NO_REF (animate_dialog, tooltips, "tooltips"); gtk_widget_grab_focus (animation_okbutton); return animate_dialog; } GtkWidget* create_nec2_editor (void) { GtkWidget *nec2_editor; GtkWidget *vbox4; GtkWidget *hbox16; GtkWidget *frame8; GtkWidget *alignment8; GtkWidget *hbox17; GtkWidget *nec2_row_add; GtkWidget *nec2_row_remv; GtkWidget *nec2_treeview_clear; GtkWidget *label23; GtkWidget *frame7; GtkWidget *alignment7; GtkWidget *hbox18; GtkWidget *nec2_save_as; GtkWidget *nec2_save; GtkWidget *nec2_apply_checkbutton; GtkWidget *nec2_revert; GtkWidget *label22; GtkWidget *frame6; GtkWidget *alignment6; GtkWidget *scrolledwindow5; GtkWidget *nec2_cmnt_treeview; GtkWidget *label21; GtkWidget *frame9; GtkWidget *alignment9; GtkWidget *table34; GtkWidget *gw; GtkWidget *ga; GtkWidget *gh; GtkWidget *sp; GtkWidget *gr; GtkWidget *gm; GtkWidget *gx; GtkWidget *gs; GtkWidget *label24; GtkWidget *frame5; GtkWidget *alignment5; GtkWidget *scrolledwindow4; GtkWidget *nec2_geom_treeview; GtkWidget *label20; GtkWidget *frame10; GtkWidget *alignment10; GtkWidget *table4; GtkWidget *ex; GtkWidget *fr; GtkWidget *gn; GtkWidget *rp; GtkWidget *ld; GtkWidget *nt; GtkWidget *tl; GtkWidget *ne; GtkWidget *xq; GtkWidget *kh; GtkWidget *ek; GtkWidget *gd; GtkWidget *label25; GtkWidget *frame4; GtkWidget *alignment4; GtkWidget *scrolledwindow3; GtkWidget *nec2_cmnd_treeview; GtkWidget *label19; nec2_editor = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (nec2_editor), 4); gtk_window_set_title (GTK_WINDOW (nec2_editor), _("Xnec2c: NEC2 Input File Editor")); gtk_window_set_gravity (GTK_WINDOW (nec2_editor), GDK_GRAVITY_WEST); vbox4 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox4); gtk_container_add (GTK_CONTAINER (nec2_editor), vbox4); hbox16 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox16); gtk_box_pack_start (GTK_BOX (vbox4), hbox16, FALSE, TRUE, 0); frame8 = gtk_frame_new (NULL); gtk_widget_show (frame8); gtk_box_pack_start (GTK_BOX (hbox16), frame8, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame8), 2); alignment8 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment8); gtk_container_add (GTK_CONTAINER (frame8), alignment8); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment8), 0, 0, 12, 0); hbox17 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox17); gtk_container_add (GTK_CONTAINER (alignment8), hbox17); nec2_row_add = gtk_button_new_from_stock ("gtk-add"); gtk_widget_show (nec2_row_add); gtk_box_pack_start (GTK_BOX (hbox17), nec2_row_add, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (nec2_row_add), 2); nec2_row_remv = gtk_button_new_from_stock ("gtk-remove"); gtk_widget_show (nec2_row_remv); gtk_box_pack_start (GTK_BOX (hbox17), nec2_row_remv, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (nec2_row_remv), 2); nec2_treeview_clear = gtk_button_new_from_stock ("gtk-clear"); gtk_widget_show (nec2_treeview_clear); gtk_box_pack_start (GTK_BOX (hbox17), nec2_treeview_clear, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (nec2_treeview_clear), 2); label23 = gtk_label_new (_("Edit Tree View Rows")); gtk_widget_show (label23); gtk_frame_set_label_widget (GTK_FRAME (frame8), label23); gtk_misc_set_padding (GTK_MISC (label23), 2, 0); frame7 = gtk_frame_new (NULL); gtk_widget_show (frame7); gtk_box_pack_start (GTK_BOX (hbox16), frame7, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame7), 2); alignment7 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment7); gtk_container_add (GTK_CONTAINER (frame7), alignment7); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment7), 0, 0, 12, 0); hbox18 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox18); gtk_container_add (GTK_CONTAINER (alignment7), hbox18); nec2_save_as = gtk_button_new_from_stock ("gtk-save-as"); gtk_widget_show (nec2_save_as); gtk_box_pack_start (GTK_BOX (hbox18), nec2_save_as, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (nec2_save_as), 2); nec2_save = gtk_button_new_from_stock ("gtk-save"); gtk_widget_show (nec2_save); gtk_box_pack_start (GTK_BOX (hbox18), nec2_save, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (nec2_save), 2); nec2_apply_checkbutton = gtk_check_button_new_with_mnemonic ("gtk-apply"); gtk_button_set_use_stock (GTK_BUTTON (nec2_apply_checkbutton), TRUE); gtk_widget_show (nec2_apply_checkbutton); gtk_box_pack_start (GTK_BOX (hbox18), nec2_apply_checkbutton, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (nec2_apply_checkbutton), 2); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (nec2_apply_checkbutton), TRUE); nec2_revert = gtk_button_new_from_stock ("gtk-revert-to-saved"); gtk_widget_show (nec2_revert); gtk_box_pack_start (GTK_BOX (hbox18), nec2_revert, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (nec2_revert), 2); gtk_button_set_focus_on_click (GTK_BUTTON (nec2_revert), FALSE); label22 = gtk_label_new (_("NEC2 Input File")); gtk_widget_show (label22); gtk_frame_set_label_widget (GTK_FRAME (frame7), label22); gtk_misc_set_padding (GTK_MISC (label22), 2, 0); frame6 = gtk_frame_new (NULL); gtk_widget_show (frame6); gtk_box_pack_start (GTK_BOX (vbox4), frame6, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame6), 2); alignment6 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment6); gtk_container_add (GTK_CONTAINER (frame6), alignment6); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment6), 0, 0, 12, 0); scrolledwindow5 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow5); gtk_container_add (GTK_CONTAINER (alignment6), scrolledwindow5); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow5), GTK_SHADOW_IN); nec2_cmnt_treeview = gtk_tree_view_new (); gtk_widget_show (nec2_cmnt_treeview); gtk_container_add (GTK_CONTAINER (scrolledwindow5), nec2_cmnt_treeview); gtk_widget_set_size_request (nec2_cmnt_treeview, 769, 176); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (nec2_cmnt_treeview), TRUE); gtk_tree_view_set_reorderable (GTK_TREE_VIEW (nec2_cmnt_treeview), TRUE); label21 = gtk_label_new (_("Comments")); gtk_widget_show (label21); gtk_frame_set_label_widget (GTK_FRAME (frame6), label21); gtk_misc_set_padding (GTK_MISC (label21), 2, 0); frame9 = gtk_frame_new (NULL); gtk_widget_show (frame9); gtk_box_pack_start (GTK_BOX (vbox4), frame9, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame9), 2); alignment9 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment9); gtk_container_add (GTK_CONTAINER (frame9), alignment9); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment9), 0, 0, 12, 0); table34 = gtk_table_new (2, 8, FALSE); gtk_widget_show (table34); gtk_container_add (GTK_CONTAINER (alignment9), table34); gw = gtk_button_new_with_mnemonic (_("Wire")); gtk_widget_show (gw); gtk_table_attach (GTK_TABLE (table34), gw, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (gw), 2); ga = gtk_button_new_with_mnemonic (_("Arc")); gtk_widget_show (ga); gtk_table_attach (GTK_TABLE (table34), ga, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (ga), 2); gh = gtk_button_new_with_mnemonic (_("Helix")); gtk_widget_show (gh); gtk_table_attach (GTK_TABLE (table34), gh, 2, 3, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (gh), 2); sp = gtk_button_new_with_mnemonic (_("Patch")); gtk_widget_show (sp); gtk_table_attach (GTK_TABLE (table34), sp, 3, 4, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (sp), 2); gr = gtk_button_new_with_mnemonic (_("Cylinder")); gtk_widget_show (gr); gtk_table_attach (GTK_TABLE (table34), gr, 4, 5, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (gr), 2); gm = gtk_button_new_with_mnemonic (_("Move")); gtk_widget_show (gm); gtk_table_attach (GTK_TABLE (table34), gm, 5, 6, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (gm), 2); gx = gtk_button_new_with_mnemonic (_("Reflect")); gtk_widget_show (gx); gtk_table_attach (GTK_TABLE (table34), gx, 6, 7, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (gx), 2); gs = gtk_button_new_with_mnemonic (_("Scale")); gtk_widget_show (gs); gtk_table_attach (GTK_TABLE (table34), gs, 7, 8, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (gs), 2); label24 = gtk_label_new (_("Edit Geometry Data")); gtk_widget_show (label24); gtk_frame_set_label_widget (GTK_FRAME (frame9), label24); gtk_misc_set_padding (GTK_MISC (label24), 2, 0); frame5 = gtk_frame_new (NULL); gtk_widget_show (frame5); gtk_box_pack_start (GTK_BOX (vbox4), frame5, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame5), 2); alignment5 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment5); gtk_container_add (GTK_CONTAINER (frame5), alignment5); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment5), 0, 0, 12, 0); scrolledwindow4 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow4); gtk_container_add (GTK_CONTAINER (alignment5), scrolledwindow4); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow4), GTK_SHADOW_IN); nec2_geom_treeview = gtk_tree_view_new (); gtk_widget_show (nec2_geom_treeview); gtk_container_add (GTK_CONTAINER (scrolledwindow4), nec2_geom_treeview); gtk_widget_set_size_request (nec2_geom_treeview, 769, 176); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (nec2_geom_treeview), TRUE); gtk_tree_view_set_reorderable (GTK_TREE_VIEW (nec2_geom_treeview), TRUE); label20 = gtk_label_new (_("Geometry")); gtk_widget_show (label20); gtk_frame_set_label_widget (GTK_FRAME (frame5), label20); gtk_misc_set_padding (GTK_MISC (label20), 2, 0); frame10 = gtk_frame_new (NULL); gtk_widget_show (frame10); gtk_box_pack_start (GTK_BOX (vbox4), frame10, FALSE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame10), 2); alignment10 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment10); gtk_container_add (GTK_CONTAINER (frame10), alignment10); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment10), 0, 0, 12, 0); table4 = gtk_table_new (2, 6, FALSE); gtk_widget_show (table4); gtk_container_add (GTK_CONTAINER (alignment10), table4); ex = gtk_button_new_with_mnemonic (_("Excitation")); gtk_widget_show (ex); gtk_table_attach (GTK_TABLE (table4), ex, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (ex), 2); fr = gtk_button_new_with_mnemonic (_("Frequency")); gtk_widget_show (fr); gtk_table_attach (GTK_TABLE (table4), fr, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (fr), 2); gn = gtk_button_new_with_mnemonic (_("Ground (GN)")); gtk_widget_show (gn); gtk_table_attach (GTK_TABLE (table4), gn, 2, 3, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (gn), 2); rp = gtk_button_new_with_mnemonic (_("Radiation")); gtk_widget_show (rp); gtk_table_attach (GTK_TABLE (table4), rp, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (rp), 2); ld = gtk_button_new_with_mnemonic (_("Loading")); gtk_widget_show (ld); gtk_table_attach (GTK_TABLE (table4), ld, 3, 4, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (ld), 2); nt = gtk_button_new_with_mnemonic (_("Network")); gtk_widget_show (nt); gtk_table_attach (GTK_TABLE (table4), nt, 4, 5, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (nt), 2); tl = gtk_button_new_with_mnemonic (_("Trans. Line")); gtk_widget_show (tl); gtk_table_attach (GTK_TABLE (table4), tl, 5, 6, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (tl), 2); ne = gtk_button_new_with_mnemonic (_("Near Fields")); gtk_widget_show (ne); gtk_table_attach (GTK_TABLE (table4), ne, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (ne), 2); xq = gtk_button_new_with_mnemonic (_("Execute")); gtk_widget_show (xq); gtk_table_attach (GTK_TABLE (table4), xq, 5, 6, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (xq), 2); kh = gtk_button_new_with_mnemonic (_("Interaction")); gtk_widget_show (kh); gtk_table_attach (GTK_TABLE (table4), kh, 4, 5, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (kh), 2); ek = gtk_button_new_with_mnemonic (_("Kernel")); gtk_widget_show (ek); gtk_table_attach (GTK_TABLE (table4), ek, 3, 4, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (ek), 2); gd = gtk_button_new_with_mnemonic (_("Ground (GD)")); gtk_widget_show (gd); gtk_table_attach (GTK_TABLE (table4), gd, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (gd), 2); label25 = gtk_label_new (_("Edit Control Commands")); gtk_widget_show (label25); gtk_frame_set_label_widget (GTK_FRAME (frame10), label25); gtk_misc_set_padding (GTK_MISC (label25), 2, 0); frame4 = gtk_frame_new (NULL); gtk_widget_show (frame4); gtk_box_pack_start (GTK_BOX (vbox4), frame4, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame4), 2); alignment4 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment4); gtk_container_add (GTK_CONTAINER (frame4), alignment4); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment4), 0, 0, 12, 0); scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolledwindow3); gtk_container_add (GTK_CONTAINER (alignment4), scrolledwindow3); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow3), GTK_SHADOW_IN); nec2_cmnd_treeview = gtk_tree_view_new (); gtk_widget_show (nec2_cmnd_treeview); gtk_container_add (GTK_CONTAINER (scrolledwindow3), nec2_cmnd_treeview); gtk_widget_set_size_request (nec2_cmnd_treeview, 769, 176); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (nec2_cmnd_treeview), TRUE); gtk_tree_view_set_reorderable (GTK_TREE_VIEW (nec2_cmnd_treeview), TRUE); label19 = gtk_label_new (_("Commands")); gtk_widget_show (label19); gtk_frame_set_label_widget (GTK_FRAME (frame4), label19); gtk_misc_set_padding (GTK_MISC (label19), 2, 0); g_signal_connect ((gpointer) nec2_editor, "delete_event", G_CALLBACK (on_nec2_editor_delete_event), NULL); g_signal_connect ((gpointer) nec2_editor, "destroy", G_CALLBACK (on_nec2_editor_destroy), NULL); g_signal_connect ((gpointer) nec2_row_add, "clicked", G_CALLBACK (on_nec2_row_add_clicked), NULL); g_signal_connect ((gpointer) nec2_row_remv, "clicked", G_CALLBACK (on_nec2_row_remv_clicked), NULL); g_signal_connect ((gpointer) nec2_treeview_clear, "clicked", G_CALLBACK (on_nec2_treeview_clear_clicked), NULL); g_signal_connect ((gpointer) nec2_save_as, "clicked", G_CALLBACK (on_nec2_save_as_clicked), NULL); g_signal_connect ((gpointer) nec2_save, "clicked", G_CALLBACK (on_nec2_save_clicked), NULL); g_signal_connect ((gpointer) nec2_revert, "clicked", G_CALLBACK (on_nec2_revert_clicked), NULL); g_signal_connect ((gpointer) nec2_cmnt_treeview, "button_press_event", G_CALLBACK (on_nec2_cmnt_treeview_button_press_event), NULL); g_signal_connect ((gpointer) gw, "clicked", G_CALLBACK (on_gw_clicked), NULL); g_signal_connect ((gpointer) ga, "clicked", G_CALLBACK (on_ga_clicked), NULL); g_signal_connect ((gpointer) gh, "clicked", G_CALLBACK (on_gh_clicked), NULL); g_signal_connect ((gpointer) sp, "clicked", G_CALLBACK (on_sp_clicked), NULL); g_signal_connect ((gpointer) gr, "clicked", G_CALLBACK (on_gr_clicked), NULL); g_signal_connect ((gpointer) gm, "clicked", G_CALLBACK (on_gm_clicked), NULL); g_signal_connect ((gpointer) gx, "clicked", G_CALLBACK (on_gx_clicked), NULL); g_signal_connect ((gpointer) gs, "clicked", G_CALLBACK (on_gs_clicked), NULL); g_signal_connect ((gpointer) nec2_geom_treeview, "button_press_event", G_CALLBACK (on_nec2_geom_treeview_button_press_event), NULL); g_signal_connect ((gpointer) ex, "clicked", G_CALLBACK (on_ex_clicked), NULL); g_signal_connect ((gpointer) fr, "clicked", G_CALLBACK (on_fr_clicked), NULL); g_signal_connect ((gpointer) gn, "clicked", G_CALLBACK (on_gn_clicked), NULL); g_signal_connect ((gpointer) rp, "clicked", G_CALLBACK (on_rp_clicked), NULL); g_signal_connect ((gpointer) ld, "clicked", G_CALLBACK (on_ld_clicked), NULL); g_signal_connect ((gpointer) nt, "clicked", G_CALLBACK (on_nt_clicked), NULL); g_signal_connect ((gpointer) tl, "clicked", G_CALLBACK (on_tl_clicked), NULL); g_signal_connect ((gpointer) ne, "clicked", G_CALLBACK (on_ne_clicked), NULL); g_signal_connect ((gpointer) xq, "clicked", G_CALLBACK (on_xq_clicked), NULL); g_signal_connect ((gpointer) kh, "clicked", G_CALLBACK (on_kh_clicked), NULL); g_signal_connect ((gpointer) ek, "clicked", G_CALLBACK (on_ek_clicked), NULL); g_signal_connect ((gpointer) gd, "clicked", G_CALLBACK (on_gd_clicked), NULL); g_signal_connect ((gpointer) nec2_cmnd_treeview, "button_press_event", G_CALLBACK (on_nec2_cmnd_treeview_button_press_event), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (nec2_editor, nec2_editor, "nec2_editor"); GLADE_HOOKUP_OBJECT (nec2_editor, vbox4, "vbox4"); GLADE_HOOKUP_OBJECT (nec2_editor, hbox16, "hbox16"); GLADE_HOOKUP_OBJECT (nec2_editor, frame8, "frame8"); GLADE_HOOKUP_OBJECT (nec2_editor, alignment8, "alignment8"); GLADE_HOOKUP_OBJECT (nec2_editor, hbox17, "hbox17"); GLADE_HOOKUP_OBJECT (nec2_editor, nec2_row_add, "nec2_row_add"); GLADE_HOOKUP_OBJECT (nec2_editor, nec2_row_remv, "nec2_row_remv"); GLADE_HOOKUP_OBJECT (nec2_editor, nec2_treeview_clear, "nec2_treeview_clear"); GLADE_HOOKUP_OBJECT (nec2_editor, label23, "label23"); GLADE_HOOKUP_OBJECT (nec2_editor, frame7, "frame7"); GLADE_HOOKUP_OBJECT (nec2_editor, alignment7, "alignment7"); GLADE_HOOKUP_OBJECT (nec2_editor, hbox18, "hbox18"); GLADE_HOOKUP_OBJECT (nec2_editor, nec2_save_as, "nec2_save_as"); GLADE_HOOKUP_OBJECT (nec2_editor, nec2_save, "nec2_save"); GLADE_HOOKUP_OBJECT (nec2_editor, nec2_apply_checkbutton, "nec2_apply_checkbutton"); GLADE_HOOKUP_OBJECT (nec2_editor, nec2_revert, "nec2_revert"); GLADE_HOOKUP_OBJECT (nec2_editor, label22, "label22"); GLADE_HOOKUP_OBJECT (nec2_editor, frame6, "frame6"); GLADE_HOOKUP_OBJECT (nec2_editor, alignment6, "alignment6"); GLADE_HOOKUP_OBJECT (nec2_editor, scrolledwindow5, "scrolledwindow5"); GLADE_HOOKUP_OBJECT (nec2_editor, nec2_cmnt_treeview, "nec2_cmnt_treeview"); GLADE_HOOKUP_OBJECT (nec2_editor, label21, "label21"); GLADE_HOOKUP_OBJECT (nec2_editor, frame9, "frame9"); GLADE_HOOKUP_OBJECT (nec2_editor, alignment9, "alignment9"); GLADE_HOOKUP_OBJECT (nec2_editor, table34, "table34"); GLADE_HOOKUP_OBJECT (nec2_editor, gw, "gw"); GLADE_HOOKUP_OBJECT (nec2_editor, ga, "ga"); GLADE_HOOKUP_OBJECT (nec2_editor, gh, "gh"); GLADE_HOOKUP_OBJECT (nec2_editor, sp, "sp"); GLADE_HOOKUP_OBJECT (nec2_editor, gr, "gr"); GLADE_HOOKUP_OBJECT (nec2_editor, gm, "gm"); GLADE_HOOKUP_OBJECT (nec2_editor, gx, "gx"); GLADE_HOOKUP_OBJECT (nec2_editor, gs, "gs"); GLADE_HOOKUP_OBJECT (nec2_editor, label24, "label24"); GLADE_HOOKUP_OBJECT (nec2_editor, frame5, "frame5"); GLADE_HOOKUP_OBJECT (nec2_editor, alignment5, "alignment5"); GLADE_HOOKUP_OBJECT (nec2_editor, scrolledwindow4, "scrolledwindow4"); GLADE_HOOKUP_OBJECT (nec2_editor, nec2_geom_treeview, "nec2_geom_treeview"); GLADE_HOOKUP_OBJECT (nec2_editor, label20, "label20"); GLADE_HOOKUP_OBJECT (nec2_editor, frame10, "frame10"); GLADE_HOOKUP_OBJECT (nec2_editor, alignment10, "alignment10"); GLADE_HOOKUP_OBJECT (nec2_editor, table4, "table4"); GLADE_HOOKUP_OBJECT (nec2_editor, ex, "ex"); GLADE_HOOKUP_OBJECT (nec2_editor, fr, "fr"); GLADE_HOOKUP_OBJECT (nec2_editor, gn, "gn"); GLADE_HOOKUP_OBJECT (nec2_editor, rp, "rp"); GLADE_HOOKUP_OBJECT (nec2_editor, ld, "ld"); GLADE_HOOKUP_OBJECT (nec2_editor, nt, "nt"); GLADE_HOOKUP_OBJECT (nec2_editor, tl, "tl"); GLADE_HOOKUP_OBJECT (nec2_editor, ne, "ne"); GLADE_HOOKUP_OBJECT (nec2_editor, xq, "xq"); GLADE_HOOKUP_OBJECT (nec2_editor, kh, "kh"); GLADE_HOOKUP_OBJECT (nec2_editor, ek, "ek"); GLADE_HOOKUP_OBJECT (nec2_editor, gd, "gd"); GLADE_HOOKUP_OBJECT (nec2_editor, label25, "label25"); GLADE_HOOKUP_OBJECT (nec2_editor, frame4, "frame4"); GLADE_HOOKUP_OBJECT (nec2_editor, alignment4, "alignment4"); GLADE_HOOKUP_OBJECT (nec2_editor, scrolledwindow3, "scrolledwindow3"); GLADE_HOOKUP_OBJECT (nec2_editor, nec2_cmnd_treeview, "nec2_cmnd_treeview"); GLADE_HOOKUP_OBJECT (nec2_editor, label19, "label19"); return nec2_editor; } GtkWidget* create_wire_editor (void) { GtkWidget *wire_editor; GtkWidget *vbox5; GtkWidget *frame11; GtkWidget *table2; GtkWidget *label29; GtkWidget *label30; GtkWidget *label31; GtkWidget *label32; GtkWidget *label33; GtkWidget *label34; GtkWidget *label36; GtkWidget *label37; GtkWidget *label38; GtkObject *wire_tagnum_spinbutton_adj; GtkWidget *wire_tagnum_spinbutton; GtkObject *wire_numseg_spinbutton_adj; GtkWidget *wire_numseg_spinbutton; GtkObject *wire_pcl_spinbutton_adj; GtkWidget *wire_pcl_spinbutton; GtkObject *wire_x1_spinbutton_adj; GtkWidget *wire_x1_spinbutton; GtkObject *wire_y1_spinbutton_adj; GtkWidget *wire_y1_spinbutton; GtkObject *wire_z1_spinbutton_adj; GtkWidget *wire_z1_spinbutton; GtkObject *wire_z2_spinbutton_adj; GtkWidget *wire_z2_spinbutton; GtkObject *wire_y2_spinbutton_adj; GtkWidget *wire_y2_spinbutton; GtkObject *wire_x2_spinbutton_adj; GtkWidget *wire_x2_spinbutton; GtkWidget *label28; GtkObject *wire_dia_spinbutton_adj; GtkWidget *wire_dia_spinbutton; GtkWidget *label35; GtkWidget *label39; GtkObject *wire_len_spinbutton_adj; GtkWidget *wire_len_spinbutton; GtkWidget *label44; GtkObject *wire_res_spinbutton_adj; GtkWidget *wire_res_spinbutton; GtkWidget *wire_taper_checkbutton; GtkWidget *wire_taperframe; GtkWidget *alignment12; GtkWidget *table3; GtkWidget *label40; GtkWidget *label41; GtkWidget *label42; GtkWidget *label43; GtkObject *wire_rdia_spinbutton_adj; GtkWidget *wire_rdia_spinbutton; GtkObject *wire_dian_spinbutton_adj; GtkWidget *wire_dian_spinbutton; GtkObject *wire_dia1_spinbutton_adj; GtkWidget *wire_dia1_spinbutton; GtkObject *wire_rlen_spinbutton_adj; GtkWidget *wire_rlen_spinbutton; GtkWidget *label27; GtkWidget *hbox21; GtkWidget *wire_new_button; GtkWidget *wire_cancel_button; GtkWidget *alignment50; GtkWidget *hbox48; GtkWidget *image70; GtkWidget *label222; GtkWidget *wire_apply_button; GtkWidget *wire_ok_button; wire_editor = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (wire_editor), 4); gtk_window_set_title (GTK_WINDOW (wire_editor), _("Wire Element (GW & GC cards)")); vbox5 = gtk_vbox_new (FALSE, 2); gtk_widget_show (vbox5); gtk_container_add (GTK_CONTAINER (wire_editor), vbox5); frame11 = gtk_frame_new (NULL); gtk_widget_show (frame11); gtk_box_pack_start (GTK_BOX (vbox5), frame11, TRUE, TRUE, 2); gtk_container_set_border_width (GTK_CONTAINER (frame11), 4); table2 = gtk_table_new (6, 4, FALSE); gtk_widget_show (table2); gtk_container_add (GTK_CONTAINER (frame11), table2); gtk_table_set_row_spacings (GTK_TABLE (table2), 2); gtk_table_set_col_spacings (GTK_TABLE (table2), 2); label29 = gtk_label_new (_("No. Segments")); gtk_widget_show (label29); gtk_table_attach (GTK_TABLE (table2), label29, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label29), 0.1, 0.5); label30 = gtk_label_new (_("Segs % lambda")); gtk_widget_show (label30); gtk_table_attach (GTK_TABLE (table2), label30, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label30), 0.1, 0.5); label31 = gtk_label_new (""); gtk_widget_show (label31); gtk_table_attach (GTK_TABLE (table2), label31, 3, 4, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label31), 0.1, 0.5); label32 = gtk_label_new (_("Wire X1")); gtk_widget_show (label32); gtk_table_attach (GTK_TABLE (table2), label32, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label32), 0.1, 0.5); label33 = gtk_label_new (_("Wire Y1")); gtk_widget_show (label33); gtk_table_attach (GTK_TABLE (table2), label33, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); GTK_WIDGET_SET_FLAGS (label33, GTK_CAN_FOCUS); gtk_label_set_selectable (GTK_LABEL (label33), TRUE); gtk_misc_set_alignment (GTK_MISC (label33), 0.1, 0.5); label34 = gtk_label_new (_("Wire Z1")); gtk_widget_show (label34); gtk_table_attach (GTK_TABLE (table2), label34, 2, 3, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label34), 0.1, 0.5); label36 = gtk_label_new (_("Wire X2")); gtk_widget_show (label36); gtk_table_attach (GTK_TABLE (table2), label36, 0, 1, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label36), 0.1, 0.5); label37 = gtk_label_new (_("Wire Y2")); gtk_widget_show (label37); gtk_table_attach (GTK_TABLE (table2), label37, 1, 2, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label37), 0.1, 0.5); label38 = gtk_label_new (_("Wire Z2")); gtk_widget_show (label38); gtk_table_attach (GTK_TABLE (table2), label38, 2, 3, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label38), 0.1, 0.5); wire_tagnum_spinbutton_adj = gtk_adjustment_new (1, 1, 100000, 1, 10, 0); wire_tagnum_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_tagnum_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (wire_tagnum_spinbutton); gtk_table_attach (GTK_TABLE (table2), wire_tagnum_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_tagnum_spinbutton), TRUE); wire_numseg_spinbutton_adj = gtk_adjustment_new (15, 1, 100000, 1, 10, 0); wire_numseg_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_numseg_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (wire_numseg_spinbutton); gtk_table_attach (GTK_TABLE (table2), wire_numseg_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_numseg_spinbutton), TRUE); wire_pcl_spinbutton_adj = gtk_adjustment_new (5, 0.0010000000475, 30, 9.99999974738e-06, 10, 0); wire_pcl_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_pcl_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_pcl_spinbutton); gtk_table_attach (GTK_TABLE (table2), wire_pcl_spinbutton, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_pcl_spinbutton), TRUE); wire_x1_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); wire_x1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_x1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_x1_spinbutton); gtk_table_attach (GTK_TABLE (table2), wire_x1_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_x1_spinbutton), TRUE); wire_y1_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); wire_y1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_y1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_y1_spinbutton); gtk_table_attach (GTK_TABLE (table2), wire_y1_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_y1_spinbutton), TRUE); wire_z1_spinbutton_adj = gtk_adjustment_new (-1, -10000, 10000, 9.99999974738e-06, 10, 0); wire_z1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_z1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_z1_spinbutton); gtk_table_attach (GTK_TABLE (table2), wire_z1_spinbutton, 2, 3, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_z1_spinbutton), TRUE); wire_z2_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); wire_z2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_z2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_z2_spinbutton); gtk_table_attach (GTK_TABLE (table2), wire_z2_spinbutton, 2, 3, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_z2_spinbutton), TRUE); wire_y2_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); wire_y2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_y2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_y2_spinbutton); gtk_table_attach (GTK_TABLE (table2), wire_y2_spinbutton, 1, 2, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_y2_spinbutton), TRUE); wire_x2_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); wire_x2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_x2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_x2_spinbutton); gtk_table_attach (GTK_TABLE (table2), wire_x2_spinbutton, 0, 1, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_x2_spinbutton), TRUE); label28 = gtk_label_new (_("Tag Number")); gtk_widget_show (label28); gtk_table_attach (GTK_TABLE (table2), label28, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label28), 0.1, 0.5); wire_dia_spinbutton_adj = gtk_adjustment_new (0.00300000002608, 0, 100, 9.99999974738e-06, 10, 0); wire_dia_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_dia_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_dia_spinbutton); gtk_table_attach (GTK_TABLE (table2), wire_dia_spinbutton, 3, 4, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_dia_spinbutton), TRUE); label35 = gtk_label_new (_("Wire Diameter")); gtk_widget_show (label35); gtk_table_attach (GTK_TABLE (table2), label35, 3, 4, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label35), 0.1, 0.5); label39 = gtk_label_new (_("Wire Length")); gtk_widget_show (label39); gtk_table_attach (GTK_TABLE (table2), label39, 3, 4, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label39), 0.1, 0.5); wire_len_spinbutton_adj = gtk_adjustment_new (2, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); wire_len_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_len_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_len_spinbutton); gtk_table_attach (GTK_TABLE (table2), wire_len_spinbutton, 3, 4, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_len_spinbutton), TRUE); label44 = gtk_label_new (_("Conductivity S/m")); gtk_widget_show (label44); gtk_table_attach (GTK_TABLE (table2), label44, 3, 4, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label44), 0.1, 0.5); wire_res_spinbutton_adj = gtk_adjustment_new (0, 0, 1000000000, 9.99999974738e-06, 10, 0); wire_res_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_res_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_res_spinbutton); gtk_table_attach (GTK_TABLE (table2), wire_res_spinbutton, 3, 4, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_res_spinbutton), TRUE); wire_taper_checkbutton = gtk_check_button_new_with_mnemonic (_("Tapered Wire")); gtk_widget_show (wire_taper_checkbutton); gtk_frame_set_label_widget (GTK_FRAME (frame11), wire_taper_checkbutton); gtk_container_set_border_width (GTK_CONTAINER (wire_taper_checkbutton), 2); wire_taperframe = gtk_frame_new (NULL); gtk_widget_show (wire_taperframe); gtk_box_pack_start (GTK_BOX (vbox5), wire_taperframe, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (wire_taperframe), 4); alignment12 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment12); gtk_container_add (GTK_CONTAINER (wire_taperframe), alignment12); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment12), 0, 0, 12, 0); table3 = gtk_table_new (2, 4, FALSE); gtk_widget_show (table3); gtk_container_add (GTK_CONTAINER (alignment12), table3); gtk_table_set_row_spacings (GTK_TABLE (table3), 2); gtk_table_set_col_spacings (GTK_TABLE (table3), 2); label40 = gtk_label_new (_("Length Taper")); gtk_widget_show (label40); gtk_table_attach (GTK_TABLE (table3), label40, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label40), 0.1, 0.5); label41 = gtk_label_new (_("Diameter Seg 1")); gtk_widget_show (label41); gtk_table_attach (GTK_TABLE (table3), label41, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label41), 0.1, 0.5); label42 = gtk_label_new (_("Diameter Seg N")); gtk_widget_show (label42); gtk_table_attach (GTK_TABLE (table3), label42, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label42), 0.1, 0.5); label43 = gtk_label_new (_("Diam. Taper")); gtk_widget_show (label43); gtk_table_attach (GTK_TABLE (table3), label43, 3, 4, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label43), 0.1, 0.5); wire_rdia_spinbutton_adj = gtk_adjustment_new (0.920000016689, 0.5, 2, 9.99999974738e-06, 10, 0); wire_rdia_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_rdia_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_rdia_spinbutton); gtk_table_attach (GTK_TABLE (table3), wire_rdia_spinbutton, 3, 4, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_rdia_spinbutton), TRUE); wire_dian_spinbutton_adj = gtk_adjustment_new (0.0179999992251, 9.99999974738e-06, 100, 9.99999974738e-06, 10, 0); wire_dian_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_dian_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_dian_spinbutton); gtk_table_attach (GTK_TABLE (table3), wire_dian_spinbutton, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_dian_spinbutton), TRUE); wire_dia1_spinbutton_adj = gtk_adjustment_new (0.0309999994934, 9.99999974738e-06, 100, 9.99999974738e-06, 10, 0); wire_dia1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_dia1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_dia1_spinbutton); gtk_table_attach (GTK_TABLE (table3), wire_dia1_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_dia1_spinbutton), TRUE); wire_rlen_spinbutton_adj = gtk_adjustment_new (0.920000016689, 0.5, 2, 9.99999974738e-06, 10, 0); wire_rlen_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (wire_rlen_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (wire_rlen_spinbutton); gtk_table_attach (GTK_TABLE (table3), wire_rlen_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (wire_rlen_spinbutton), TRUE); label27 = gtk_label_new (_("Wire Taper Data")); gtk_widget_show (label27); gtk_frame_set_label_widget (GTK_FRAME (wire_taperframe), label27); gtk_misc_set_padding (GTK_MISC (label27), 4, 4); hbox21 = gtk_hbox_new (TRUE, 2); gtk_widget_show (hbox21); gtk_box_pack_start (GTK_BOX (vbox5), hbox21, TRUE, TRUE, 0); wire_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (wire_new_button); gtk_box_pack_start (GTK_BOX (hbox21), wire_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (wire_new_button), 2); GTK_WIDGET_SET_FLAGS (wire_new_button, GTK_CAN_DEFAULT); wire_cancel_button = gtk_button_new (); gtk_widget_show (wire_cancel_button); gtk_box_pack_start (GTK_BOX (hbox21), wire_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (wire_cancel_button), 2); GTK_WIDGET_SET_FLAGS (wire_cancel_button, GTK_CAN_DEFAULT); alignment50 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment50); gtk_container_add (GTK_CONTAINER (wire_cancel_button), alignment50); hbox48 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox48); gtk_container_add (GTK_CONTAINER (alignment50), hbox48); image70 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image70); gtk_box_pack_start (GTK_BOX (hbox48), image70, FALSE, FALSE, 0); label222 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label222); gtk_box_pack_start (GTK_BOX (hbox48), label222, FALSE, FALSE, 0); wire_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (wire_apply_button); gtk_box_pack_start (GTK_BOX (hbox21), wire_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (wire_apply_button), 2); GTK_WIDGET_SET_FLAGS (wire_apply_button, GTK_CAN_DEFAULT); wire_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (wire_ok_button); gtk_box_pack_start (GTK_BOX (hbox21), wire_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (wire_ok_button), 2); GTK_WIDGET_SET_FLAGS (wire_ok_button, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) wire_editor, "destroy", G_CALLBACK (on_wire_editor_destroy), NULL); g_signal_connect ((gpointer) wire_tagnum_spinbutton, "value_changed", G_CALLBACK (on_wire_tagnum_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_numseg_spinbutton, "value_changed", G_CALLBACK (on_wire_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_pcl_spinbutton, "value_changed", G_CALLBACK (on_wire_pcl_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_x1_spinbutton, "value_changed", G_CALLBACK (on_wire_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_y1_spinbutton, "value_changed", G_CALLBACK (on_wire_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_z1_spinbutton, "value_changed", G_CALLBACK (on_wire_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_z2_spinbutton, "value_changed", G_CALLBACK (on_wire_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_y2_spinbutton, "value_changed", G_CALLBACK (on_wire_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_x2_spinbutton, "value_changed", G_CALLBACK (on_wire_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_dia_spinbutton, "value_changed", G_CALLBACK (on_wire_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_len_spinbutton, "value_changed", G_CALLBACK (on_wire_len_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_res_spinbutton, "value_changed", G_CALLBACK (on_wire_res_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_taper_checkbutton, "toggled", G_CALLBACK (on_wire_taper_checkbutton_toggled), NULL); g_signal_connect ((gpointer) wire_rdia_spinbutton, "value_changed", G_CALLBACK (on_wire_rdia_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_dian_spinbutton, "value_changed", G_CALLBACK (on_wire_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_dia1_spinbutton, "value_changed", G_CALLBACK (on_wire_rdia_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_rlen_spinbutton, "value_changed", G_CALLBACK (on_wire_rlen_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) wire_new_button, "clicked", G_CALLBACK (on_wire_new_button_clicked), NULL); g_signal_connect ((gpointer) wire_cancel_button, "clicked", G_CALLBACK (on_wire_cancel_button_clicked), NULL); g_signal_connect ((gpointer) wire_apply_button, "clicked", G_CALLBACK (on_wire_apply_button_clicked), NULL); g_signal_connect ((gpointer) wire_ok_button, "clicked", G_CALLBACK (on_wire_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (wire_editor, wire_editor, "wire_editor"); GLADE_HOOKUP_OBJECT (wire_editor, vbox5, "vbox5"); GLADE_HOOKUP_OBJECT (wire_editor, frame11, "frame11"); GLADE_HOOKUP_OBJECT (wire_editor, table2, "table2"); GLADE_HOOKUP_OBJECT (wire_editor, label29, "label29"); GLADE_HOOKUP_OBJECT (wire_editor, label30, "label30"); GLADE_HOOKUP_OBJECT (wire_editor, label31, "label31"); GLADE_HOOKUP_OBJECT (wire_editor, label32, "label32"); GLADE_HOOKUP_OBJECT (wire_editor, label33, "label33"); GLADE_HOOKUP_OBJECT (wire_editor, label34, "label34"); GLADE_HOOKUP_OBJECT (wire_editor, label36, "label36"); GLADE_HOOKUP_OBJECT (wire_editor, label37, "label37"); GLADE_HOOKUP_OBJECT (wire_editor, label38, "label38"); GLADE_HOOKUP_OBJECT (wire_editor, wire_tagnum_spinbutton, "wire_tagnum_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_numseg_spinbutton, "wire_numseg_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_pcl_spinbutton, "wire_pcl_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_x1_spinbutton, "wire_x1_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_y1_spinbutton, "wire_y1_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_z1_spinbutton, "wire_z1_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_z2_spinbutton, "wire_z2_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_y2_spinbutton, "wire_y2_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_x2_spinbutton, "wire_x2_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, label28, "label28"); GLADE_HOOKUP_OBJECT (wire_editor, wire_dia_spinbutton, "wire_dia_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, label35, "label35"); GLADE_HOOKUP_OBJECT (wire_editor, label39, "label39"); GLADE_HOOKUP_OBJECT (wire_editor, wire_len_spinbutton, "wire_len_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, label44, "label44"); GLADE_HOOKUP_OBJECT (wire_editor, wire_res_spinbutton, "wire_res_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_taper_checkbutton, "wire_taper_checkbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_taperframe, "wire_taperframe"); GLADE_HOOKUP_OBJECT (wire_editor, alignment12, "alignment12"); GLADE_HOOKUP_OBJECT (wire_editor, table3, "table3"); GLADE_HOOKUP_OBJECT (wire_editor, label40, "label40"); GLADE_HOOKUP_OBJECT (wire_editor, label41, "label41"); GLADE_HOOKUP_OBJECT (wire_editor, label42, "label42"); GLADE_HOOKUP_OBJECT (wire_editor, label43, "label43"); GLADE_HOOKUP_OBJECT (wire_editor, wire_rdia_spinbutton, "wire_rdia_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_dian_spinbutton, "wire_dian_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_dia1_spinbutton, "wire_dia1_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, wire_rlen_spinbutton, "wire_rlen_spinbutton"); GLADE_HOOKUP_OBJECT (wire_editor, label27, "label27"); GLADE_HOOKUP_OBJECT (wire_editor, hbox21, "hbox21"); GLADE_HOOKUP_OBJECT (wire_editor, wire_new_button, "wire_new_button"); GLADE_HOOKUP_OBJECT (wire_editor, wire_cancel_button, "wire_cancel_button"); GLADE_HOOKUP_OBJECT (wire_editor, alignment50, "alignment50"); GLADE_HOOKUP_OBJECT (wire_editor, hbox48, "hbox48"); GLADE_HOOKUP_OBJECT (wire_editor, image70, "image70"); GLADE_HOOKUP_OBJECT (wire_editor, label222, "label222"); GLADE_HOOKUP_OBJECT (wire_editor, wire_apply_button, "wire_apply_button"); GLADE_HOOKUP_OBJECT (wire_editor, wire_ok_button, "wire_ok_button"); return wire_editor; } GtkWidget* create_patch_editor (void) { GtkWidget *patch_editor; GtkWidget *vbox6; GtkWidget *patch_type_frame; GtkWidget *alignment13; GtkWidget *hbox22; GtkWidget *patch_arbitrary_radiobutton; GSList *patch_arbitrary_radiobutton_group = NULL; GtkWidget *patch_rectangular_radiobutton; GtkWidget *patch_triangular_radiobutton; GtkWidget *patch_quadrilateral_radiobutton; GtkWidget *patch_surface_radiobutton; GtkWidget *label45; GtkWidget *patch_sm_frame; GtkWidget *alignment18; GtkWidget *table10; GtkWidget *label87; GtkWidget *label88; GtkObject *patch_nx_spinbutton_adj; GtkWidget *patch_nx_spinbutton; GtkObject *patch_ny_spinbutton_adj; GtkWidget *patch_ny_spinbutton; GtkWidget *label86; GtkWidget *frame13; GtkWidget *alignment14; GtkWidget *table5; GtkWidget *patch_x1_label; GtkWidget *patch_y1_label; GtkWidget *patch_z1_label; GtkObject *patch_x1_spinbutton_adj; GtkWidget *patch_x1_spinbutton; GtkObject *patch_y1_spinbutton_adj; GtkWidget *patch_y1_spinbutton; GtkObject *patch_z1_spinbutton_adj; GtkWidget *patch_z1_spinbutton; GtkObject *patch_x2_spinbutton_adj; GtkWidget *patch_x2_spinbutton; GtkObject *patch_y2_spinbutton_adj; GtkWidget *patch_y2_spinbutton; GtkObject *patch_z2_spinbutton_adj; GtkWidget *patch_z2_spinbutton; GtkWidget *patch_x2_label; GtkWidget *patch_y2_label; GtkWidget *patch_z2_label; GtkWidget *label46; GtkWidget *patch_sc_frame; GtkWidget *alignment15; GtkWidget *vbox7; GtkWidget *table6; GtkObject *patch_x3_spinbutton_adj; GtkWidget *patch_x3_spinbutton; GtkObject *patch_y3_spinbutton_adj; GtkWidget *patch_y3_spinbutton; GtkObject *patch_z3_spinbutton_adj; GtkWidget *patch_z3_spinbutton; GtkWidget *label54; GtkWidget *label57; GtkWidget *label58; GtkWidget *patch_sc_table; GtkObject *patch_x4_spinbutton_adj; GtkWidget *patch_x4_spinbutton; GtkObject *patch_y4_spinbutton_adj; GtkWidget *patch_y4_spinbutton; GtkObject *patch_z4_spinbutton_adj; GtkWidget *patch_z4_spinbutton; GtkWidget *label55; GtkWidget *label56; GtkWidget *label59; GtkWidget *label47; GtkWidget *hbox23; GtkWidget *patch_new_button; GtkWidget *patch_cancel_button; GtkWidget *alignment51; GtkWidget *hbox49; GtkWidget *image71; GtkWidget *label223; GtkWidget *patch_apply_button; GtkWidget *patch_ok_button; patch_editor = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (patch_editor), 4); gtk_window_set_title (GTK_WINDOW (patch_editor), _("Patch Element (SP & SC Cards)")); vbox6 = gtk_vbox_new (FALSE, 2); gtk_widget_show (vbox6); gtk_container_add (GTK_CONTAINER (patch_editor), vbox6); patch_type_frame = gtk_frame_new (NULL); gtk_widget_show (patch_type_frame); gtk_box_pack_start (GTK_BOX (vbox6), patch_type_frame, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (patch_type_frame), 4); alignment13 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment13); gtk_container_add (GTK_CONTAINER (patch_type_frame), alignment13); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment13), 0, 0, 12, 0); hbox22 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox22); gtk_container_add (GTK_CONTAINER (alignment13), hbox22); patch_arbitrary_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Arbitary")); gtk_widget_show (patch_arbitrary_radiobutton); gtk_box_pack_start (GTK_BOX (hbox22), patch_arbitrary_radiobutton, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (patch_arbitrary_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (patch_arbitrary_radiobutton), patch_arbitrary_radiobutton_group); patch_arbitrary_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (patch_arbitrary_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (patch_arbitrary_radiobutton), TRUE); patch_rectangular_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Rectangle")); gtk_widget_show (patch_rectangular_radiobutton); gtk_box_pack_start (GTK_BOX (hbox22), patch_rectangular_radiobutton, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (patch_rectangular_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (patch_rectangular_radiobutton), patch_arbitrary_radiobutton_group); patch_arbitrary_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (patch_rectangular_radiobutton)); patch_triangular_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Triangle")); gtk_widget_show (patch_triangular_radiobutton); gtk_box_pack_start (GTK_BOX (hbox22), patch_triangular_radiobutton, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (patch_triangular_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (patch_triangular_radiobutton), patch_arbitrary_radiobutton_group); patch_arbitrary_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (patch_triangular_radiobutton)); patch_quadrilateral_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Quadrilateral")); gtk_widget_show (patch_quadrilateral_radiobutton); gtk_box_pack_start (GTK_BOX (hbox22), patch_quadrilateral_radiobutton, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (patch_quadrilateral_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (patch_quadrilateral_radiobutton), patch_arbitrary_radiobutton_group); patch_arbitrary_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (patch_quadrilateral_radiobutton)); patch_surface_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Surface")); gtk_widget_show (patch_surface_radiobutton); gtk_box_pack_start (GTK_BOX (hbox22), patch_surface_radiobutton, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (patch_surface_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (patch_surface_radiobutton), patch_arbitrary_radiobutton_group); patch_arbitrary_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (patch_surface_radiobutton)); label45 = gtk_label_new (_("Patch Type")); gtk_widget_show (label45); gtk_frame_set_label_widget (GTK_FRAME (patch_type_frame), label45); gtk_misc_set_padding (GTK_MISC (label45), 4, 4); patch_sm_frame = gtk_frame_new (NULL); gtk_widget_show (patch_sm_frame); gtk_box_pack_start (GTK_BOX (vbox6), patch_sm_frame, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (patch_sm_frame), 4); alignment18 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment18); gtk_container_add (GTK_CONTAINER (patch_sm_frame), alignment18); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment18), 0, 0, 12, 0); table10 = gtk_table_new (2, 2, FALSE); gtk_widget_show (table10); gtk_container_add (GTK_CONTAINER (alignment18), table10); label87 = gtk_label_new (_("Corners 1-2 sub-division (NX)")); gtk_widget_show (label87); gtk_table_attach (GTK_TABLE (table10), label87, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label87), 0.1, 0.5); label88 = gtk_label_new (_("Corners 2-3 sub-division (NY)")); gtk_widget_show (label88); gtk_table_attach (GTK_TABLE (table10), label88, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label88), 0.1, 0.5); patch_nx_spinbutton_adj = gtk_adjustment_new (8, 1, 10000, 1, 10, 0); patch_nx_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_nx_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (patch_nx_spinbutton); gtk_table_attach (GTK_TABLE (table10), patch_nx_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_nx_spinbutton), TRUE); patch_ny_spinbutton_adj = gtk_adjustment_new (8, 1, 10000, 1, 10, 0); patch_ny_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_ny_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (patch_ny_spinbutton); gtk_table_attach (GTK_TABLE (table10), patch_ny_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_ny_spinbutton), TRUE); label86 = gtk_label_new (_("Surface Sub-division")); gtk_widget_show (label86); gtk_frame_set_label_widget (GTK_FRAME (patch_sm_frame), label86); gtk_misc_set_padding (GTK_MISC (label86), 4, 4); frame13 = gtk_frame_new (NULL); gtk_widget_show (frame13); gtk_box_pack_start (GTK_BOX (vbox6), frame13, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame13), 4); alignment14 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment14); gtk_container_add (GTK_CONTAINER (frame13), alignment14); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment14), 0, 0, 12, 0); table5 = gtk_table_new (4, 3, FALSE); gtk_widget_show (table5); gtk_container_add (GTK_CONTAINER (alignment14), table5); gtk_table_set_row_spacings (GTK_TABLE (table5), 2); gtk_table_set_col_spacings (GTK_TABLE (table5), 2); patch_x1_label = gtk_label_new (_("Center - X")); gtk_widget_show (patch_x1_label); gtk_table_attach (GTK_TABLE (table5), patch_x1_label, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (patch_x1_label), 0.1, 0.5); patch_y1_label = gtk_label_new (_("Center - Y")); gtk_widget_show (patch_y1_label); gtk_table_attach (GTK_TABLE (table5), patch_y1_label, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (patch_y1_label), 0.1, 0.5); patch_z1_label = gtk_label_new (_("Center - Z")); gtk_widget_show (patch_z1_label); gtk_table_attach (GTK_TABLE (table5), patch_z1_label, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (patch_z1_label), 0.1, 0.5); patch_x1_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); patch_x1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_x1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (patch_x1_spinbutton); gtk_table_attach (GTK_TABLE (table5), patch_x1_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_x1_spinbutton), TRUE); patch_y1_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); patch_y1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_y1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (patch_y1_spinbutton); gtk_table_attach (GTK_TABLE (table5), patch_y1_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_y1_spinbutton), TRUE); patch_z1_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); patch_z1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_z1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (patch_z1_spinbutton); gtk_table_attach (GTK_TABLE (table5), patch_z1_spinbutton, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_z1_spinbutton), TRUE); patch_x2_spinbutton_adj = gtk_adjustment_new (45, -10000, 10000, 9.99999974738e-06, 10, 0); patch_x2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_x2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (patch_x2_spinbutton); gtk_table_attach (GTK_TABLE (table5), patch_x2_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_x2_spinbutton), TRUE); patch_y2_spinbutton_adj = gtk_adjustment_new (45, -10000, 10000, 9.99999974738e-06, 10, 0); patch_y2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_y2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (patch_y2_spinbutton); gtk_table_attach (GTK_TABLE (table5), patch_y2_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_y2_spinbutton), TRUE); patch_z2_spinbutton_adj = gtk_adjustment_new (0.10000000149, -10000, 10000, 9.99999974738e-06, 10, 0); patch_z2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_z2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (patch_z2_spinbutton); gtk_table_attach (GTK_TABLE (table5), patch_z2_spinbutton, 2, 3, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_z2_spinbutton), TRUE); patch_x2_label = gtk_label_new (_("Normal - Elev.")); gtk_widget_show (patch_x2_label); gtk_table_attach (GTK_TABLE (table5), patch_x2_label, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (patch_x2_label), 0.1, 0.5); patch_y2_label = gtk_label_new (_("Normal - Azim.")); gtk_widget_show (patch_y2_label); gtk_table_attach (GTK_TABLE (table5), patch_y2_label, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (patch_y2_label), 0.1, 0.5); patch_z2_label = gtk_label_new (_("Patch Area")); gtk_widget_show (patch_z2_label); gtk_table_attach (GTK_TABLE (table5), patch_z2_label, 2, 3, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (patch_z2_label), 0.1, 0.5); label46 = gtk_label_new (_("SP/SM Cards")); gtk_widget_show (label46); gtk_frame_set_label_widget (GTK_FRAME (frame13), label46); gtk_misc_set_padding (GTK_MISC (label46), 4, 4); patch_sc_frame = gtk_frame_new (NULL); gtk_widget_show (patch_sc_frame); gtk_box_pack_start (GTK_BOX (vbox6), patch_sc_frame, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (patch_sc_frame), 4); alignment15 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment15); gtk_container_add (GTK_CONTAINER (patch_sc_frame), alignment15); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment15), 0, 0, 12, 0); vbox7 = gtk_vbox_new (FALSE, 2); gtk_widget_show (vbox7); gtk_container_add (GTK_CONTAINER (alignment15), vbox7); table6 = gtk_table_new (2, 3, FALSE); gtk_widget_show (table6); gtk_box_pack_start (GTK_BOX (vbox7), table6, TRUE, TRUE, 0); gtk_table_set_row_spacings (GTK_TABLE (table6), 2); gtk_table_set_col_spacings (GTK_TABLE (table6), 2); patch_x3_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); patch_x3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_x3_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (patch_x3_spinbutton); gtk_table_attach (GTK_TABLE (table6), patch_x3_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_x3_spinbutton), TRUE); patch_y3_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); patch_y3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_y3_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (patch_y3_spinbutton); gtk_table_attach (GTK_TABLE (table6), patch_y3_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_y3_spinbutton), TRUE); patch_z3_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); patch_z3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_z3_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (patch_z3_spinbutton); gtk_table_attach (GTK_TABLE (table6), patch_z3_spinbutton, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_z3_spinbutton), TRUE); label54 = gtk_label_new (_("Corner 3 - X")); gtk_widget_show (label54); gtk_table_attach (GTK_TABLE (table6), label54, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label54), 0.1, 0.5); label57 = gtk_label_new (_("Corner 3 - Y")); gtk_widget_show (label57); gtk_table_attach (GTK_TABLE (table6), label57, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label57), 0.1, 0.5); label58 = gtk_label_new (_("Corner 3 - Z")); gtk_widget_show (label58); gtk_table_attach (GTK_TABLE (table6), label58, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label58), 0.1, 0.5); patch_sc_table = gtk_table_new (2, 3, FALSE); gtk_widget_show (patch_sc_table); gtk_box_pack_start (GTK_BOX (vbox7), patch_sc_table, TRUE, TRUE, 0); gtk_table_set_row_spacings (GTK_TABLE (patch_sc_table), 2); gtk_table_set_col_spacings (GTK_TABLE (patch_sc_table), 2); patch_x4_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); patch_x4_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_x4_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (patch_x4_spinbutton); gtk_table_attach (GTK_TABLE (patch_sc_table), patch_x4_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_x4_spinbutton), TRUE); patch_y4_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); patch_y4_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_y4_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (patch_y4_spinbutton); gtk_table_attach (GTK_TABLE (patch_sc_table), patch_y4_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_y4_spinbutton), TRUE); patch_z4_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); patch_z4_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (patch_z4_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (patch_z4_spinbutton); gtk_table_attach (GTK_TABLE (patch_sc_table), patch_z4_spinbutton, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (patch_z4_spinbutton), TRUE); label55 = gtk_label_new (_("Corner 4 - X")); gtk_widget_show (label55); gtk_table_attach (GTK_TABLE (patch_sc_table), label55, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label55), 0.1, 0.5); label56 = gtk_label_new (_("Corner 4 - Y")); gtk_widget_show (label56); gtk_table_attach (GTK_TABLE (patch_sc_table), label56, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label56), 0.1, 0.5); label59 = gtk_label_new (_("Corner 4 - Z")); gtk_widget_show (label59); gtk_table_attach (GTK_TABLE (patch_sc_table), label59, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label59), 0.1, 0.5); label47 = gtk_label_new (_("SC Card")); gtk_widget_show (label47); gtk_frame_set_label_widget (GTK_FRAME (patch_sc_frame), label47); gtk_misc_set_padding (GTK_MISC (label47), 4, 4); hbox23 = gtk_hbox_new (TRUE, 2); gtk_widget_show (hbox23); gtk_box_pack_start (GTK_BOX (vbox6), hbox23, TRUE, TRUE, 0); patch_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (patch_new_button); gtk_box_pack_start (GTK_BOX (hbox23), patch_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (patch_new_button), 2); patch_cancel_button = gtk_button_new (); gtk_widget_show (patch_cancel_button); gtk_box_pack_start (GTK_BOX (hbox23), patch_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (patch_cancel_button), 2); alignment51 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment51); gtk_container_add (GTK_CONTAINER (patch_cancel_button), alignment51); hbox49 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox49); gtk_container_add (GTK_CONTAINER (alignment51), hbox49); image71 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image71); gtk_box_pack_start (GTK_BOX (hbox49), image71, FALSE, FALSE, 0); label223 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label223); gtk_box_pack_start (GTK_BOX (hbox49), label223, FALSE, FALSE, 0); patch_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (patch_apply_button); gtk_box_pack_start (GTK_BOX (hbox23), patch_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (patch_apply_button), 2); patch_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (patch_ok_button); gtk_box_pack_start (GTK_BOX (hbox23), patch_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (patch_ok_button), 2); g_signal_connect ((gpointer) patch_editor, "destroy", G_CALLBACK (on_patch_editor_destroy), NULL); g_signal_connect ((gpointer) patch_arbitrary_radiobutton, "toggled", G_CALLBACK (on_patch_arbitrary_radiobutton_toggled), NULL); g_signal_connect ((gpointer) patch_rectangular_radiobutton, "toggled", G_CALLBACK (on_patch_rectangular_radiobutton_toggled), NULL); g_signal_connect ((gpointer) patch_triangular_radiobutton, "toggled", G_CALLBACK (on_patch_triangular_radiobutton_toggled), NULL); g_signal_connect ((gpointer) patch_quadrilateral_radiobutton, "toggled", G_CALLBACK (on_patch_quadrilateral_radiobutton_toggled), NULL); g_signal_connect ((gpointer) patch_surface_radiobutton, "toggled", G_CALLBACK (on_patch_surface_radiobutton_toggled), NULL); g_signal_connect ((gpointer) patch_nx_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_ny_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_x1_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_y1_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_z1_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_x2_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_y2_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_z2_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_x3_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_y3_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_z3_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_x4_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_y4_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_z4_spinbutton, "value_changed", G_CALLBACK (on_patch_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) patch_new_button, "clicked", G_CALLBACK (on_patch_new_button_clicked), NULL); g_signal_connect ((gpointer) patch_cancel_button, "clicked", G_CALLBACK (on_patch_cancel_button_clicked), NULL); g_signal_connect ((gpointer) patch_apply_button, "clicked", G_CALLBACK (on_patch_apply_button_clicked), NULL); g_signal_connect ((gpointer) patch_ok_button, "clicked", G_CALLBACK (on_patch_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (patch_editor, patch_editor, "patch_editor"); GLADE_HOOKUP_OBJECT (patch_editor, vbox6, "vbox6"); GLADE_HOOKUP_OBJECT (patch_editor, patch_type_frame, "patch_type_frame"); GLADE_HOOKUP_OBJECT (patch_editor, alignment13, "alignment13"); GLADE_HOOKUP_OBJECT (patch_editor, hbox22, "hbox22"); GLADE_HOOKUP_OBJECT (patch_editor, patch_arbitrary_radiobutton, "patch_arbitrary_radiobutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_rectangular_radiobutton, "patch_rectangular_radiobutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_triangular_radiobutton, "patch_triangular_radiobutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_quadrilateral_radiobutton, "patch_quadrilateral_radiobutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_surface_radiobutton, "patch_surface_radiobutton"); GLADE_HOOKUP_OBJECT (patch_editor, label45, "label45"); GLADE_HOOKUP_OBJECT (patch_editor, patch_sm_frame, "patch_sm_frame"); GLADE_HOOKUP_OBJECT (patch_editor, alignment18, "alignment18"); GLADE_HOOKUP_OBJECT (patch_editor, table10, "table10"); GLADE_HOOKUP_OBJECT (patch_editor, label87, "label87"); GLADE_HOOKUP_OBJECT (patch_editor, label88, "label88"); GLADE_HOOKUP_OBJECT (patch_editor, patch_nx_spinbutton, "patch_nx_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_ny_spinbutton, "patch_ny_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, label86, "label86"); GLADE_HOOKUP_OBJECT (patch_editor, frame13, "frame13"); GLADE_HOOKUP_OBJECT (patch_editor, alignment14, "alignment14"); GLADE_HOOKUP_OBJECT (patch_editor, table5, "table5"); GLADE_HOOKUP_OBJECT (patch_editor, patch_x1_label, "patch_x1_label"); GLADE_HOOKUP_OBJECT (patch_editor, patch_y1_label, "patch_y1_label"); GLADE_HOOKUP_OBJECT (patch_editor, patch_z1_label, "patch_z1_label"); GLADE_HOOKUP_OBJECT (patch_editor, patch_x1_spinbutton, "patch_x1_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_y1_spinbutton, "patch_y1_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_z1_spinbutton, "patch_z1_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_x2_spinbutton, "patch_x2_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_y2_spinbutton, "patch_y2_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_z2_spinbutton, "patch_z2_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_x2_label, "patch_x2_label"); GLADE_HOOKUP_OBJECT (patch_editor, patch_y2_label, "patch_y2_label"); GLADE_HOOKUP_OBJECT (patch_editor, patch_z2_label, "patch_z2_label"); GLADE_HOOKUP_OBJECT (patch_editor, label46, "label46"); GLADE_HOOKUP_OBJECT (patch_editor, patch_sc_frame, "patch_sc_frame"); GLADE_HOOKUP_OBJECT (patch_editor, alignment15, "alignment15"); GLADE_HOOKUP_OBJECT (patch_editor, vbox7, "vbox7"); GLADE_HOOKUP_OBJECT (patch_editor, table6, "table6"); GLADE_HOOKUP_OBJECT (patch_editor, patch_x3_spinbutton, "patch_x3_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_y3_spinbutton, "patch_y3_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_z3_spinbutton, "patch_z3_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, label54, "label54"); GLADE_HOOKUP_OBJECT (patch_editor, label57, "label57"); GLADE_HOOKUP_OBJECT (patch_editor, label58, "label58"); GLADE_HOOKUP_OBJECT (patch_editor, patch_sc_table, "patch_sc_table"); GLADE_HOOKUP_OBJECT (patch_editor, patch_x4_spinbutton, "patch_x4_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_y4_spinbutton, "patch_y4_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, patch_z4_spinbutton, "patch_z4_spinbutton"); GLADE_HOOKUP_OBJECT (patch_editor, label55, "label55"); GLADE_HOOKUP_OBJECT (patch_editor, label56, "label56"); GLADE_HOOKUP_OBJECT (patch_editor, label59, "label59"); GLADE_HOOKUP_OBJECT (patch_editor, label47, "label47"); GLADE_HOOKUP_OBJECT (patch_editor, hbox23, "hbox23"); GLADE_HOOKUP_OBJECT (patch_editor, patch_new_button, "patch_new_button"); GLADE_HOOKUP_OBJECT (patch_editor, patch_cancel_button, "patch_cancel_button"); GLADE_HOOKUP_OBJECT (patch_editor, alignment51, "alignment51"); GLADE_HOOKUP_OBJECT (patch_editor, hbox49, "hbox49"); GLADE_HOOKUP_OBJECT (patch_editor, image71, "image71"); GLADE_HOOKUP_OBJECT (patch_editor, label223, "label223"); GLADE_HOOKUP_OBJECT (patch_editor, patch_apply_button, "patch_apply_button"); GLADE_HOOKUP_OBJECT (patch_editor, patch_ok_button, "patch_ok_button"); return patch_editor; } GtkWidget* create_arc_editor (void) { GtkWidget *arc_editor; GtkWidget *vbox8; GtkWidget *frame14; GtkWidget *alignment16; GtkWidget *table7; GtkWidget *label66; GtkWidget *label67; GtkObject *arc_end1_spinbutton_adj; GtkWidget *arc_end1_spinbutton; GtkObject *arc_end2_spinbutton_adj; GtkWidget *arc_end2_spinbutton; GtkObject *arc_tagnum_spinbutton_adj; GtkWidget *arc_tagnum_spinbutton; GtkObject *arc_numseg_spinbutton_adj; GtkWidget *arc_numseg_spinbutton; GtkWidget *label63; GtkWidget *label64; GtkWidget *label65; GtkObject *arc_rad_spinbutton_adj; GtkWidget *arc_rad_spinbutton; GtkWidget *label69; GtkObject *arc_pcl_spinbutton_adj; GtkWidget *arc_pcl_spinbutton; GtkObject *arc_res_spinbutton_adj; GtkWidget *arc_res_spinbutton; GtkWidget *label70; GtkWidget *label68; GtkObject *arc_dia_spinbutton_adj; GtkWidget *arc_dia_spinbutton; GtkWidget *label60; GtkWidget *hbox24; GtkWidget *arc_new_button; GtkWidget *arc_cancel_button; GtkWidget *alignment52; GtkWidget *hbox50; GtkWidget *image72; GtkWidget *label224; GtkWidget *arc_apply_button; GtkWidget *arc_ok_buttonbutton; arc_editor = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (arc_editor), 4); gtk_window_set_title (GTK_WINDOW (arc_editor), _("Arc Element (GA card)")); gtk_window_set_destroy_with_parent (GTK_WINDOW (arc_editor), TRUE); vbox8 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox8); gtk_container_add (GTK_CONTAINER (arc_editor), vbox8); frame14 = gtk_frame_new (NULL); gtk_widget_show (frame14); gtk_box_pack_start (GTK_BOX (vbox8), frame14, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame14), 4); alignment16 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment16); gtk_container_add (GTK_CONTAINER (frame14), alignment16); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment16), 0, 0, 12, 0); table7 = gtk_table_new (4, 4, FALSE); gtk_widget_show (table7); gtk_container_add (GTK_CONTAINER (alignment16), table7); gtk_table_set_row_spacings (GTK_TABLE (table7), 2); gtk_table_set_col_spacings (GTK_TABLE (table7), 2); label66 = gtk_label_new (_("End 1 Angle")); gtk_widget_show (label66); gtk_table_attach (GTK_TABLE (table7), label66, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label66), 0.1, 0.5); label67 = gtk_label_new (_("End 2 Angle")); gtk_widget_show (label67); gtk_table_attach (GTK_TABLE (table7), label67, 2, 3, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label67), 0.1, 0.5); arc_end1_spinbutton_adj = gtk_adjustment_new (45, -360, 360, 9.99999974738e-06, 10, 0); arc_end1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (arc_end1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (arc_end1_spinbutton); gtk_table_attach (GTK_TABLE (table7), arc_end1_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (arc_end1_spinbutton), TRUE); arc_end2_spinbutton_adj = gtk_adjustment_new (135, -360, 360, 9.99999974738e-06, 10, 0); arc_end2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (arc_end2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (arc_end2_spinbutton); gtk_table_attach (GTK_TABLE (table7), arc_end2_spinbutton, 2, 3, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (arc_end2_spinbutton), TRUE); arc_tagnum_spinbutton_adj = gtk_adjustment_new (1, 1, 100000, 1, 10, 0); arc_tagnum_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (arc_tagnum_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (arc_tagnum_spinbutton); gtk_table_attach (GTK_TABLE (table7), arc_tagnum_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (arc_tagnum_spinbutton), TRUE); arc_numseg_spinbutton_adj = gtk_adjustment_new (15, 1, 100000, 1, 10, 0); arc_numseg_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (arc_numseg_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (arc_numseg_spinbutton); gtk_table_attach (GTK_TABLE (table7), arc_numseg_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (arc_numseg_spinbutton), TRUE); label63 = gtk_label_new (_("Tag Number")); gtk_widget_show (label63); gtk_table_attach (GTK_TABLE (table7), label63, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label63), 0.1, 0.5); label64 = gtk_label_new (_("No. Segments")); gtk_widget_show (label64); gtk_table_attach (GTK_TABLE (table7), label64, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label64), 0.1, 0.5); label65 = gtk_label_new (_("Radius from Y")); gtk_widget_show (label65); gtk_table_attach (GTK_TABLE (table7), label65, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label65), 0.1, 0.5); arc_rad_spinbutton_adj = gtk_adjustment_new (1, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); arc_rad_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (arc_rad_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (arc_rad_spinbutton); gtk_table_attach (GTK_TABLE (table7), arc_rad_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (arc_rad_spinbutton), TRUE); label69 = gtk_label_new (_("Segs % lambda")); gtk_widget_show (label69); gtk_table_attach (GTK_TABLE (table7), label69, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label69), 0.1, 0.5); arc_pcl_spinbutton_adj = gtk_adjustment_new (5, 0.0010000000475, 30, 9.99999974738e-06, 10, 0); arc_pcl_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (arc_pcl_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (arc_pcl_spinbutton); gtk_table_attach (GTK_TABLE (table7), arc_pcl_spinbutton, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (arc_pcl_spinbutton), TRUE); arc_res_spinbutton_adj = gtk_adjustment_new (0, 0, 1000000000, 9.99999974738e-06, 10, 0); arc_res_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (arc_res_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (arc_res_spinbutton); gtk_table_attach (GTK_TABLE (table7), arc_res_spinbutton, 3, 4, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (arc_res_spinbutton), TRUE); label70 = gtk_label_new (_("Conductivity S/m")); gtk_widget_show (label70); gtk_table_attach (GTK_TABLE (table7), label70, 3, 4, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label70), 0.1, 0.5); label68 = gtk_label_new (_("Wire Diameter")); gtk_widget_show (label68); gtk_table_attach (GTK_TABLE (table7), label68, 3, 4, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label68), 0.1, 0.5); arc_dia_spinbutton_adj = gtk_adjustment_new (0.00300000002608, 9.99999974738e-06, 100, 9.99999974738e-06, 10, 0); arc_dia_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (arc_dia_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (arc_dia_spinbutton); gtk_table_attach (GTK_TABLE (table7), arc_dia_spinbutton, 3, 4, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (arc_dia_spinbutton), TRUE); label60 = gtk_label_new (_("Wire Arc Data")); gtk_widget_show (label60); gtk_frame_set_label_widget (GTK_FRAME (frame14), label60); gtk_misc_set_padding (GTK_MISC (label60), 4, 4); hbox24 = gtk_hbox_new (TRUE, 2); gtk_widget_show (hbox24); gtk_box_pack_start (GTK_BOX (vbox8), hbox24, TRUE, TRUE, 0); arc_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (arc_new_button); gtk_box_pack_start (GTK_BOX (hbox24), arc_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (arc_new_button), 2); arc_cancel_button = gtk_button_new (); gtk_widget_show (arc_cancel_button); gtk_box_pack_start (GTK_BOX (hbox24), arc_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (arc_cancel_button), 2); alignment52 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment52); gtk_container_add (GTK_CONTAINER (arc_cancel_button), alignment52); hbox50 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox50); gtk_container_add (GTK_CONTAINER (alignment52), hbox50); image72 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image72); gtk_box_pack_start (GTK_BOX (hbox50), image72, FALSE, FALSE, 0); label224 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label224); gtk_box_pack_start (GTK_BOX (hbox50), label224, FALSE, FALSE, 0); arc_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (arc_apply_button); gtk_box_pack_start (GTK_BOX (hbox24), arc_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (arc_apply_button), 2); arc_ok_buttonbutton = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (arc_ok_buttonbutton); gtk_box_pack_start (GTK_BOX (hbox24), arc_ok_buttonbutton, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (arc_ok_buttonbutton), 2); g_signal_connect ((gpointer) arc_editor, "destroy", G_CALLBACK (on_arc_editor_destroy), NULL); g_signal_connect ((gpointer) arc_end1_spinbutton, "value_changed", G_CALLBACK (on_arc_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) arc_end2_spinbutton, "value_changed", G_CALLBACK (on_arc_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) arc_tagnum_spinbutton, "value_changed", G_CALLBACK (on_arc_tagnum_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) arc_numseg_spinbutton, "value_changed", G_CALLBACK (on_arc_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) arc_rad_spinbutton, "value_changed", G_CALLBACK (on_arc_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) arc_pcl_spinbutton, "value_changed", G_CALLBACK (on_arc_pcl_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) arc_res_spinbutton, "value_changed", G_CALLBACK (on_arc_res_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) arc_dia_spinbutton, "value_changed", G_CALLBACK (on_arc_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) arc_new_button, "clicked", G_CALLBACK (on_arc_new_button_clicked), NULL); g_signal_connect ((gpointer) arc_cancel_button, "clicked", G_CALLBACK (on_arc_cancel_button_clicked), NULL); g_signal_connect ((gpointer) arc_apply_button, "clicked", G_CALLBACK (on_arc_apply_button_clicked), NULL); g_signal_connect ((gpointer) arc_ok_buttonbutton, "clicked", G_CALLBACK (on_arc_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (arc_editor, arc_editor, "arc_editor"); GLADE_HOOKUP_OBJECT (arc_editor, vbox8, "vbox8"); GLADE_HOOKUP_OBJECT (arc_editor, frame14, "frame14"); GLADE_HOOKUP_OBJECT (arc_editor, alignment16, "alignment16"); GLADE_HOOKUP_OBJECT (arc_editor, table7, "table7"); GLADE_HOOKUP_OBJECT (arc_editor, label66, "label66"); GLADE_HOOKUP_OBJECT (arc_editor, label67, "label67"); GLADE_HOOKUP_OBJECT (arc_editor, arc_end1_spinbutton, "arc_end1_spinbutton"); GLADE_HOOKUP_OBJECT (arc_editor, arc_end2_spinbutton, "arc_end2_spinbutton"); GLADE_HOOKUP_OBJECT (arc_editor, arc_tagnum_spinbutton, "arc_tagnum_spinbutton"); GLADE_HOOKUP_OBJECT (arc_editor, arc_numseg_spinbutton, "arc_numseg_spinbutton"); GLADE_HOOKUP_OBJECT (arc_editor, label63, "label63"); GLADE_HOOKUP_OBJECT (arc_editor, label64, "label64"); GLADE_HOOKUP_OBJECT (arc_editor, label65, "label65"); GLADE_HOOKUP_OBJECT (arc_editor, arc_rad_spinbutton, "arc_rad_spinbutton"); GLADE_HOOKUP_OBJECT (arc_editor, label69, "label69"); GLADE_HOOKUP_OBJECT (arc_editor, arc_pcl_spinbutton, "arc_pcl_spinbutton"); GLADE_HOOKUP_OBJECT (arc_editor, arc_res_spinbutton, "arc_res_spinbutton"); GLADE_HOOKUP_OBJECT (arc_editor, label70, "label70"); GLADE_HOOKUP_OBJECT (arc_editor, label68, "label68"); GLADE_HOOKUP_OBJECT (arc_editor, arc_dia_spinbutton, "arc_dia_spinbutton"); GLADE_HOOKUP_OBJECT (arc_editor, label60, "label60"); GLADE_HOOKUP_OBJECT (arc_editor, hbox24, "hbox24"); GLADE_HOOKUP_OBJECT (arc_editor, arc_new_button, "arc_new_button"); GLADE_HOOKUP_OBJECT (arc_editor, arc_cancel_button, "arc_cancel_button"); GLADE_HOOKUP_OBJECT (arc_editor, alignment52, "alignment52"); GLADE_HOOKUP_OBJECT (arc_editor, hbox50, "hbox50"); GLADE_HOOKUP_OBJECT (arc_editor, image72, "image72"); GLADE_HOOKUP_OBJECT (arc_editor, label224, "label224"); GLADE_HOOKUP_OBJECT (arc_editor, arc_apply_button, "arc_apply_button"); GLADE_HOOKUP_OBJECT (arc_editor, arc_ok_buttonbutton, "arc_ok_buttonbutton"); return arc_editor; } GtkWidget* create_transform_editor (void) { GtkWidget *transform_editor; GtkWidget *vbox9; GtkWidget *frame15; GtkWidget *alignment17; GtkWidget *table8; GtkWidget *label62; GtkWidget *label98; GtkWidget *label99; GtkWidget *label100; GtkWidget *label101; GtkWidget *label102; GtkWidget *label103; GtkWidget *label104; GtkWidget *label105; GtkObject *transform_my_spinbutton_adj; GtkWidget *transform_my_spinbutton; GtkObject *transform_mx_spinbutton_adj; GtkWidget *transform_mx_spinbutton; GtkObject *transform_mz_spinbutton_adj; GtkWidget *transform_mz_spinbutton; GtkObject *transform_rx_spinbutton_adj; GtkWidget *transform_rx_spinbutton; GtkObject *transform_taginc_spinbutton_adj; GtkWidget *transform_taginc_spinbutton; GtkObject *transform_new_spinbutton_adj; GtkWidget *transform_new_spinbutton; GtkObject *transform_start_spinbutton_adj; GtkWidget *transform_start_spinbutton; GtkObject *transform_ry_spinbutton_adj; GtkWidget *transform_ry_spinbutton; GtkObject *transform_rz_spinbutton_adj; GtkWidget *transform_rz_spinbutton; GtkWidget *label61; GtkWidget *hbox25; GtkWidget *transform_new_button; GtkWidget *transform_cancel_button; GtkWidget *alignment53; GtkWidget *hbox51; GtkWidget *image73; GtkWidget *label225; GtkWidget *transform_apply_button; GtkWidget *transform_ok_button; transform_editor = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (transform_editor), 4); gtk_window_set_title (GTK_WINDOW (transform_editor), _("Co-ordinate Transformation (GM card)")); vbox9 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox9); gtk_container_add (GTK_CONTAINER (transform_editor), vbox9); frame15 = gtk_frame_new (NULL); gtk_widget_show (frame15); gtk_box_pack_start (GTK_BOX (vbox9), frame15, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame15), 4); alignment17 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment17); gtk_container_add (GTK_CONTAINER (frame15), alignment17); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment17), 0, 0, 12, 0); table8 = gtk_table_new (6, 3, FALSE); gtk_widget_show (table8); gtk_container_add (GTK_CONTAINER (alignment17), table8); gtk_table_set_row_spacings (GTK_TABLE (table8), 2); gtk_table_set_col_spacings (GTK_TABLE (table8), 2); label62 = gtk_label_new (_("Tag Increment")); gtk_widget_show (label62); gtk_table_attach (GTK_TABLE (table8), label62, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label62), 0.1, 0.5); label98 = gtk_label_new (_("New Structures")); gtk_widget_show (label98); gtk_table_attach (GTK_TABLE (table8), label98, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label98), 0.1, 0.5); label99 = gtk_label_new (_("Start From Tag")); gtk_widget_show (label99); gtk_table_attach (GTK_TABLE (table8), label99, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label99), 0.1, 0.5); label100 = gtk_label_new (_("Rotate about X")); gtk_widget_show (label100); gtk_table_attach (GTK_TABLE (table8), label100, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label100), 0.1, 0.5); label101 = gtk_label_new (_("Rotate about Y")); gtk_widget_show (label101); gtk_table_attach (GTK_TABLE (table8), label101, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label101), 0.1, 0.5); label102 = gtk_label_new (_("Rotate about Z")); gtk_widget_show (label102); gtk_table_attach (GTK_TABLE (table8), label102, 2, 3, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label102), 0.1, 0.5); label103 = gtk_label_new (_("Move along X")); gtk_widget_show (label103); gtk_table_attach (GTK_TABLE (table8), label103, 0, 1, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label103), 0.1, 0.5); label104 = gtk_label_new (_("Move along Y")); gtk_widget_show (label104); gtk_table_attach (GTK_TABLE (table8), label104, 1, 2, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label104), 0.1, 0.5); label105 = gtk_label_new (_("Move along Z")); gtk_widget_show (label105); gtk_table_attach (GTK_TABLE (table8), label105, 2, 3, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label105), 0.1, 0.5); transform_my_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); transform_my_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (transform_my_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (transform_my_spinbutton); gtk_table_attach (GTK_TABLE (table8), transform_my_spinbutton, 1, 2, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (transform_my_spinbutton), TRUE); transform_mx_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); transform_mx_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (transform_mx_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (transform_mx_spinbutton); gtk_table_attach (GTK_TABLE (table8), transform_mx_spinbutton, 0, 1, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (transform_mx_spinbutton), TRUE); transform_mz_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); transform_mz_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (transform_mz_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (transform_mz_spinbutton); gtk_table_attach (GTK_TABLE (table8), transform_mz_spinbutton, 2, 3, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (transform_mz_spinbutton), TRUE); transform_rx_spinbutton_adj = gtk_adjustment_new (0, -360, 360, 9.99999974738e-06, 10, 0); transform_rx_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (transform_rx_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (transform_rx_spinbutton); gtk_table_attach (GTK_TABLE (table8), transform_rx_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (transform_rx_spinbutton), TRUE); transform_taginc_spinbutton_adj = gtk_adjustment_new (0, 0, 100000, 1, 10, 0); transform_taginc_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (transform_taginc_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (transform_taginc_spinbutton); gtk_table_attach (GTK_TABLE (table8), transform_taginc_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (transform_taginc_spinbutton), TRUE); transform_new_spinbutton_adj = gtk_adjustment_new (0, 0, 100000, 1, 10, 0); transform_new_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (transform_new_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (transform_new_spinbutton); gtk_table_attach (GTK_TABLE (table8), transform_new_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (transform_new_spinbutton), TRUE); transform_start_spinbutton_adj = gtk_adjustment_new (0, 0, 10000, 1, 10, 0); transform_start_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (transform_start_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (transform_start_spinbutton); gtk_table_attach (GTK_TABLE (table8), transform_start_spinbutton, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (transform_start_spinbutton), TRUE); transform_ry_spinbutton_adj = gtk_adjustment_new (0, -360, 360, 9.99999974738e-06, 10, 0); transform_ry_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (transform_ry_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (transform_ry_spinbutton); gtk_table_attach (GTK_TABLE (table8), transform_ry_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (transform_ry_spinbutton), TRUE); transform_rz_spinbutton_adj = gtk_adjustment_new (0, -360, 360, 9.99999974738e-06, 10, 0); transform_rz_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (transform_rz_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (transform_rz_spinbutton); gtk_table_attach (GTK_TABLE (table8), transform_rz_spinbutton, 2, 3, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (transform_rz_spinbutton), TRUE); label61 = gtk_label_new (_("Co-ordinate Transformation Data")); gtk_widget_show (label61); gtk_frame_set_label_widget (GTK_FRAME (frame15), label61); gtk_misc_set_padding (GTK_MISC (label61), 4, 4); hbox25 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox25); gtk_box_pack_start (GTK_BOX (vbox9), hbox25, TRUE, TRUE, 0); transform_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (transform_new_button); gtk_box_pack_start (GTK_BOX (hbox25), transform_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (transform_new_button), 2); transform_cancel_button = gtk_button_new (); gtk_widget_show (transform_cancel_button); gtk_box_pack_start (GTK_BOX (hbox25), transform_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (transform_cancel_button), 2); alignment53 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment53); gtk_container_add (GTK_CONTAINER (transform_cancel_button), alignment53); hbox51 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox51); gtk_container_add (GTK_CONTAINER (alignment53), hbox51); image73 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image73); gtk_box_pack_start (GTK_BOX (hbox51), image73, FALSE, FALSE, 0); label225 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label225); gtk_box_pack_start (GTK_BOX (hbox51), label225, FALSE, FALSE, 0); transform_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (transform_apply_button); gtk_box_pack_start (GTK_BOX (hbox25), transform_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (transform_apply_button), 2); transform_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (transform_ok_button); gtk_box_pack_start (GTK_BOX (hbox25), transform_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (transform_ok_button), 2); g_signal_connect ((gpointer) transform_editor, "destroy", G_CALLBACK (on_transform_editor_destroy), NULL); g_signal_connect ((gpointer) transform_my_spinbutton, "value_changed", G_CALLBACK (on_transform_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) transform_mx_spinbutton, "value_changed", G_CALLBACK (on_transform_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) transform_mz_spinbutton, "value_changed", G_CALLBACK (on_transform_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) transform_rx_spinbutton, "value_changed", G_CALLBACK (on_transform_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) transform_taginc_spinbutton, "value_changed", G_CALLBACK (on_transform_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) transform_new_spinbutton, "value_changed", G_CALLBACK (on_transform_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) transform_start_spinbutton, "value_changed", G_CALLBACK (on_transform_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) transform_ry_spinbutton, "value_changed", G_CALLBACK (on_transform_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) transform_rz_spinbutton, "value_changed", G_CALLBACK (on_transform_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) transform_new_button, "clicked", G_CALLBACK (on_transform_new_button_clicked), NULL); g_signal_connect ((gpointer) transform_cancel_button, "clicked", G_CALLBACK (on_transform_cancel_button_clicked), NULL); g_signal_connect ((gpointer) transform_apply_button, "clicked", G_CALLBACK (on_transform_apply_button_clicked), NULL); g_signal_connect ((gpointer) transform_ok_button, "clicked", G_CALLBACK (on_transform_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (transform_editor, transform_editor, "transform_editor"); GLADE_HOOKUP_OBJECT (transform_editor, vbox9, "vbox9"); GLADE_HOOKUP_OBJECT (transform_editor, frame15, "frame15"); GLADE_HOOKUP_OBJECT (transform_editor, alignment17, "alignment17"); GLADE_HOOKUP_OBJECT (transform_editor, table8, "table8"); GLADE_HOOKUP_OBJECT (transform_editor, label62, "label62"); GLADE_HOOKUP_OBJECT (transform_editor, label98, "label98"); GLADE_HOOKUP_OBJECT (transform_editor, label99, "label99"); GLADE_HOOKUP_OBJECT (transform_editor, label100, "label100"); GLADE_HOOKUP_OBJECT (transform_editor, label101, "label101"); GLADE_HOOKUP_OBJECT (transform_editor, label102, "label102"); GLADE_HOOKUP_OBJECT (transform_editor, label103, "label103"); GLADE_HOOKUP_OBJECT (transform_editor, label104, "label104"); GLADE_HOOKUP_OBJECT (transform_editor, label105, "label105"); GLADE_HOOKUP_OBJECT (transform_editor, transform_my_spinbutton, "transform_my_spinbutton"); GLADE_HOOKUP_OBJECT (transform_editor, transform_mx_spinbutton, "transform_mx_spinbutton"); GLADE_HOOKUP_OBJECT (transform_editor, transform_mz_spinbutton, "transform_mz_spinbutton"); GLADE_HOOKUP_OBJECT (transform_editor, transform_rx_spinbutton, "transform_rx_spinbutton"); GLADE_HOOKUP_OBJECT (transform_editor, transform_taginc_spinbutton, "transform_taginc_spinbutton"); GLADE_HOOKUP_OBJECT (transform_editor, transform_new_spinbutton, "transform_new_spinbutton"); GLADE_HOOKUP_OBJECT (transform_editor, transform_start_spinbutton, "transform_start_spinbutton"); GLADE_HOOKUP_OBJECT (transform_editor, transform_ry_spinbutton, "transform_ry_spinbutton"); GLADE_HOOKUP_OBJECT (transform_editor, transform_rz_spinbutton, "transform_rz_spinbutton"); GLADE_HOOKUP_OBJECT (transform_editor, label61, "label61"); GLADE_HOOKUP_OBJECT (transform_editor, hbox25, "hbox25"); GLADE_HOOKUP_OBJECT (transform_editor, transform_new_button, "transform_new_button"); GLADE_HOOKUP_OBJECT (transform_editor, transform_cancel_button, "transform_cancel_button"); GLADE_HOOKUP_OBJECT (transform_editor, alignment53, "alignment53"); GLADE_HOOKUP_OBJECT (transform_editor, hbox51, "hbox51"); GLADE_HOOKUP_OBJECT (transform_editor, image73, "image73"); GLADE_HOOKUP_OBJECT (transform_editor, label225, "label225"); GLADE_HOOKUP_OBJECT (transform_editor, transform_apply_button, "transform_apply_button"); GLADE_HOOKUP_OBJECT (transform_editor, transform_ok_button, "transform_ok_button"); return transform_editor; } GtkWidget* create_helix_editor (void) { GtkWidget *helix_editor; GtkWidget *vbox10; GtkWidget *frame16; GtkWidget *table9; GtkWidget *label72; GtkWidget *label73; GtkWidget *label75; GtkWidget *label76; GtkWidget *label77; GtkWidget *label78; GtkWidget *label79; GtkWidget *label80; GtkObject *helix_tagnum_spinbutton_adj; GtkWidget *helix_tagnum_spinbutton; GtkObject *helix_numseg_spinbutton_adj; GtkWidget *helix_numseg_spinbutton; GtkObject *helix_pcl_spinbutton_adj; GtkWidget *helix_pcl_spinbutton; GtkObject *helix_tspace_spinbutton_adj; GtkWidget *helix_tspace_spinbutton; GtkObject *helix_len_spinbutton_adj; GtkWidget *helix_len_spinbutton; GtkObject *helix_radxzo_spinbutton_adj; GtkWidget *helix_radxzo_spinbutton; GtkObject *helix_dia_spinbutton_adj; GtkWidget *helix_dia_spinbutton; GtkObject *helix_radyzhl_spinbutton_adj; GtkWidget *helix_radyzhl_spinbutton; GtkObject *helix_radxzhl_spinbutton_adj; GtkWidget *helix_radxzhl_spinbutton; GtkWidget *label81; GtkObject *helix_nturns_spinbutton_adj; GtkWidget *helix_nturns_spinbutton; GtkWidget *label82; GtkWidget *label83; GtkObject *helix_radyzo_spinbutton_adj; GtkWidget *helix_radyzo_spinbutton; GtkWidget *label84; GtkObject *helix_res_spinbutton_adj; GtkWidget *helix_res_spinbutton; GtkWidget *helix_linkzo_radiobutton; GSList *helix_linkzo_radiobutton_group = NULL; GtkWidget *helix_linkzhl_radiobutton; GtkWidget *helix_linkall_radiobutton; GtkWidget *helix_lh_checkbutton; GtkWidget *label85; GtkWidget *hbox26; GtkWidget *helix_new_button; GtkWidget *helix_cancel_button; GtkWidget *alignment54; GtkWidget *hbox52; GtkWidget *image74; GtkWidget *label226; GtkWidget *helix_apply_button; GtkWidget *helix_ok_button; helix_editor = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (helix_editor), 4); gtk_window_set_title (GTK_WINDOW (helix_editor), _("Helical Element (GA card)")); vbox10 = gtk_vbox_new (FALSE, 2); gtk_widget_show (vbox10); gtk_container_add (GTK_CONTAINER (helix_editor), vbox10); frame16 = gtk_frame_new (NULL); gtk_widget_show (frame16); gtk_box_pack_start (GTK_BOX (vbox10), frame16, TRUE, TRUE, 2); gtk_container_set_border_width (GTK_CONTAINER (frame16), 4); table9 = gtk_table_new (7, 4, FALSE); gtk_widget_show (table9); gtk_container_add (GTK_CONTAINER (frame16), table9); gtk_table_set_row_spacings (GTK_TABLE (table9), 2); gtk_table_set_col_spacings (GTK_TABLE (table9), 2); label72 = gtk_label_new (_("Segments/Turn")); gtk_widget_show (label72); gtk_table_attach (GTK_TABLE (table9), label72, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label72), 0.1, 0.5); label73 = gtk_label_new (_("Segs % lambda")); gtk_widget_show (label73); gtk_table_attach (GTK_TABLE (table9), label73, 2, 3, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label73), 0.1, 0.5); label75 = gtk_label_new (_("Turns Spacing")); gtk_widget_show (label75); gtk_table_attach (GTK_TABLE (table9), label75, 0, 1, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label75), 0.1, 0.5); label76 = gtk_label_new (_("Helix Length")); gtk_widget_show (label76); gtk_table_attach (GTK_TABLE (table9), label76, 1, 2, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); GTK_WIDGET_SET_FLAGS (label76, GTK_CAN_FOCUS); gtk_label_set_selectable (GTK_LABEL (label76), TRUE); gtk_misc_set_alignment (GTK_MISC (label76), 0.1, 0.5); label77 = gtk_label_new (_("Radius @ X,Z=0")); gtk_widget_show (label77); gtk_table_attach (GTK_TABLE (table9), label77, 2, 3, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label77), 0.1, 0.5); label78 = gtk_label_new (_("Rad. @ X,Z=HL")); gtk_widget_show (label78); gtk_table_attach (GTK_TABLE (table9), label78, 0, 1, 5, 6, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label78), 0.1, 0.5); label79 = gtk_label_new (_("Rad. @ Y,Z=HL")); gtk_widget_show (label79); gtk_table_attach (GTK_TABLE (table9), label79, 1, 2, 5, 6, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label79), 0.1, 0.5); label80 = gtk_label_new (_("Wire Diameter")); gtk_widget_show (label80); gtk_table_attach (GTK_TABLE (table9), label80, 2, 3, 5, 6, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label80), 0.1, 0.5); helix_tagnum_spinbutton_adj = gtk_adjustment_new (1, 1, 100000, 1, 10, 0); helix_tagnum_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (helix_tagnum_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (helix_tagnum_spinbutton); gtk_table_attach (GTK_TABLE (table9), helix_tagnum_spinbutton, 0, 1, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (helix_tagnum_spinbutton), TRUE); helix_numseg_spinbutton_adj = gtk_adjustment_new (8, 1, 100000, 1, 10, 0); helix_numseg_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (helix_numseg_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (helix_numseg_spinbutton); gtk_table_attach (GTK_TABLE (table9), helix_numseg_spinbutton, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (helix_numseg_spinbutton), TRUE); helix_pcl_spinbutton_adj = gtk_adjustment_new (5, 0.0010000000475, 30, 9.99999974738e-06, 10, 0); helix_pcl_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (helix_pcl_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (helix_pcl_spinbutton); gtk_table_attach (GTK_TABLE (table9), helix_pcl_spinbutton, 2, 3, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (helix_pcl_spinbutton), TRUE); helix_tspace_spinbutton_adj = gtk_adjustment_new (1, 0, 10000, 9.99999974738e-06, 10, 0); helix_tspace_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (helix_tspace_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (helix_tspace_spinbutton); gtk_table_attach (GTK_TABLE (table9), helix_tspace_spinbutton, 0, 1, 4, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (helix_tspace_spinbutton), TRUE); helix_len_spinbutton_adj = gtk_adjustment_new (5, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); helix_len_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (helix_len_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (helix_len_spinbutton); gtk_table_attach (GTK_TABLE (table9), helix_len_spinbutton, 1, 2, 4, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (helix_len_spinbutton), TRUE); helix_radxzo_spinbutton_adj = gtk_adjustment_new (1, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); helix_radxzo_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (helix_radxzo_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (helix_radxzo_spinbutton); gtk_table_attach (GTK_TABLE (table9), helix_radxzo_spinbutton, 2, 3, 4, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (helix_radxzo_spinbutton), TRUE); helix_dia_spinbutton_adj = gtk_adjustment_new (0.00300000002608, 9.99999974738e-06, 100, 9.99999974738e-06, 10, 0); helix_dia_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (helix_dia_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (helix_dia_spinbutton); gtk_table_attach (GTK_TABLE (table9), helix_dia_spinbutton, 2, 3, 6, 7, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (helix_dia_spinbutton), TRUE); helix_radyzhl_spinbutton_adj = gtk_adjustment_new (1, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); helix_radyzhl_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (helix_radyzhl_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (helix_radyzhl_spinbutton); gtk_table_attach (GTK_TABLE (table9), helix_radyzhl_spinbutton, 1, 2, 6, 7, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (helix_radyzhl_spinbutton), TRUE); helix_radxzhl_spinbutton_adj = gtk_adjustment_new (1, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); helix_radxzhl_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (helix_radxzhl_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (helix_radxzhl_spinbutton); gtk_table_attach (GTK_TABLE (table9), helix_radxzhl_spinbutton, 0, 1, 6, 7, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (helix_radxzhl_spinbutton), TRUE); label81 = gtk_label_new (_("Tag Number")); gtk_widget_show (label81); gtk_table_attach (GTK_TABLE (table9), label81, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label81), 0.1, 0.5); helix_nturns_spinbutton_adj = gtk_adjustment_new (8, 0.10000000149, 10000, 9.99999974738e-06, 10, 0); helix_nturns_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (helix_nturns_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (helix_nturns_spinbutton); gtk_table_attach (GTK_TABLE (table9), helix_nturns_spinbutton, 3, 4, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (helix_nturns_spinbutton), TRUE); label82 = gtk_label_new (_("Num. of Turns")); gtk_widget_show (label82); gtk_table_attach (GTK_TABLE (table9), label82, 3, 4, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label82), 0.1, 0.5); label83 = gtk_label_new (_("Radius @ Y,Z=0")); gtk_widget_show (label83); gtk_table_attach (GTK_TABLE (table9), label83, 3, 4, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label83), 0.1, 0.5); helix_radyzo_spinbutton_adj = gtk_adjustment_new (1, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); helix_radyzo_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (helix_radyzo_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (helix_radyzo_spinbutton); gtk_table_attach (GTK_TABLE (table9), helix_radyzo_spinbutton, 3, 4, 4, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (helix_radyzo_spinbutton), TRUE); label84 = gtk_label_new (_("Conductivity S/m")); gtk_widget_show (label84); gtk_table_attach (GTK_TABLE (table9), label84, 3, 4, 5, 6, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label84), 0.1, 0.5); helix_res_spinbutton_adj = gtk_adjustment_new (0, 0, 1000000000, 9.99999974738e-06, 10, 0); helix_res_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (helix_res_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (helix_res_spinbutton); gtk_table_attach (GTK_TABLE (table9), helix_res_spinbutton, 3, 4, 6, 7, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (helix_res_spinbutton), TRUE); helix_linkzo_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Link @ Z=0")); gtk_widget_show (helix_linkzo_radiobutton); gtk_table_attach (GTK_TABLE (table9), helix_linkzo_radiobutton, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (helix_linkzo_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (helix_linkzo_radiobutton), helix_linkzo_radiobutton_group); helix_linkzo_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (helix_linkzo_radiobutton)); helix_linkzhl_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Link @ Z=HL")); gtk_widget_show (helix_linkzhl_radiobutton); gtk_table_attach (GTK_TABLE (table9), helix_linkzhl_radiobutton, 3, 4, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (helix_linkzhl_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (helix_linkzhl_radiobutton), helix_linkzo_radiobutton_group); helix_linkzo_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (helix_linkzhl_radiobutton)); helix_linkall_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Link all Radii")); gtk_widget_show (helix_linkall_radiobutton); gtk_table_attach (GTK_TABLE (table9), helix_linkall_radiobutton, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (helix_linkall_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (helix_linkall_radiobutton), helix_linkzo_radiobutton_group); helix_linkzo_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (helix_linkall_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (helix_linkall_radiobutton), TRUE); helix_lh_checkbutton = gtk_check_button_new_with_mnemonic (_("Left Hand")); gtk_widget_show (helix_lh_checkbutton); gtk_table_attach (GTK_TABLE (table9), helix_lh_checkbutton, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (helix_lh_checkbutton), 2); label85 = gtk_label_new (_("GH Card")); gtk_widget_show (label85); gtk_frame_set_label_widget (GTK_FRAME (frame16), label85); gtk_misc_set_padding (GTK_MISC (label85), 4, 4); hbox26 = gtk_hbox_new (TRUE, 2); gtk_widget_show (hbox26); gtk_box_pack_start (GTK_BOX (vbox10), hbox26, TRUE, TRUE, 0); helix_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (helix_new_button); gtk_box_pack_start (GTK_BOX (hbox26), helix_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (helix_new_button), 2); GTK_WIDGET_SET_FLAGS (helix_new_button, GTK_CAN_DEFAULT); helix_cancel_button = gtk_button_new (); gtk_widget_show (helix_cancel_button); gtk_box_pack_start (GTK_BOX (hbox26), helix_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (helix_cancel_button), 2); GTK_WIDGET_SET_FLAGS (helix_cancel_button, GTK_CAN_DEFAULT); alignment54 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment54); gtk_container_add (GTK_CONTAINER (helix_cancel_button), alignment54); hbox52 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox52); gtk_container_add (GTK_CONTAINER (alignment54), hbox52); image74 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image74); gtk_box_pack_start (GTK_BOX (hbox52), image74, FALSE, FALSE, 0); label226 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label226); gtk_box_pack_start (GTK_BOX (hbox52), label226, FALSE, FALSE, 0); helix_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (helix_apply_button); gtk_box_pack_start (GTK_BOX (hbox26), helix_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (helix_apply_button), 2); GTK_WIDGET_SET_FLAGS (helix_apply_button, GTK_CAN_DEFAULT); helix_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (helix_ok_button); gtk_box_pack_start (GTK_BOX (hbox26), helix_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (helix_ok_button), 2); GTK_WIDGET_SET_FLAGS (helix_ok_button, GTK_CAN_DEFAULT); g_signal_connect ((gpointer) helix_editor, "destroy", G_CALLBACK (on_helix_editor_destroy), NULL); g_signal_connect ((gpointer) helix_tagnum_spinbutton, "value_changed", G_CALLBACK (on_helix_tagnum_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) helix_numseg_spinbutton, "value_changed", G_CALLBACK (on_helix_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) helix_pcl_spinbutton, "value_changed", G_CALLBACK (on_helix_pcl_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) helix_tspace_spinbutton, "value_changed", G_CALLBACK (on_helix_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) helix_len_spinbutton, "value_changed", G_CALLBACK (on_helix_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) helix_radxzo_spinbutton, "value_changed", G_CALLBACK (on_helix_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) helix_dia_spinbutton, "value_changed", G_CALLBACK (on_helix_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) helix_radyzhl_spinbutton, "value_changed", G_CALLBACK (on_helix_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) helix_radxzhl_spinbutton, "value_changed", G_CALLBACK (on_helix_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) helix_nturns_spinbutton, "value_changed", G_CALLBACK (on_helix_nturns_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) helix_radyzo_spinbutton, "value_changed", G_CALLBACK (on_helix_data_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) helix_res_spinbutton, "value_changed", G_CALLBACK (on_helix_res_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) helix_linkzo_radiobutton, "toggled", G_CALLBACK (on_helix_linkzo_radiobutton_toggled), NULL); g_signal_connect ((gpointer) helix_linkzhl_radiobutton, "toggled", G_CALLBACK (on_helix_linkzhl_radiobutton_toggled), NULL); g_signal_connect ((gpointer) helix_linkall_radiobutton, "toggled", G_CALLBACK (on_helix_linkall_radiobutton_toggled), NULL); g_signal_connect ((gpointer) helix_lh_checkbutton, "toggled", G_CALLBACK (on_helix_lh_checkbutton_toggled), NULL); g_signal_connect ((gpointer) helix_new_button, "clicked", G_CALLBACK (on_helix_new_button_clicked), NULL); g_signal_connect ((gpointer) helix_cancel_button, "clicked", G_CALLBACK (on_helix_cancel_button_clicked), NULL); g_signal_connect ((gpointer) helix_apply_button, "clicked", G_CALLBACK (on_helix_apply_button_clicked), NULL); g_signal_connect ((gpointer) helix_ok_button, "clicked", G_CALLBACK (on_helix_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (helix_editor, helix_editor, "helix_editor"); GLADE_HOOKUP_OBJECT (helix_editor, vbox10, "vbox10"); GLADE_HOOKUP_OBJECT (helix_editor, frame16, "frame16"); GLADE_HOOKUP_OBJECT (helix_editor, table9, "table9"); GLADE_HOOKUP_OBJECT (helix_editor, label72, "label72"); GLADE_HOOKUP_OBJECT (helix_editor, label73, "label73"); GLADE_HOOKUP_OBJECT (helix_editor, label75, "label75"); GLADE_HOOKUP_OBJECT (helix_editor, label76, "label76"); GLADE_HOOKUP_OBJECT (helix_editor, label77, "label77"); GLADE_HOOKUP_OBJECT (helix_editor, label78, "label78"); GLADE_HOOKUP_OBJECT (helix_editor, label79, "label79"); GLADE_HOOKUP_OBJECT (helix_editor, label80, "label80"); GLADE_HOOKUP_OBJECT (helix_editor, helix_tagnum_spinbutton, "helix_tagnum_spinbutton"); GLADE_HOOKUP_OBJECT (helix_editor, helix_numseg_spinbutton, "helix_numseg_spinbutton"); GLADE_HOOKUP_OBJECT (helix_editor, helix_pcl_spinbutton, "helix_pcl_spinbutton"); GLADE_HOOKUP_OBJECT (helix_editor, helix_tspace_spinbutton, "helix_tspace_spinbutton"); GLADE_HOOKUP_OBJECT (helix_editor, helix_len_spinbutton, "helix_len_spinbutton"); GLADE_HOOKUP_OBJECT (helix_editor, helix_radxzo_spinbutton, "helix_radxzo_spinbutton"); GLADE_HOOKUP_OBJECT (helix_editor, helix_dia_spinbutton, "helix_dia_spinbutton"); GLADE_HOOKUP_OBJECT (helix_editor, helix_radyzhl_spinbutton, "helix_radyzhl_spinbutton"); GLADE_HOOKUP_OBJECT (helix_editor, helix_radxzhl_spinbutton, "helix_radxzhl_spinbutton"); GLADE_HOOKUP_OBJECT (helix_editor, label81, "label81"); GLADE_HOOKUP_OBJECT (helix_editor, helix_nturns_spinbutton, "helix_nturns_spinbutton"); GLADE_HOOKUP_OBJECT (helix_editor, label82, "label82"); GLADE_HOOKUP_OBJECT (helix_editor, label83, "label83"); GLADE_HOOKUP_OBJECT (helix_editor, helix_radyzo_spinbutton, "helix_radyzo_spinbutton"); GLADE_HOOKUP_OBJECT (helix_editor, label84, "label84"); GLADE_HOOKUP_OBJECT (helix_editor, helix_res_spinbutton, "helix_res_spinbutton"); GLADE_HOOKUP_OBJECT (helix_editor, helix_linkzo_radiobutton, "helix_linkzo_radiobutton"); GLADE_HOOKUP_OBJECT (helix_editor, helix_linkzhl_radiobutton, "helix_linkzhl_radiobutton"); GLADE_HOOKUP_OBJECT (helix_editor, helix_linkall_radiobutton, "helix_linkall_radiobutton"); GLADE_HOOKUP_OBJECT (helix_editor, helix_lh_checkbutton, "helix_lh_checkbutton"); GLADE_HOOKUP_OBJECT (helix_editor, label85, "label85"); GLADE_HOOKUP_OBJECT (helix_editor, hbox26, "hbox26"); GLADE_HOOKUP_OBJECT (helix_editor, helix_new_button, "helix_new_button"); GLADE_HOOKUP_OBJECT (helix_editor, helix_cancel_button, "helix_cancel_button"); GLADE_HOOKUP_OBJECT (helix_editor, alignment54, "alignment54"); GLADE_HOOKUP_OBJECT (helix_editor, hbox52, "hbox52"); GLADE_HOOKUP_OBJECT (helix_editor, image74, "image74"); GLADE_HOOKUP_OBJECT (helix_editor, label226, "label226"); GLADE_HOOKUP_OBJECT (helix_editor, helix_apply_button, "helix_apply_button"); GLADE_HOOKUP_OBJECT (helix_editor, helix_ok_button, "helix_ok_button"); return helix_editor; } GtkWidget* create_reflect_editor (void) { GtkWidget *reflect_editor; GtkWidget *vbox11; GtkWidget *frame17; GtkWidget *alignment19; GtkWidget *table11; GtkWidget *reflect_y_checkbutton; GtkObject *reflect_taginc_spinbutton_adj; GtkWidget *reflect_taginc_spinbutton; GtkWidget *reflect_z_checkbutton; GtkWidget *reflect_x_checkbutton; GtkWidget *label91; GtkWidget *label90; GtkWidget *hbox27; GtkWidget *reflect_new_button; GtkWidget *reflect_cancel_button; GtkWidget *alignment55; GtkWidget *hbox53; GtkWidget *image75; GtkWidget *label227; GtkWidget *reflect_apply_button; GtkWidget *reflect_ok_button; reflect_editor = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (reflect_editor), 4); gtk_window_set_title (GTK_WINDOW (reflect_editor), _("Reflect Structure (GX card)")); vbox11 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox11); gtk_container_add (GTK_CONTAINER (reflect_editor), vbox11); frame17 = gtk_frame_new (NULL); gtk_widget_show (frame17); gtk_box_pack_start (GTK_BOX (vbox11), frame17, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame17), 4); alignment19 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment19); gtk_container_add (GTK_CONTAINER (frame17), alignment19); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment19), 0, 0, 12, 0); table11 = gtk_table_new (3, 2, FALSE); gtk_widget_show (table11); gtk_container_add (GTK_CONTAINER (alignment19), table11); gtk_table_set_row_spacings (GTK_TABLE (table11), 8); gtk_table_set_col_spacings (GTK_TABLE (table11), 8); reflect_y_checkbutton = gtk_check_button_new_with_mnemonic (_("Reflect in XZ plane")); gtk_widget_show (reflect_y_checkbutton); gtk_table_attach (GTK_TABLE (table11), reflect_y_checkbutton, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (reflect_y_checkbutton), 2); reflect_taginc_spinbutton_adj = gtk_adjustment_new (0, 0, 100000, 1, 10, 0); reflect_taginc_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (reflect_taginc_spinbutton_adj), 1, 0); gtk_widget_show (reflect_taginc_spinbutton); gtk_table_attach (GTK_TABLE (table11), reflect_taginc_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (reflect_taginc_spinbutton), TRUE); reflect_z_checkbutton = gtk_check_button_new_with_mnemonic (_("Reflect in XY plane")); gtk_widget_show (reflect_z_checkbutton); gtk_table_attach (GTK_TABLE (table11), reflect_z_checkbutton, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (reflect_z_checkbutton), 2); reflect_x_checkbutton = gtk_check_button_new_with_mnemonic (_("Reflect in YZ plane")); gtk_widget_show (reflect_x_checkbutton); gtk_table_attach (GTK_TABLE (table11), reflect_x_checkbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (reflect_x_checkbutton), 2); label91 = gtk_label_new (_("Tag Number Increment")); gtk_widget_show (label91); gtk_table_attach (GTK_TABLE (table11), label91, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label91), 0, 0.5); label90 = gtk_label_new (_("Reflect Options")); gtk_widget_show (label90); gtk_frame_set_label_widget (GTK_FRAME (frame17), label90); gtk_misc_set_padding (GTK_MISC (label90), 4, 4); hbox27 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox27); gtk_box_pack_start (GTK_BOX (vbox11), hbox27, TRUE, TRUE, 0); reflect_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (reflect_new_button); gtk_box_pack_start (GTK_BOX (hbox27), reflect_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (reflect_new_button), 2); reflect_cancel_button = gtk_button_new (); gtk_widget_show (reflect_cancel_button); gtk_box_pack_start (GTK_BOX (hbox27), reflect_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (reflect_cancel_button), 2); alignment55 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment55); gtk_container_add (GTK_CONTAINER (reflect_cancel_button), alignment55); hbox53 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox53); gtk_container_add (GTK_CONTAINER (alignment55), hbox53); image75 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image75); gtk_box_pack_start (GTK_BOX (hbox53), image75, FALSE, FALSE, 0); label227 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label227); gtk_box_pack_start (GTK_BOX (hbox53), label227, FALSE, FALSE, 0); reflect_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (reflect_apply_button); gtk_box_pack_start (GTK_BOX (hbox27), reflect_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (reflect_apply_button), 2); reflect_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (reflect_ok_button); gtk_box_pack_start (GTK_BOX (hbox27), reflect_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (reflect_ok_button), 2); g_signal_connect ((gpointer) reflect_editor, "destroy", G_CALLBACK (on_reflect_editor_destroy), NULL); g_signal_connect ((gpointer) reflect_y_checkbutton, "toggled", G_CALLBACK (on_reflect_checkbutton_toggled), NULL); g_signal_connect ((gpointer) reflect_taginc_spinbutton, "value_changed", G_CALLBACK (on_reflect_taginc_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) reflect_z_checkbutton, "toggled", G_CALLBACK (on_reflect_checkbutton_toggled), NULL); g_signal_connect ((gpointer) reflect_x_checkbutton, "toggled", G_CALLBACK (on_reflect_checkbutton_toggled), NULL); g_signal_connect ((gpointer) reflect_new_button, "clicked", G_CALLBACK (on_reflect_new_button_clicked), NULL); g_signal_connect ((gpointer) reflect_cancel_button, "clicked", G_CALLBACK (on_reflect_cancel_button_clicked), NULL); g_signal_connect ((gpointer) reflect_apply_button, "clicked", G_CALLBACK (on_reflect_apply_button_clicked), NULL); g_signal_connect ((gpointer) reflect_ok_button, "clicked", G_CALLBACK (on_reflect_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (reflect_editor, reflect_editor, "reflect_editor"); GLADE_HOOKUP_OBJECT (reflect_editor, vbox11, "vbox11"); GLADE_HOOKUP_OBJECT (reflect_editor, frame17, "frame17"); GLADE_HOOKUP_OBJECT (reflect_editor, alignment19, "alignment19"); GLADE_HOOKUP_OBJECT (reflect_editor, table11, "table11"); GLADE_HOOKUP_OBJECT (reflect_editor, reflect_y_checkbutton, "reflect_y_checkbutton"); GLADE_HOOKUP_OBJECT (reflect_editor, reflect_taginc_spinbutton, "reflect_taginc_spinbutton"); GLADE_HOOKUP_OBJECT (reflect_editor, reflect_z_checkbutton, "reflect_z_checkbutton"); GLADE_HOOKUP_OBJECT (reflect_editor, reflect_x_checkbutton, "reflect_x_checkbutton"); GLADE_HOOKUP_OBJECT (reflect_editor, label91, "label91"); GLADE_HOOKUP_OBJECT (reflect_editor, label90, "label90"); GLADE_HOOKUP_OBJECT (reflect_editor, hbox27, "hbox27"); GLADE_HOOKUP_OBJECT (reflect_editor, reflect_new_button, "reflect_new_button"); GLADE_HOOKUP_OBJECT (reflect_editor, reflect_cancel_button, "reflect_cancel_button"); GLADE_HOOKUP_OBJECT (reflect_editor, alignment55, "alignment55"); GLADE_HOOKUP_OBJECT (reflect_editor, hbox53, "hbox53"); GLADE_HOOKUP_OBJECT (reflect_editor, image75, "image75"); GLADE_HOOKUP_OBJECT (reflect_editor, label227, "label227"); GLADE_HOOKUP_OBJECT (reflect_editor, reflect_apply_button, "reflect_apply_button"); GLADE_HOOKUP_OBJECT (reflect_editor, reflect_ok_button, "reflect_ok_button"); return reflect_editor; } GtkWidget* create_scale_editor (void) { GtkWidget *scale_editor; GtkWidget *vbox12; GtkWidget *frame18; GtkWidget *alignment20; GtkWidget *table35; GtkWidget *label217; GtkWidget *label220; GtkWidget *label221; GtkObject *scale_from_spinbutton_adj; GtkWidget *scale_from_spinbutton; GtkObject *scale_to_spinbutton_adj; GtkWidget *scale_to_spinbutton; GtkObject *scale_factor_spinbutton_adj; GtkWidget *scale_factor_spinbutton; GtkWidget *label93; GtkWidget *hbox28; GtkWidget *scale_new_button; GtkWidget *scale_cancel_button; GtkWidget *alignment56; GtkWidget *hbox54; GtkWidget *image76; GtkWidget *label228; GtkWidget *scale_apply_button; GtkWidget *scale_ok_button; scale_editor = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (scale_editor), 4); gtk_window_set_title (GTK_WINDOW (scale_editor), _("Scale Structure (GS card)")); vbox12 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox12); gtk_container_add (GTK_CONTAINER (scale_editor), vbox12); frame18 = gtk_frame_new (NULL); gtk_widget_show (frame18); gtk_box_pack_start (GTK_BOX (vbox12), frame18, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame18), 4); alignment20 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment20); gtk_container_add (GTK_CONTAINER (frame18), alignment20); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment20), 0, 0, 12, 0); table35 = gtk_table_new (3, 2, TRUE); gtk_widget_show (table35); gtk_container_add (GTK_CONTAINER (alignment20), table35); label217 = gtk_label_new (_("Structure Scale Factor")); gtk_widget_show (label217); gtk_table_attach (GTK_TABLE (table35), label217, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); label220 = gtk_label_new (_("From Tag No.")); gtk_widget_show (label220); gtk_table_attach (GTK_TABLE (table35), label220, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label220), 0.1, 0.5); label221 = gtk_label_new (_("To Tag No.")); gtk_widget_show (label221); gtk_table_attach (GTK_TABLE (table35), label221, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label221), 0.1, 0.5); scale_from_spinbutton_adj = gtk_adjustment_new (0, 0, 100000, 1, 10, 0); scale_from_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (scale_from_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (scale_from_spinbutton); gtk_table_attach (GTK_TABLE (table35), scale_from_spinbutton, 0, 1, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (scale_from_spinbutton), TRUE); scale_to_spinbutton_adj = gtk_adjustment_new (0, 0, 100000, 1, 10, 0); scale_to_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (scale_to_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (scale_to_spinbutton); gtk_table_attach (GTK_TABLE (table35), scale_to_spinbutton, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (scale_to_spinbutton), TRUE); scale_factor_spinbutton_adj = gtk_adjustment_new (1, 0, 100000, 9.99999974738e-06, 10, 0); scale_factor_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (scale_factor_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (scale_factor_spinbutton); gtk_table_attach (GTK_TABLE (table35), scale_factor_spinbutton, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (scale_factor_spinbutton), TRUE); label93 = gtk_label_new (_("Scale Strucure")); gtk_widget_show (label93); gtk_frame_set_label_widget (GTK_FRAME (frame18), label93); gtk_misc_set_padding (GTK_MISC (label93), 4, 4); hbox28 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox28); gtk_box_pack_start (GTK_BOX (vbox12), hbox28, TRUE, TRUE, 0); scale_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (scale_new_button); gtk_box_pack_start (GTK_BOX (hbox28), scale_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (scale_new_button), 2); scale_cancel_button = gtk_button_new (); gtk_widget_show (scale_cancel_button); gtk_box_pack_start (GTK_BOX (hbox28), scale_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (scale_cancel_button), 2); alignment56 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment56); gtk_container_add (GTK_CONTAINER (scale_cancel_button), alignment56); hbox54 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox54); gtk_container_add (GTK_CONTAINER (alignment56), hbox54); image76 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image76); gtk_box_pack_start (GTK_BOX (hbox54), image76, FALSE, FALSE, 0); label228 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label228); gtk_box_pack_start (GTK_BOX (hbox54), label228, FALSE, FALSE, 0); scale_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (scale_apply_button); gtk_box_pack_start (GTK_BOX (hbox28), scale_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (scale_apply_button), 2); scale_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (scale_ok_button); gtk_box_pack_start (GTK_BOX (hbox28), scale_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (scale_ok_button), 2); g_signal_connect ((gpointer) scale_editor, "destroy", G_CALLBACK (on_scale_editor_destroy), NULL); g_signal_connect ((gpointer) scale_from_spinbutton, "value_changed", G_CALLBACK (on_scale_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) scale_to_spinbutton, "value_changed", G_CALLBACK (on_scale_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) scale_factor_spinbutton, "value_changed", G_CALLBACK (on_scale_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) scale_new_button, "clicked", G_CALLBACK (on_scale_new_button_clicked), NULL); g_signal_connect ((gpointer) scale_cancel_button, "clicked", G_CALLBACK (on_scale_cancel_button_clicked), NULL); g_signal_connect ((gpointer) scale_apply_button, "clicked", G_CALLBACK (on_scale_apply_button_clicked), NULL); g_signal_connect ((gpointer) scale_ok_button, "clicked", G_CALLBACK (on_scale_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (scale_editor, scale_editor, "scale_editor"); GLADE_HOOKUP_OBJECT (scale_editor, vbox12, "vbox12"); GLADE_HOOKUP_OBJECT (scale_editor, frame18, "frame18"); GLADE_HOOKUP_OBJECT (scale_editor, alignment20, "alignment20"); GLADE_HOOKUP_OBJECT (scale_editor, table35, "table35"); GLADE_HOOKUP_OBJECT (scale_editor, label217, "label217"); GLADE_HOOKUP_OBJECT (scale_editor, label220, "label220"); GLADE_HOOKUP_OBJECT (scale_editor, label221, "label221"); GLADE_HOOKUP_OBJECT (scale_editor, scale_from_spinbutton, "scale_from_spinbutton"); GLADE_HOOKUP_OBJECT (scale_editor, scale_to_spinbutton, "scale_to_spinbutton"); GLADE_HOOKUP_OBJECT (scale_editor, scale_factor_spinbutton, "scale_factor_spinbutton"); GLADE_HOOKUP_OBJECT (scale_editor, label93, "label93"); GLADE_HOOKUP_OBJECT (scale_editor, hbox28, "hbox28"); GLADE_HOOKUP_OBJECT (scale_editor, scale_new_button, "scale_new_button"); GLADE_HOOKUP_OBJECT (scale_editor, scale_cancel_button, "scale_cancel_button"); GLADE_HOOKUP_OBJECT (scale_editor, alignment56, "alignment56"); GLADE_HOOKUP_OBJECT (scale_editor, hbox54, "hbox54"); GLADE_HOOKUP_OBJECT (scale_editor, image76, "image76"); GLADE_HOOKUP_OBJECT (scale_editor, label228, "label228"); GLADE_HOOKUP_OBJECT (scale_editor, scale_apply_button, "scale_apply_button"); GLADE_HOOKUP_OBJECT (scale_editor, scale_ok_button, "scale_ok_button"); return scale_editor; } GtkWidget* create_cylinder_editor (void) { GtkWidget *cylinder_editor; GtkWidget *vbox13; GtkWidget *frame19; GtkWidget *alignment21; GtkWidget *table12; GtkWidget *label95; GtkWidget *label97; GtkObject *cylinder_taginc_spinbutton_adj; GtkWidget *cylinder_taginc_spinbutton; GtkObject *cylinder_total_spinbutton_adj; GtkWidget *cylinder_total_spinbutton; GtkWidget *label96; GtkWidget *hbox30; GtkWidget *cylinder_new_button; GtkWidget *cylinder_cancel_button; GtkWidget *alignment57; GtkWidget *hbox55; GtkWidget *image77; GtkWidget *label229; GtkWidget *cylinder_apply_button; GtkWidget *cylinder_ok_button; cylinder_editor = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (cylinder_editor), 4); gtk_window_set_title (GTK_WINDOW (cylinder_editor), _("Cylindrical Structure (GR card)")); vbox13 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox13); gtk_container_add (GTK_CONTAINER (cylinder_editor), vbox13); frame19 = gtk_frame_new (NULL); gtk_widget_show (frame19); gtk_box_pack_start (GTK_BOX (vbox13), frame19, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame19), 4); alignment21 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment21); gtk_container_add (GTK_CONTAINER (frame19), alignment21); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment21), 0, 0, 12, 0); table12 = gtk_table_new (2, 2, FALSE); gtk_widget_show (table12); gtk_container_add (GTK_CONTAINER (alignment21), table12); gtk_table_set_row_spacings (GTK_TABLE (table12), 2); gtk_table_set_col_spacings (GTK_TABLE (table12), 8); label95 = gtk_label_new (_("Tag Number Increment")); gtk_widget_show (label95); gtk_table_attach (GTK_TABLE (table12), label95, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label95), 0.1, 0.5); label97 = gtk_label_new (_("Number of Structures")); gtk_widget_show (label97); gtk_table_attach (GTK_TABLE (table12), label97, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label97), 0.1, 0.5); cylinder_taginc_spinbutton_adj = gtk_adjustment_new (0, 0, 100000, 1, 10, 0); cylinder_taginc_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (cylinder_taginc_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (cylinder_taginc_spinbutton); gtk_table_attach (GTK_TABLE (table12), cylinder_taginc_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (cylinder_taginc_spinbutton), TRUE); cylinder_total_spinbutton_adj = gtk_adjustment_new (4, 1, 100000, 1, 10, 0); cylinder_total_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (cylinder_total_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (cylinder_total_spinbutton); gtk_table_attach (GTK_TABLE (table12), cylinder_total_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (cylinder_total_spinbutton), TRUE); label96 = gtk_label_new (_("Cylindrical Structure")); gtk_widget_show (label96); gtk_frame_set_label_widget (GTK_FRAME (frame19), label96); gtk_misc_set_padding (GTK_MISC (label96), 4, 4); hbox30 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox30); gtk_box_pack_start (GTK_BOX (vbox13), hbox30, TRUE, TRUE, 0); cylinder_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (cylinder_new_button); gtk_box_pack_start (GTK_BOX (hbox30), cylinder_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (cylinder_new_button), 2); cylinder_cancel_button = gtk_button_new (); gtk_widget_show (cylinder_cancel_button); gtk_box_pack_start (GTK_BOX (hbox30), cylinder_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (cylinder_cancel_button), 2); alignment57 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment57); gtk_container_add (GTK_CONTAINER (cylinder_cancel_button), alignment57); hbox55 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox55); gtk_container_add (GTK_CONTAINER (alignment57), hbox55); image77 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image77); gtk_box_pack_start (GTK_BOX (hbox55), image77, FALSE, FALSE, 0); label229 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label229); gtk_box_pack_start (GTK_BOX (hbox55), label229, FALSE, FALSE, 0); cylinder_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (cylinder_apply_button); gtk_box_pack_start (GTK_BOX (hbox30), cylinder_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (cylinder_apply_button), 2); cylinder_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (cylinder_ok_button); gtk_box_pack_start (GTK_BOX (hbox30), cylinder_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (cylinder_ok_button), 2); g_signal_connect ((gpointer) cylinder_editor, "destroy", G_CALLBACK (on_cylinder_editor_destroy), NULL); g_signal_connect ((gpointer) cylinder_taginc_spinbutton, "value_changed", G_CALLBACK (on_cylinder_taginc_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) cylinder_total_spinbutton, "value_changed", G_CALLBACK (on_cylinder_total_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) cylinder_new_button, "clicked", G_CALLBACK (on_cylinder_new_button_clicked), NULL); g_signal_connect ((gpointer) cylinder_cancel_button, "clicked", G_CALLBACK (on_cylinder_cancel_button_clicked), NULL); g_signal_connect ((gpointer) cylinder_apply_button, "clicked", G_CALLBACK (on_cylinder_apply_button_clicked), NULL); g_signal_connect ((gpointer) cylinder_ok_button, "clicked", G_CALLBACK (on_cylinder_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (cylinder_editor, cylinder_editor, "cylinder_editor"); GLADE_HOOKUP_OBJECT (cylinder_editor, vbox13, "vbox13"); GLADE_HOOKUP_OBJECT (cylinder_editor, frame19, "frame19"); GLADE_HOOKUP_OBJECT (cylinder_editor, alignment21, "alignment21"); GLADE_HOOKUP_OBJECT (cylinder_editor, table12, "table12"); GLADE_HOOKUP_OBJECT (cylinder_editor, label95, "label95"); GLADE_HOOKUP_OBJECT (cylinder_editor, label97, "label97"); GLADE_HOOKUP_OBJECT (cylinder_editor, cylinder_taginc_spinbutton, "cylinder_taginc_spinbutton"); GLADE_HOOKUP_OBJECT (cylinder_editor, cylinder_total_spinbutton, "cylinder_total_spinbutton"); GLADE_HOOKUP_OBJECT (cylinder_editor, label96, "label96"); GLADE_HOOKUP_OBJECT (cylinder_editor, hbox30, "hbox30"); GLADE_HOOKUP_OBJECT (cylinder_editor, cylinder_new_button, "cylinder_new_button"); GLADE_HOOKUP_OBJECT (cylinder_editor, cylinder_cancel_button, "cylinder_cancel_button"); GLADE_HOOKUP_OBJECT (cylinder_editor, alignment57, "alignment57"); GLADE_HOOKUP_OBJECT (cylinder_editor, hbox55, "hbox55"); GLADE_HOOKUP_OBJECT (cylinder_editor, image77, "image77"); GLADE_HOOKUP_OBJECT (cylinder_editor, label229, "label229"); GLADE_HOOKUP_OBJECT (cylinder_editor, cylinder_apply_button, "cylinder_apply_button"); GLADE_HOOKUP_OBJECT (cylinder_editor, cylinder_ok_button, "cylinder_ok_button"); return cylinder_editor; } GtkWidget* create_kernel_command (void) { GtkWidget *kernel_command; GtkWidget *vbox14; GtkWidget *frame21; GtkWidget *alignment23; GtkWidget *kernel_checkbutton; GtkWidget *label107; GtkWidget *hbox31; GtkWidget *kernel_new_button; GtkWidget *kernel_cancel_button; GtkWidget *alignment58; GtkWidget *hbox56; GtkWidget *image78; GtkWidget *label230; GtkWidget *kernel_apply_button; GtkWidget *kernel_ok_button; kernel_command = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (kernel_command), 4); gtk_window_set_title (GTK_WINDOW (kernel_command), _("Thin Wire Kernel (EK Card)")); vbox14 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox14); gtk_container_add (GTK_CONTAINER (kernel_command), vbox14); frame21 = gtk_frame_new (NULL); gtk_widget_show (frame21); gtk_box_pack_start (GTK_BOX (vbox14), frame21, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame21), 4); alignment23 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment23); gtk_container_add (GTK_CONTAINER (frame21), alignment23); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment23), 0, 0, 12, 0); kernel_checkbutton = gtk_check_button_new_with_mnemonic (_("Extended Thin Wire Kernel")); gtk_widget_show (kernel_checkbutton); gtk_container_add (GTK_CONTAINER (alignment23), kernel_checkbutton); gtk_container_set_border_width (GTK_CONTAINER (kernel_checkbutton), 8); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (kernel_checkbutton), TRUE); label107 = gtk_label_new (_("Thin Wire Kernel")); gtk_widget_show (label107); gtk_frame_set_label_widget (GTK_FRAME (frame21), label107); gtk_misc_set_padding (GTK_MISC (label107), 4, 4); hbox31 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox31); gtk_box_pack_start (GTK_BOX (vbox14), hbox31, TRUE, TRUE, 0); kernel_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (kernel_new_button); gtk_box_pack_start (GTK_BOX (hbox31), kernel_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (kernel_new_button), 2); kernel_cancel_button = gtk_button_new (); gtk_widget_show (kernel_cancel_button); gtk_box_pack_start (GTK_BOX (hbox31), kernel_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (kernel_cancel_button), 2); alignment58 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment58); gtk_container_add (GTK_CONTAINER (kernel_cancel_button), alignment58); hbox56 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox56); gtk_container_add (GTK_CONTAINER (alignment58), hbox56); image78 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image78); gtk_box_pack_start (GTK_BOX (hbox56), image78, FALSE, FALSE, 0); label230 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label230); gtk_box_pack_start (GTK_BOX (hbox56), label230, FALSE, FALSE, 0); kernel_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (kernel_apply_button); gtk_box_pack_start (GTK_BOX (hbox31), kernel_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (kernel_apply_button), 2); kernel_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (kernel_ok_button); gtk_box_pack_start (GTK_BOX (hbox31), kernel_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (kernel_ok_button), 2); g_signal_connect ((gpointer) kernel_command, "destroy", G_CALLBACK (on_kernel_command_destroy), NULL); g_signal_connect ((gpointer) kernel_checkbutton, "toggled", G_CALLBACK (on_kernel_checkbutton_toggled), NULL); g_signal_connect ((gpointer) kernel_new_button, "clicked", G_CALLBACK (on_kernel_new_button_clicked), NULL); g_signal_connect ((gpointer) kernel_cancel_button, "clicked", G_CALLBACK (on_kernel_cancel_button_clicked), NULL); g_signal_connect ((gpointer) kernel_apply_button, "clicked", G_CALLBACK (on_kernel_apply_button_clicked), NULL); g_signal_connect ((gpointer) kernel_ok_button, "clicked", G_CALLBACK (on_kernel_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (kernel_command, kernel_command, "kernel_command"); GLADE_HOOKUP_OBJECT (kernel_command, vbox14, "vbox14"); GLADE_HOOKUP_OBJECT (kernel_command, frame21, "frame21"); GLADE_HOOKUP_OBJECT (kernel_command, alignment23, "alignment23"); GLADE_HOOKUP_OBJECT (kernel_command, kernel_checkbutton, "kernel_checkbutton"); GLADE_HOOKUP_OBJECT (kernel_command, label107, "label107"); GLADE_HOOKUP_OBJECT (kernel_command, hbox31, "hbox31"); GLADE_HOOKUP_OBJECT (kernel_command, kernel_new_button, "kernel_new_button"); GLADE_HOOKUP_OBJECT (kernel_command, kernel_cancel_button, "kernel_cancel_button"); GLADE_HOOKUP_OBJECT (kernel_command, alignment58, "alignment58"); GLADE_HOOKUP_OBJECT (kernel_command, hbox56, "hbox56"); GLADE_HOOKUP_OBJECT (kernel_command, image78, "image78"); GLADE_HOOKUP_OBJECT (kernel_command, label230, "label230"); GLADE_HOOKUP_OBJECT (kernel_command, kernel_apply_button, "kernel_apply_button"); GLADE_HOOKUP_OBJECT (kernel_command, kernel_ok_button, "kernel_ok_button"); return kernel_command; } GtkWidget* create_execute_command (void) { GtkWidget *execute_command; GtkWidget *vbox15; GtkWidget *frame20; GtkWidget *alignment22; GtkWidget *table14; GtkWidget *execute_none_radiobutton; GSList *execute_none_radiobutton_group = NULL; GtkWidget *execute_xz_radiobutton; GtkWidget *execute_yz_radiobutton; GtkWidget *execute_both_radiobutton; GtkWidget *label106; GtkWidget *hbox32; GtkWidget *execute_new_button; GtkWidget *execute_cancel_button; GtkWidget *alignment59; GtkWidget *hbox57; GtkWidget *image79; GtkWidget *label231; GtkWidget *execute_apply_button; GtkWidget *execute_ok_button; execute_command = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (execute_command), 4); gtk_window_set_title (GTK_WINDOW (execute_command), _("Execute Command (XQ Card)")); vbox15 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox15); gtk_container_add (GTK_CONTAINER (execute_command), vbox15); frame20 = gtk_frame_new (NULL); gtk_widget_show (frame20); gtk_box_pack_start (GTK_BOX (vbox15), frame20, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame20), 4); alignment22 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment22); gtk_container_add (GTK_CONTAINER (frame20), alignment22); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment22), 0, 0, 12, 0); table14 = gtk_table_new (2, 2, FALSE); gtk_widget_show (table14); gtk_container_add (GTK_CONTAINER (alignment22), table14); gtk_table_set_row_spacings (GTK_TABLE (table14), 2); gtk_table_set_col_spacings (GTK_TABLE (table14), 2); execute_none_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("No Pattern Cuts")); gtk_widget_show (execute_none_radiobutton); gtk_table_attach (GTK_TABLE (table14), execute_none_radiobutton, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (execute_none_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (execute_none_radiobutton), execute_none_radiobutton_group); execute_none_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (execute_none_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (execute_none_radiobutton), TRUE); execute_xz_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Pattern in XZ Plane")); gtk_widget_show (execute_xz_radiobutton); gtk_table_attach (GTK_TABLE (table14), execute_xz_radiobutton, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (execute_xz_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (execute_xz_radiobutton), execute_none_radiobutton_group); execute_none_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (execute_xz_radiobutton)); execute_yz_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Pattern in YZ Plane")); gtk_widget_show (execute_yz_radiobutton); gtk_table_attach (GTK_TABLE (table14), execute_yz_radiobutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (execute_yz_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (execute_yz_radiobutton), execute_none_radiobutton_group); execute_none_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (execute_yz_radiobutton)); execute_both_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Both XZ/YZ Patterns")); gtk_widget_show (execute_both_radiobutton); gtk_table_attach (GTK_TABLE (table14), execute_both_radiobutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (execute_both_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (execute_both_radiobutton), execute_none_radiobutton_group); execute_none_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (execute_both_radiobutton)); label106 = gtk_label_new (_("Execute Command")); gtk_widget_show (label106); gtk_frame_set_label_widget (GTK_FRAME (frame20), label106); gtk_misc_set_padding (GTK_MISC (label106), 4, 4); hbox32 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox32); gtk_box_pack_start (GTK_BOX (vbox15), hbox32, FALSE, FALSE, 0); execute_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (execute_new_button); gtk_box_pack_start (GTK_BOX (hbox32), execute_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (execute_new_button), 2); execute_cancel_button = gtk_button_new (); gtk_widget_show (execute_cancel_button); gtk_box_pack_start (GTK_BOX (hbox32), execute_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (execute_cancel_button), 2); alignment59 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment59); gtk_container_add (GTK_CONTAINER (execute_cancel_button), alignment59); hbox57 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox57); gtk_container_add (GTK_CONTAINER (alignment59), hbox57); image79 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image79); gtk_box_pack_start (GTK_BOX (hbox57), image79, FALSE, FALSE, 0); label231 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label231); gtk_box_pack_start (GTK_BOX (hbox57), label231, FALSE, FALSE, 0); execute_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (execute_apply_button); gtk_box_pack_start (GTK_BOX (hbox32), execute_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (execute_apply_button), 2); execute_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (execute_ok_button); gtk_box_pack_start (GTK_BOX (hbox32), execute_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (execute_ok_button), 2); g_signal_connect ((gpointer) execute_command, "destroy", G_CALLBACK (on_execute_command_destroy), NULL); g_signal_connect ((gpointer) execute_none_radiobutton, "toggled", G_CALLBACK (on_execute_radiobutton_toggled), NULL); g_signal_connect ((gpointer) execute_xz_radiobutton, "toggled", G_CALLBACK (on_execute_radiobutton_toggled), NULL); g_signal_connect ((gpointer) execute_yz_radiobutton, "toggled", G_CALLBACK (on_execute_radiobutton_toggled), NULL); g_signal_connect ((gpointer) execute_both_radiobutton, "toggled", G_CALLBACK (on_execute_radiobutton_toggled), NULL); g_signal_connect ((gpointer) execute_new_button, "clicked", G_CALLBACK (on_execute_new_button_clicked), NULL); g_signal_connect ((gpointer) execute_cancel_button, "clicked", G_CALLBACK (on_execute_cancel_button_clicked), NULL); g_signal_connect ((gpointer) execute_apply_button, "clicked", G_CALLBACK (on_execute_apply_button_clicked), NULL); g_signal_connect ((gpointer) execute_ok_button, "clicked", G_CALLBACK (on_execute_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (execute_command, execute_command, "execute_command"); GLADE_HOOKUP_OBJECT (execute_command, vbox15, "vbox15"); GLADE_HOOKUP_OBJECT (execute_command, frame20, "frame20"); GLADE_HOOKUP_OBJECT (execute_command, alignment22, "alignment22"); GLADE_HOOKUP_OBJECT (execute_command, table14, "table14"); GLADE_HOOKUP_OBJECT (execute_command, execute_none_radiobutton, "execute_none_radiobutton"); GLADE_HOOKUP_OBJECT (execute_command, execute_xz_radiobutton, "execute_xz_radiobutton"); GLADE_HOOKUP_OBJECT (execute_command, execute_yz_radiobutton, "execute_yz_radiobutton"); GLADE_HOOKUP_OBJECT (execute_command, execute_both_radiobutton, "execute_both_radiobutton"); GLADE_HOOKUP_OBJECT (execute_command, label106, "label106"); GLADE_HOOKUP_OBJECT (execute_command, hbox32, "hbox32"); GLADE_HOOKUP_OBJECT (execute_command, execute_new_button, "execute_new_button"); GLADE_HOOKUP_OBJECT (execute_command, execute_cancel_button, "execute_cancel_button"); GLADE_HOOKUP_OBJECT (execute_command, alignment59, "alignment59"); GLADE_HOOKUP_OBJECT (execute_command, hbox57, "hbox57"); GLADE_HOOKUP_OBJECT (execute_command, image79, "image79"); GLADE_HOOKUP_OBJECT (execute_command, label231, "label231"); GLADE_HOOKUP_OBJECT (execute_command, execute_apply_button, "execute_apply_button"); GLADE_HOOKUP_OBJECT (execute_command, execute_ok_button, "execute_ok_button"); return execute_command; } GtkWidget* create_intrange_command (void) { GtkWidget *intrange_command; GtkWidget *vbox16; GtkWidget *frame22; GtkWidget *alignment24; GtkWidget *hbox34; GtkWidget *label109; GtkObject *intrange_wlen_spinbutton_adj; GtkWidget *intrange_wlen_spinbutton; GtkWidget *label108; GtkWidget *hbox33; GtkWidget *intrange_new_button; GtkWidget *intrange_cancel_button; GtkWidget *alignment60; GtkWidget *hbox58; GtkWidget *image80; GtkWidget *label232; GtkWidget *intrange_apply_button; GtkWidget *intrange_ok_button; intrange_command = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (intrange_command), _("Interaction Approx Range (KH Card)")); vbox16 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox16); gtk_container_add (GTK_CONTAINER (intrange_command), vbox16); frame22 = gtk_frame_new (NULL); gtk_widget_show (frame22); gtk_box_pack_start (GTK_BOX (vbox16), frame22, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame22), 4); alignment24 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment24); gtk_container_add (GTK_CONTAINER (frame22), alignment24); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment24), 0, 0, 12, 0); hbox34 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox34); gtk_container_add (GTK_CONTAINER (alignment24), hbox34); gtk_container_set_border_width (GTK_CONTAINER (hbox34), 8); label109 = gtk_label_new (_("Approximation Range (W/lengths)")); gtk_widget_show (label109); gtk_box_pack_start (GTK_BOX (hbox34), label109, FALSE, FALSE, 0); intrange_wlen_spinbutton_adj = gtk_adjustment_new (1, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); intrange_wlen_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (intrange_wlen_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (intrange_wlen_spinbutton); gtk_box_pack_start (GTK_BOX (hbox34), intrange_wlen_spinbutton, TRUE, TRUE, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (intrange_wlen_spinbutton), TRUE); label108 = gtk_label_new (_("Interaction Approximation Range")); gtk_widget_show (label108); gtk_frame_set_label_widget (GTK_FRAME (frame22), label108); gtk_misc_set_padding (GTK_MISC (label108), 4, 4); hbox33 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox33); gtk_box_pack_start (GTK_BOX (vbox16), hbox33, TRUE, TRUE, 0); intrange_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (intrange_new_button); gtk_box_pack_start (GTK_BOX (hbox33), intrange_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (intrange_new_button), 2); intrange_cancel_button = gtk_button_new (); gtk_widget_show (intrange_cancel_button); gtk_box_pack_start (GTK_BOX (hbox33), intrange_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (intrange_cancel_button), 2); alignment60 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment60); gtk_container_add (GTK_CONTAINER (intrange_cancel_button), alignment60); hbox58 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox58); gtk_container_add (GTK_CONTAINER (alignment60), hbox58); image80 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image80); gtk_box_pack_start (GTK_BOX (hbox58), image80, FALSE, FALSE, 0); label232 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label232); gtk_box_pack_start (GTK_BOX (hbox58), label232, FALSE, FALSE, 0); intrange_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (intrange_apply_button); gtk_box_pack_start (GTK_BOX (hbox33), intrange_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (intrange_apply_button), 2); intrange_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (intrange_ok_button); gtk_box_pack_start (GTK_BOX (hbox33), intrange_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (intrange_ok_button), 2); g_signal_connect ((gpointer) intrange_command, "destroy", G_CALLBACK (on_intrange_command_destroy), NULL); g_signal_connect ((gpointer) intrange_wlen_spinbutton, "value_changed", G_CALLBACK (on_intrange_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) intrange_new_button, "clicked", G_CALLBACK (on_intrange_new_button_clicked), NULL); g_signal_connect ((gpointer) intrange_cancel_button, "clicked", G_CALLBACK (on_intrange_cancel_button_clicked), NULL); g_signal_connect ((gpointer) intrange_apply_button, "clicked", G_CALLBACK (on_intrange_apply_button_clicked), NULL); g_signal_connect ((gpointer) intrange_ok_button, "clicked", G_CALLBACK (on_intrange_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (intrange_command, intrange_command, "intrange_command"); GLADE_HOOKUP_OBJECT (intrange_command, vbox16, "vbox16"); GLADE_HOOKUP_OBJECT (intrange_command, frame22, "frame22"); GLADE_HOOKUP_OBJECT (intrange_command, alignment24, "alignment24"); GLADE_HOOKUP_OBJECT (intrange_command, hbox34, "hbox34"); GLADE_HOOKUP_OBJECT (intrange_command, label109, "label109"); GLADE_HOOKUP_OBJECT (intrange_command, intrange_wlen_spinbutton, "intrange_wlen_spinbutton"); GLADE_HOOKUP_OBJECT (intrange_command, label108, "label108"); GLADE_HOOKUP_OBJECT (intrange_command, hbox33, "hbox33"); GLADE_HOOKUP_OBJECT (intrange_command, intrange_new_button, "intrange_new_button"); GLADE_HOOKUP_OBJECT (intrange_command, intrange_cancel_button, "intrange_cancel_button"); GLADE_HOOKUP_OBJECT (intrange_command, alignment60, "alignment60"); GLADE_HOOKUP_OBJECT (intrange_command, hbox58, "hbox58"); GLADE_HOOKUP_OBJECT (intrange_command, image80, "image80"); GLADE_HOOKUP_OBJECT (intrange_command, label232, "label232"); GLADE_HOOKUP_OBJECT (intrange_command, intrange_apply_button, "intrange_apply_button"); GLADE_HOOKUP_OBJECT (intrange_command, intrange_ok_button, "intrange_ok_button"); return intrange_command; } GtkWidget* create_ground_command (void) { GtkWidget *ground_command; GtkWidget *vbox17; GtkWidget *frame23; GtkWidget *alignment25; GtkWidget *table15; GtkWidget *ground_perf_radiobutton; GSList *ground_perf_radiobutton_group = NULL; GtkWidget *ground_refl_radiobutton; GtkWidget *ground_smfld_radiobutton; GtkWidget *ground_null_radiobutton; GtkWidget *ground_radl_checkbutton; GtkWidget *ground_secmd_checkbutton; GtkWidget *label110; GtkWidget *ground_med1_frame; GtkWidget *alignment26; GtkWidget *table16; GtkObject *ground_diel1_spinbutton_adj; GtkWidget *ground_diel1_spinbutton; GtkObject *ground_res1_spinbutton_adj; GtkWidget *ground_res1_spinbutton; GtkWidget *label116; GtkWidget *label117; GtkWidget *label111; GtkWidget *ground_med2_frame; GtkWidget *alignment27; GtkWidget *table18; GtkWidget *label118; GtkWidget *label123; GtkWidget *label124; GtkWidget *label125; GtkObject *ground_diel2_spinbutton_adj; GtkWidget *ground_diel2_spinbutton; GtkObject *ground_res2_spinbutton_adj; GtkWidget *ground_res2_spinbutton; GtkObject *ground_below_spinbutton_adj; GtkWidget *ground_below_spinbutton; GtkObject *ground_dist2_spinbutton_adj; GtkWidget *ground_dist2_spinbutton; GtkWidget *label114; GtkWidget *ground_radial_frame; GtkWidget *alignment28; GtkWidget *table17; GtkWidget *label126; GtkWidget *label127; GtkWidget *label128; GtkObject *ground_nrad_spinbutton_adj; GtkWidget *ground_nrad_spinbutton; GtkObject *ground_diam_spinbutton_adj; GtkWidget *ground_diam_spinbutton; GtkObject *ground_scrnrd_spinbutton_adj; GtkWidget *ground_scrnrd_spinbutton; GtkWidget *label115; GtkWidget *hbox35; GtkWidget *ground_new_button; GtkWidget *ground_cancel_button; GtkWidget *alignment61; GtkWidget *hbox59; GtkWidget *image81; GtkWidget *label233; GtkWidget *ground_apply_button; GtkWidget *ground_ok_button; ground_command = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (ground_command), 4); gtk_window_set_title (GTK_WINDOW (ground_command), _("Ground Parameters (GN & GD Cards)")); vbox17 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox17); gtk_container_add (GTK_CONTAINER (ground_command), vbox17); frame23 = gtk_frame_new (NULL); gtk_widget_show (frame23); gtk_box_pack_start (GTK_BOX (vbox17), frame23, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame23), 4); alignment25 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment25); gtk_container_add (GTK_CONTAINER (frame23), alignment25); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment25), 0, 0, 12, 0); table15 = gtk_table_new (3, 2, FALSE); gtk_widget_show (table15); gtk_container_add (GTK_CONTAINER (alignment25), table15); gtk_table_set_row_spacings (GTK_TABLE (table15), 2); gtk_table_set_col_spacings (GTK_TABLE (table15), 2); ground_perf_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Perfect Ground")); gtk_widget_show (ground_perf_radiobutton); gtk_table_attach (GTK_TABLE (table15), ground_perf_radiobutton, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_perf_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (ground_perf_radiobutton), ground_perf_radiobutton_group); ground_perf_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (ground_perf_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ground_perf_radiobutton), TRUE); ground_refl_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Reflection Coeff. Approx")); gtk_widget_show (ground_refl_radiobutton); gtk_table_attach (GTK_TABLE (table15), ground_refl_radiobutton, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_refl_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (ground_refl_radiobutton), ground_perf_radiobutton_group); ground_perf_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (ground_refl_radiobutton)); ground_smfld_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Sommerfeld/Norton")); gtk_widget_show (ground_smfld_radiobutton); gtk_table_attach (GTK_TABLE (table15), ground_smfld_radiobutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_smfld_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (ground_smfld_radiobutton), ground_perf_radiobutton_group); ground_perf_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (ground_smfld_radiobutton)); ground_null_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Nullify Previous Params")); gtk_widget_show (ground_null_radiobutton); gtk_table_attach (GTK_TABLE (table15), ground_null_radiobutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_null_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (ground_null_radiobutton), ground_perf_radiobutton_group); ground_perf_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (ground_null_radiobutton)); ground_radl_checkbutton = gtk_check_button_new_with_mnemonic (_("Radial Ground Screen")); gtk_widget_show (ground_radl_checkbutton); gtk_table_attach (GTK_TABLE (table15), ground_radl_checkbutton, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_radl_checkbutton), 2); ground_secmd_checkbutton = gtk_check_button_new_with_mnemonic (_("Second Medium (Cliff)")); gtk_widget_show (ground_secmd_checkbutton); gtk_table_attach (GTK_TABLE (table15), ground_secmd_checkbutton, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_secmd_checkbutton), 2); label110 = gtk_label_new (_("Ground Type")); gtk_widget_show (label110); gtk_frame_set_label_widget (GTK_FRAME (frame23), label110); gtk_misc_set_padding (GTK_MISC (label110), 4, 4); ground_med1_frame = gtk_frame_new (NULL); gtk_box_pack_start (GTK_BOX (vbox17), ground_med1_frame, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_med1_frame), 4); alignment26 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment26); gtk_container_add (GTK_CONTAINER (ground_med1_frame), alignment26); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment26), 0, 0, 12, 0); table16 = gtk_table_new (2, 2, FALSE); gtk_widget_show (table16); gtk_container_add (GTK_CONTAINER (alignment26), table16); gtk_table_set_row_spacings (GTK_TABLE (table16), 2); gtk_table_set_col_spacings (GTK_TABLE (table16), 2); ground_diel1_spinbutton_adj = gtk_adjustment_new (12, 0, 10000, 9.99999974738e-06, 10, 0); ground_diel1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground_diel1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (ground_diel1_spinbutton); gtk_table_attach (GTK_TABLE (table16), ground_diel1_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground_diel1_spinbutton), TRUE); ground_res1_spinbutton_adj = gtk_adjustment_new (0.005, 0, 10000, 9.99999974738e-06, 10, 0); ground_res1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground_res1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (ground_res1_spinbutton); gtk_table_attach (GTK_TABLE (table16), ground_res1_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground_res1_spinbutton), TRUE); label116 = gtk_label_new (_("Relative Dielectric Const.")); gtk_widget_show (label116); gtk_table_attach (GTK_TABLE (table16), label116, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label116), 0, 0.5); label117 = gtk_label_new (_("Ground Conductivity S/m")); gtk_widget_show (label117); gtk_table_attach (GTK_TABLE (table16), label117, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label117), 0, 0.5); label111 = gtk_label_new (_("1st Medium Parameters")); gtk_widget_show (label111); gtk_frame_set_label_widget (GTK_FRAME (ground_med1_frame), label111); gtk_misc_set_padding (GTK_MISC (label111), 4, 4); ground_med2_frame = gtk_frame_new (NULL); gtk_box_pack_start (GTK_BOX (vbox17), ground_med2_frame, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_med2_frame), 4); alignment27 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment27); gtk_container_add (GTK_CONTAINER (ground_med2_frame), alignment27); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment27), 0, 0, 12, 0); table18 = gtk_table_new (4, 2, FALSE); gtk_widget_show (table18); gtk_container_add (GTK_CONTAINER (alignment27), table18); gtk_table_set_row_spacings (GTK_TABLE (table18), 2); gtk_table_set_col_spacings (GTK_TABLE (table18), 2); label118 = gtk_label_new (_("Relative Dielectric Const.")); gtk_widget_show (label118); gtk_table_attach (GTK_TABLE (table18), label118, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label118), 0, 0.5); label123 = gtk_label_new (_("Ground Conductivity S/m")); gtk_widget_show (label123); gtk_table_attach (GTK_TABLE (table18), label123, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label123), 0, 0.5); label124 = gtk_label_new (_("Distance to 2nd Medium")); gtk_widget_show (label124); gtk_table_attach (GTK_TABLE (table18), label124, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label124), 0, 0.5); label125 = gtk_label_new (_("Dist. below 1st Medium")); gtk_widget_show (label125); gtk_table_attach (GTK_TABLE (table18), label125, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label125), 0, 0.5); ground_diel2_spinbutton_adj = gtk_adjustment_new (12, 0, 10000, 9.99999974738e-06, 10, 0); ground_diel2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground_diel2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (ground_diel2_spinbutton); gtk_table_attach (GTK_TABLE (table18), ground_diel2_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground_diel2_spinbutton), TRUE); ground_res2_spinbutton_adj = gtk_adjustment_new (0.005, 0, 10000, 9.99999974738e-06, 10, 0); ground_res2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground_res2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (ground_res2_spinbutton); gtk_table_attach (GTK_TABLE (table18), ground_res2_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground_res2_spinbutton), TRUE); ground_below_spinbutton_adj = gtk_adjustment_new (1, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); ground_below_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground_below_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (ground_below_spinbutton); gtk_table_attach (GTK_TABLE (table18), ground_below_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground_below_spinbutton), TRUE); ground_dist2_spinbutton_adj = gtk_adjustment_new (1, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); ground_dist2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground_dist2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (ground_dist2_spinbutton); gtk_table_attach (GTK_TABLE (table18), ground_dist2_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground_dist2_spinbutton), TRUE); label114 = gtk_label_new (_("2nd Medium Parameters")); gtk_widget_show (label114); gtk_frame_set_label_widget (GTK_FRAME (ground_med2_frame), label114); gtk_misc_set_padding (GTK_MISC (label114), 4, 4); ground_radial_frame = gtk_frame_new (NULL); gtk_box_pack_start (GTK_BOX (vbox17), ground_radial_frame, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_radial_frame), 4); alignment28 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment28); gtk_container_add (GTK_CONTAINER (ground_radial_frame), alignment28); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment28), 0, 0, 12, 0); table17 = gtk_table_new (3, 2, FALSE); gtk_widget_show (table17); gtk_container_add (GTK_CONTAINER (alignment28), table17); gtk_table_set_row_spacings (GTK_TABLE (table17), 2); gtk_table_set_col_spacings (GTK_TABLE (table17), 2); label126 = gtk_label_new (_("Number of Radials")); gtk_widget_show (label126); gtk_table_attach (GTK_TABLE (table17), label126, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label126), 0.9, 0.5); label127 = gtk_label_new (_("Radial Screen Radius")); gtk_widget_show (label127); gtk_table_attach (GTK_TABLE (table17), label127, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label127), 0, 0.5); label128 = gtk_label_new (_("Radial Wire Diameter")); gtk_widget_show (label128); gtk_table_attach (GTK_TABLE (table17), label128, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label128), 0, 0.5); ground_nrad_spinbutton_adj = gtk_adjustment_new (4, 1, 1000, 1, 10, 0); ground_nrad_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground_nrad_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (ground_nrad_spinbutton); gtk_table_attach (GTK_TABLE (table17), ground_nrad_spinbutton, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground_nrad_spinbutton), TRUE); ground_diam_spinbutton_adj = gtk_adjustment_new (0.00499999988824, 9.99999974738e-06, 10, 9.99999974738e-06, 10, 0); ground_diam_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground_diam_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (ground_diam_spinbutton); gtk_table_attach (GTK_TABLE (table17), ground_diam_spinbutton, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground_diam_spinbutton), TRUE); ground_scrnrd_spinbutton_adj = gtk_adjustment_new (1, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); ground_scrnrd_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground_scrnrd_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (ground_scrnrd_spinbutton); gtk_table_attach (GTK_TABLE (table17), ground_scrnrd_spinbutton, 0, 1, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground_scrnrd_spinbutton), TRUE); label115 = gtk_label_new (_("Radial Screen Parameters")); gtk_widget_show (label115); gtk_frame_set_label_widget (GTK_FRAME (ground_radial_frame), label115); gtk_misc_set_padding (GTK_MISC (label115), 4, 4); hbox35 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox35); gtk_box_pack_start (GTK_BOX (vbox17), hbox35, TRUE, TRUE, 0); ground_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (ground_new_button); gtk_box_pack_start (GTK_BOX (hbox35), ground_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_new_button), 2); ground_cancel_button = gtk_button_new (); gtk_widget_show (ground_cancel_button); gtk_box_pack_start (GTK_BOX (hbox35), ground_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_cancel_button), 2); alignment61 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment61); gtk_container_add (GTK_CONTAINER (ground_cancel_button), alignment61); hbox59 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox59); gtk_container_add (GTK_CONTAINER (alignment61), hbox59); image81 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image81); gtk_box_pack_start (GTK_BOX (hbox59), image81, FALSE, FALSE, 0); label233 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label233); gtk_box_pack_start (GTK_BOX (hbox59), label233, FALSE, FALSE, 0); ground_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (ground_apply_button); gtk_box_pack_start (GTK_BOX (hbox35), ground_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_apply_button), 2); ground_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (ground_ok_button); gtk_box_pack_start (GTK_BOX (hbox35), ground_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (ground_ok_button), 2); g_signal_connect ((gpointer) ground_command, "destroy", G_CALLBACK (on_ground_command_destroy), NULL); g_signal_connect ((gpointer) ground_perf_radiobutton, "toggled", G_CALLBACK (on_ground_radiobutton_toggled), NULL); g_signal_connect ((gpointer) ground_refl_radiobutton, "toggled", G_CALLBACK (on_ground_radiobutton_toggled), NULL); g_signal_connect ((gpointer) ground_smfld_radiobutton, "toggled", G_CALLBACK (on_ground_radiobutton_toggled), NULL); g_signal_connect ((gpointer) ground_null_radiobutton, "toggled", G_CALLBACK (on_ground_radiobutton_toggled), NULL); g_signal_connect ((gpointer) ground_radl_checkbutton, "toggled", G_CALLBACK (on_ground_checkbutton_toggled), NULL); g_signal_connect ((gpointer) ground_secmd_checkbutton, "toggled", G_CALLBACK (on_ground_checkbutton_toggled), NULL); g_signal_connect ((gpointer) ground_diel1_spinbutton, "value_changed", G_CALLBACK (on_ground_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground_res1_spinbutton, "value_changed", G_CALLBACK (on_ground_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground_diel2_spinbutton, "value_changed", G_CALLBACK (on_ground_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground_res2_spinbutton, "value_changed", G_CALLBACK (on_ground_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground_below_spinbutton, "value_changed", G_CALLBACK (on_ground_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground_dist2_spinbutton, "value_changed", G_CALLBACK (on_ground_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground_nrad_spinbutton, "value_changed", G_CALLBACK (on_ground_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground_diam_spinbutton, "value_changed", G_CALLBACK (on_ground_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground_scrnrd_spinbutton, "value_changed", G_CALLBACK (on_ground_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground_new_button, "clicked", G_CALLBACK (on_ground_new_button_clicked), NULL); g_signal_connect ((gpointer) ground_cancel_button, "clicked", G_CALLBACK (on_ground_cancel_button_clicked), NULL); g_signal_connect ((gpointer) ground_apply_button, "clicked", G_CALLBACK (on_ground_apply_button_clicked), NULL); g_signal_connect ((gpointer) ground_ok_button, "clicked", G_CALLBACK (on_ground_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (ground_command, ground_command, "ground_command"); GLADE_HOOKUP_OBJECT (ground_command, vbox17, "vbox17"); GLADE_HOOKUP_OBJECT (ground_command, frame23, "frame23"); GLADE_HOOKUP_OBJECT (ground_command, alignment25, "alignment25"); GLADE_HOOKUP_OBJECT (ground_command, table15, "table15"); GLADE_HOOKUP_OBJECT (ground_command, ground_perf_radiobutton, "ground_perf_radiobutton"); GLADE_HOOKUP_OBJECT (ground_command, ground_refl_radiobutton, "ground_refl_radiobutton"); GLADE_HOOKUP_OBJECT (ground_command, ground_smfld_radiobutton, "ground_smfld_radiobutton"); GLADE_HOOKUP_OBJECT (ground_command, ground_null_radiobutton, "ground_null_radiobutton"); GLADE_HOOKUP_OBJECT (ground_command, ground_radl_checkbutton, "ground_radl_checkbutton"); GLADE_HOOKUP_OBJECT (ground_command, ground_secmd_checkbutton, "ground_secmd_checkbutton"); GLADE_HOOKUP_OBJECT (ground_command, label110, "label110"); GLADE_HOOKUP_OBJECT (ground_command, ground_med1_frame, "ground_med1_frame"); GLADE_HOOKUP_OBJECT (ground_command, alignment26, "alignment26"); GLADE_HOOKUP_OBJECT (ground_command, table16, "table16"); GLADE_HOOKUP_OBJECT (ground_command, ground_diel1_spinbutton, "ground_diel1_spinbutton"); GLADE_HOOKUP_OBJECT (ground_command, ground_res1_spinbutton, "ground_res1_spinbutton"); GLADE_HOOKUP_OBJECT (ground_command, label116, "label116"); GLADE_HOOKUP_OBJECT (ground_command, label117, "label117"); GLADE_HOOKUP_OBJECT (ground_command, label111, "label111"); GLADE_HOOKUP_OBJECT (ground_command, ground_med2_frame, "ground_med2_frame"); GLADE_HOOKUP_OBJECT (ground_command, alignment27, "alignment27"); GLADE_HOOKUP_OBJECT (ground_command, table18, "table18"); GLADE_HOOKUP_OBJECT (ground_command, label118, "label118"); GLADE_HOOKUP_OBJECT (ground_command, label123, "label123"); GLADE_HOOKUP_OBJECT (ground_command, label124, "label124"); GLADE_HOOKUP_OBJECT (ground_command, label125, "label125"); GLADE_HOOKUP_OBJECT (ground_command, ground_diel2_spinbutton, "ground_diel2_spinbutton"); GLADE_HOOKUP_OBJECT (ground_command, ground_res2_spinbutton, "ground_res2_spinbutton"); GLADE_HOOKUP_OBJECT (ground_command, ground_below_spinbutton, "ground_below_spinbutton"); GLADE_HOOKUP_OBJECT (ground_command, ground_dist2_spinbutton, "ground_dist2_spinbutton"); GLADE_HOOKUP_OBJECT (ground_command, label114, "label114"); GLADE_HOOKUP_OBJECT (ground_command, ground_radial_frame, "ground_radial_frame"); GLADE_HOOKUP_OBJECT (ground_command, alignment28, "alignment28"); GLADE_HOOKUP_OBJECT (ground_command, table17, "table17"); GLADE_HOOKUP_OBJECT (ground_command, label126, "label126"); GLADE_HOOKUP_OBJECT (ground_command, label127, "label127"); GLADE_HOOKUP_OBJECT (ground_command, label128, "label128"); GLADE_HOOKUP_OBJECT (ground_command, ground_nrad_spinbutton, "ground_nrad_spinbutton"); GLADE_HOOKUP_OBJECT (ground_command, ground_diam_spinbutton, "ground_diam_spinbutton"); GLADE_HOOKUP_OBJECT (ground_command, ground_scrnrd_spinbutton, "ground_scrnrd_spinbutton"); GLADE_HOOKUP_OBJECT (ground_command, label115, "label115"); GLADE_HOOKUP_OBJECT (ground_command, hbox35, "hbox35"); GLADE_HOOKUP_OBJECT (ground_command, ground_new_button, "ground_new_button"); GLADE_HOOKUP_OBJECT (ground_command, ground_cancel_button, "ground_cancel_button"); GLADE_HOOKUP_OBJECT (ground_command, alignment61, "alignment61"); GLADE_HOOKUP_OBJECT (ground_command, hbox59, "hbox59"); GLADE_HOOKUP_OBJECT (ground_command, image81, "image81"); GLADE_HOOKUP_OBJECT (ground_command, label233, "label233"); GLADE_HOOKUP_OBJECT (ground_command, ground_apply_button, "ground_apply_button"); GLADE_HOOKUP_OBJECT (ground_command, ground_ok_button, "ground_ok_button"); return ground_command; } GtkWidget* create_nearfield_command (void) { GtkWidget *nearfield_command; GtkWidget *vbox18; GtkWidget *frame27; GtkWidget *alignment29; GtkWidget *table20; GtkWidget *nearfield_nh_checkbutton; GtkWidget *nearfield_ne_checkbutton; GtkWidget *nearfield_rect_radiobutton; GSList *nearfield_rect_radiobutton_group = NULL; GtkWidget *nearfield_sph_radiobutton; GtkWidget *label129; GtkWidget *frame28; GtkWidget *alignment30; GtkWidget *table19; GtkWidget *nearfield_i1_label; GtkWidget *nearfield_i2_label; GtkWidget *nearfield_i3_label; GtkWidget *nearfield_f1_label; GtkWidget *nearfield_f2_label; GtkWidget *nearfield_f3_label; GtkWidget *nearfield_f4_label; GtkWidget *nearfield_f5_label; GtkWidget *nearfield_f6_label; GtkObject *nearfield_nx_spinbutton_adj; GtkWidget *nearfield_nx_spinbutton; GtkObject *nearfield_ny_spinbutton_adj; GtkWidget *nearfield_ny_spinbutton; GtkObject *nearfield_nz_spinbutton_adj; GtkWidget *nearfield_nz_spinbutton; GtkObject *nearfield_f1_spinbutton_adj; GtkWidget *nearfield_f1_spinbutton; GtkObject *nearfield_f2_spinbutton_adj; GtkWidget *nearfield_f2_spinbutton; GtkObject *nearfield_f3_spinbutton_adj; GtkWidget *nearfield_f3_spinbutton; GtkObject *nearfield_f4_spinbutton_adj; GtkWidget *nearfield_f4_spinbutton; GtkObject *nearfield_f5_spinbutton_adj; GtkWidget *nearfield_f5_spinbutton; GtkObject *nearfield_f6_spinbutton_adj; GtkWidget *nearfield_f6_spinbutton; GtkWidget *label130; GtkWidget *hbox36; GtkWidget *nearfield_new_button; GtkWidget *nearfield_cancel_button; GtkWidget *alignment62; GtkWidget *hbox60; GtkWidget *image82; GtkWidget *label234; GtkWidget *nearfield_apply_button; GtkWidget *nearfield_ok_button; nearfield_command = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (nearfield_command), 4); gtk_window_set_title (GTK_WINDOW (nearfield_command), _("Near Fields Command (NE/NH Cards)")); vbox18 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox18); gtk_container_add (GTK_CONTAINER (nearfield_command), vbox18); frame27 = gtk_frame_new (NULL); gtk_widget_show (frame27); gtk_box_pack_start (GTK_BOX (vbox18), frame27, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame27), 4); alignment29 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment29); gtk_container_add (GTK_CONTAINER (frame27), alignment29); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment29), 0, 0, 12, 0); table20 = gtk_table_new (2, 2, TRUE); gtk_widget_show (table20); gtk_container_add (GTK_CONTAINER (alignment29), table20); nearfield_nh_checkbutton = gtk_check_button_new_with_mnemonic (_("Near Magnetic Field")); gtk_widget_show (nearfield_nh_checkbutton); gtk_table_attach (GTK_TABLE (table20), nearfield_nh_checkbutton, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (nearfield_nh_checkbutton), 2); nearfield_ne_checkbutton = gtk_check_button_new_with_mnemonic (_("Near Electric Field")); gtk_widget_show (nearfield_ne_checkbutton); gtk_table_attach (GTK_TABLE (table20), nearfield_ne_checkbutton, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (nearfield_ne_checkbutton), 2); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (nearfield_ne_checkbutton), TRUE); nearfield_rect_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Rectangular Co-ordinates")); gtk_widget_show (nearfield_rect_radiobutton); gtk_table_attach (GTK_TABLE (table20), nearfield_rect_radiobutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (nearfield_rect_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (nearfield_rect_radiobutton), nearfield_rect_radiobutton_group); nearfield_rect_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (nearfield_rect_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (nearfield_rect_radiobutton), TRUE); nearfield_sph_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Spherical Co-ordinates")); gtk_widget_show (nearfield_sph_radiobutton); gtk_table_attach (GTK_TABLE (table20), nearfield_sph_radiobutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (nearfield_sph_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (nearfield_sph_radiobutton), nearfield_rect_radiobutton_group); nearfield_rect_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (nearfield_sph_radiobutton)); label129 = gtk_label_new (_("Field Type & Co-ordinates")); gtk_widget_show (label129); gtk_frame_set_label_widget (GTK_FRAME (frame27), label129); gtk_misc_set_padding (GTK_MISC (label129), 4, 4); frame28 = gtk_frame_new (NULL); gtk_widget_show (frame28); gtk_box_pack_start (GTK_BOX (vbox18), frame28, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame28), 4); alignment30 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment30); gtk_container_add (GTK_CONTAINER (frame28), alignment30); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment30), 0, 0, 12, 0); table19 = gtk_table_new (6, 3, FALSE); gtk_widget_show (table19); gtk_container_add (GTK_CONTAINER (alignment30), table19); nearfield_i1_label = gtk_label_new (_("NX")); gtk_widget_show (nearfield_i1_label); gtk_table_attach (GTK_TABLE (table19), nearfield_i1_label, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (nearfield_i1_label), 0.1, 0.5); nearfield_i2_label = gtk_label_new (_("NY")); gtk_widget_show (nearfield_i2_label); gtk_table_attach (GTK_TABLE (table19), nearfield_i2_label, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (nearfield_i2_label), 0.1, 0.5); nearfield_i3_label = gtk_label_new (_("NZ")); gtk_widget_show (nearfield_i3_label); gtk_table_attach (GTK_TABLE (table19), nearfield_i3_label, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (nearfield_i3_label), 0.1, 0.5); nearfield_f1_label = gtk_label_new (_("X")); gtk_widget_show (nearfield_f1_label); gtk_table_attach (GTK_TABLE (table19), nearfield_f1_label, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (nearfield_f1_label), 0.1, 0.5); nearfield_f2_label = gtk_label_new (_("Y")); gtk_widget_show (nearfield_f2_label); gtk_table_attach (GTK_TABLE (table19), nearfield_f2_label, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (nearfield_f2_label), 0.1, 0.5); nearfield_f3_label = gtk_label_new (_("Z")); gtk_widget_show (nearfield_f3_label); gtk_table_attach (GTK_TABLE (table19), nearfield_f3_label, 2, 3, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (nearfield_f3_label), 0.1, 0.5); nearfield_f4_label = gtk_label_new (_("DX")); gtk_widget_show (nearfield_f4_label); gtk_table_attach (GTK_TABLE (table19), nearfield_f4_label, 0, 1, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (nearfield_f4_label), 0.1, 0.5); nearfield_f5_label = gtk_label_new (_("DY")); gtk_widget_show (nearfield_f5_label); gtk_table_attach (GTK_TABLE (table19), nearfield_f5_label, 1, 2, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (nearfield_f5_label), 0.1, 0.5); nearfield_f6_label = gtk_label_new (_("DZ")); gtk_widget_show (nearfield_f6_label); gtk_table_attach (GTK_TABLE (table19), nearfield_f6_label, 2, 3, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (nearfield_f6_label), 0.1, 0.5); nearfield_nx_spinbutton_adj = gtk_adjustment_new (4, 1, 10000, 1, 10, 0); nearfield_nx_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (nearfield_nx_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (nearfield_nx_spinbutton); gtk_table_attach (GTK_TABLE (table19), nearfield_nx_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (nearfield_nx_spinbutton), TRUE); nearfield_ny_spinbutton_adj = gtk_adjustment_new (4, 1, 10000, 1, 10, 0); nearfield_ny_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (nearfield_ny_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (nearfield_ny_spinbutton); gtk_table_attach (GTK_TABLE (table19), nearfield_ny_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (nearfield_ny_spinbutton), TRUE); nearfield_nz_spinbutton_adj = gtk_adjustment_new (4, 1, 10000, 1, 10, 0); nearfield_nz_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (nearfield_nz_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (nearfield_nz_spinbutton); gtk_table_attach (GTK_TABLE (table19), nearfield_nz_spinbutton, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (nearfield_nz_spinbutton), TRUE); nearfield_f1_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); nearfield_f1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (nearfield_f1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (nearfield_f1_spinbutton); gtk_table_attach (GTK_TABLE (table19), nearfield_f1_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (nearfield_f1_spinbutton), TRUE); nearfield_f2_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); nearfield_f2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (nearfield_f2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (nearfield_f2_spinbutton); gtk_table_attach (GTK_TABLE (table19), nearfield_f2_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (nearfield_f2_spinbutton), TRUE); nearfield_f3_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); nearfield_f3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (nearfield_f3_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (nearfield_f3_spinbutton); gtk_table_attach (GTK_TABLE (table19), nearfield_f3_spinbutton, 2, 3, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (nearfield_f3_spinbutton), TRUE); nearfield_f4_spinbutton_adj = gtk_adjustment_new (1, -1000, 1000, 9.99999974738e-06, 10, 0); nearfield_f4_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (nearfield_f4_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (nearfield_f4_spinbutton); gtk_table_attach (GTK_TABLE (table19), nearfield_f4_spinbutton, 0, 1, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (nearfield_f4_spinbutton), TRUE); nearfield_f5_spinbutton_adj = gtk_adjustment_new (1, -1000, 1000, 9.99999974738e-06, 10, 0); nearfield_f5_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (nearfield_f5_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (nearfield_f5_spinbutton); gtk_table_attach (GTK_TABLE (table19), nearfield_f5_spinbutton, 1, 2, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (nearfield_f5_spinbutton), TRUE); nearfield_f6_spinbutton_adj = gtk_adjustment_new (1, -1000, 1000, 9.99999974738e-06, 10, 0); nearfield_f6_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (nearfield_f6_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (nearfield_f6_spinbutton); gtk_table_attach (GTK_TABLE (table19), nearfield_f6_spinbutton, 2, 3, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (nearfield_f6_spinbutton), TRUE); label130 = gtk_label_new (_("Field Pattern Parameters")); gtk_widget_show (label130); gtk_frame_set_label_widget (GTK_FRAME (frame28), label130); gtk_misc_set_padding (GTK_MISC (label130), 4, 4); hbox36 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox36); gtk_box_pack_start (GTK_BOX (vbox18), hbox36, TRUE, TRUE, 0); nearfield_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (nearfield_new_button); gtk_box_pack_start (GTK_BOX (hbox36), nearfield_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (nearfield_new_button), 2); nearfield_cancel_button = gtk_button_new (); gtk_widget_show (nearfield_cancel_button); gtk_box_pack_start (GTK_BOX (hbox36), nearfield_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (nearfield_cancel_button), 2); alignment62 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment62); gtk_container_add (GTK_CONTAINER (nearfield_cancel_button), alignment62); hbox60 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox60); gtk_container_add (GTK_CONTAINER (alignment62), hbox60); image82 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image82); gtk_box_pack_start (GTK_BOX (hbox60), image82, FALSE, FALSE, 0); label234 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label234); gtk_box_pack_start (GTK_BOX (hbox60), label234, FALSE, FALSE, 0); nearfield_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (nearfield_apply_button); gtk_box_pack_start (GTK_BOX (hbox36), nearfield_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (nearfield_apply_button), 2); nearfield_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (nearfield_ok_button); gtk_box_pack_start (GTK_BOX (hbox36), nearfield_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (nearfield_ok_button), 2); g_signal_connect ((gpointer) nearfield_command, "destroy", G_CALLBACK (on_nearfield_command_destroy), NULL); g_signal_connect ((gpointer) nearfield_nh_checkbutton, "toggled", G_CALLBACK (on_nearfield_nh_checkbutton_toggled), NULL); g_signal_connect ((gpointer) nearfield_ne_checkbutton, "toggled", G_CALLBACK (on_nearfield_ne_checkbutton_toggled), NULL); g_signal_connect ((gpointer) nearfield_rect_radiobutton, "toggled", G_CALLBACK (on_nearfield_radiobutton_toggled), NULL); g_signal_connect ((gpointer) nearfield_sph_radiobutton, "toggled", G_CALLBACK (on_nearfield_radiobutton_toggled), NULL); g_signal_connect ((gpointer) nearfield_nx_spinbutton, "value_changed", G_CALLBACK (on_nearfield_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) nearfield_ny_spinbutton, "value_changed", G_CALLBACK (on_nearfield_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) nearfield_nz_spinbutton, "value_changed", G_CALLBACK (on_nearfield_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) nearfield_f1_spinbutton, "value_changed", G_CALLBACK (on_nearfield_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) nearfield_f2_spinbutton, "value_changed", G_CALLBACK (on_nearfield_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) nearfield_f3_spinbutton, "value_changed", G_CALLBACK (on_nearfield_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) nearfield_f4_spinbutton, "value_changed", G_CALLBACK (on_nearfield_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) nearfield_f5_spinbutton, "value_changed", G_CALLBACK (on_nearfield_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) nearfield_f6_spinbutton, "value_changed", G_CALLBACK (on_nearfield_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) nearfield_new_button, "clicked", G_CALLBACK (on_nearfield_new_button_clicked), NULL); g_signal_connect ((gpointer) nearfield_cancel_button, "clicked", G_CALLBACK (on_nearfield_cancel_button_clicked), NULL); g_signal_connect ((gpointer) nearfield_apply_button, "clicked", G_CALLBACK (on_nearfield_apply_button_clicked), NULL); g_signal_connect ((gpointer) nearfield_ok_button, "clicked", G_CALLBACK (on_nearfield_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (nearfield_command, nearfield_command, "nearfield_command"); GLADE_HOOKUP_OBJECT (nearfield_command, vbox18, "vbox18"); GLADE_HOOKUP_OBJECT (nearfield_command, frame27, "frame27"); GLADE_HOOKUP_OBJECT (nearfield_command, alignment29, "alignment29"); GLADE_HOOKUP_OBJECT (nearfield_command, table20, "table20"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_nh_checkbutton, "nearfield_nh_checkbutton"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_ne_checkbutton, "nearfield_ne_checkbutton"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_rect_radiobutton, "nearfield_rect_radiobutton"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_sph_radiobutton, "nearfield_sph_radiobutton"); GLADE_HOOKUP_OBJECT (nearfield_command, label129, "label129"); GLADE_HOOKUP_OBJECT (nearfield_command, frame28, "frame28"); GLADE_HOOKUP_OBJECT (nearfield_command, alignment30, "alignment30"); GLADE_HOOKUP_OBJECT (nearfield_command, table19, "table19"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_i1_label, "nearfield_i1_label"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_i2_label, "nearfield_i2_label"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_i3_label, "nearfield_i3_label"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_f1_label, "nearfield_f1_label"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_f2_label, "nearfield_f2_label"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_f3_label, "nearfield_f3_label"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_f4_label, "nearfield_f4_label"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_f5_label, "nearfield_f5_label"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_f6_label, "nearfield_f6_label"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_nx_spinbutton, "nearfield_nx_spinbutton"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_ny_spinbutton, "nearfield_ny_spinbutton"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_nz_spinbutton, "nearfield_nz_spinbutton"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_f1_spinbutton, "nearfield_f1_spinbutton"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_f2_spinbutton, "nearfield_f2_spinbutton"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_f3_spinbutton, "nearfield_f3_spinbutton"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_f4_spinbutton, "nearfield_f4_spinbutton"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_f5_spinbutton, "nearfield_f5_spinbutton"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_f6_spinbutton, "nearfield_f6_spinbutton"); GLADE_HOOKUP_OBJECT (nearfield_command, label130, "label130"); GLADE_HOOKUP_OBJECT (nearfield_command, hbox36, "hbox36"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_new_button, "nearfield_new_button"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_cancel_button, "nearfield_cancel_button"); GLADE_HOOKUP_OBJECT (nearfield_command, alignment62, "alignment62"); GLADE_HOOKUP_OBJECT (nearfield_command, hbox60, "hbox60"); GLADE_HOOKUP_OBJECT (nearfield_command, image82, "image82"); GLADE_HOOKUP_OBJECT (nearfield_command, label234, "label234"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_apply_button, "nearfield_apply_button"); GLADE_HOOKUP_OBJECT (nearfield_command, nearfield_ok_button, "nearfield_ok_button"); return nearfield_command; } GtkWidget* create_radiation_command (void) { GtkWidget *radiation_command; GtkWidget *vbox19; GtkWidget *frame29; GtkWidget *alignment31; GtkWidget *table21; GtkWidget *radiation_i10_radiobutton; GSList *radiation_i10_radiobutton_group = NULL; GtkWidget *radiation_i16_radiobutton; GtkWidget *radiation_i14_radiobutton; GtkWidget *radiation_i12_radiobutton; GtkWidget *radiation_i11_radiobutton; GtkWidget *radiation_i13_radiobutton; GtkWidget *radiation_i15_radiobutton; GtkWidget *label145; GtkWidget *label140; GtkWidget *frame33; GtkWidget *alignment35; GtkWidget *table22; GtkWidget *radiation_x0_radiobutton; GSList *radiation_x0_radiobutton_group = NULL; GtkWidget *radiation_x1_radiobutton; GtkWidget *radiation_n0_radiobutton; GSList *radiation_n0_radiobutton_group = NULL; GtkWidget *radiation_n2_radiobutton; GtkWidget *radiation_n4_radiobutton; GtkWidget *radiation_d0_radiobutton; GSList *radiation_d0_radiobutton_group = NULL; GtkWidget *radiation_a0_radiobutton; GSList *radiation_a0_radiobutton_group = NULL; GtkWidget *radiation_a2_radiobutton; GtkWidget *radiation_a1_radiobutton; GtkWidget *radiation_d1_radiobutton; GtkWidget *radiation_n5_radiobutton; GtkWidget *radiation_n3_radiobutton; GtkWidget *radiation_n1_radiobutton; GtkWidget *label146; GtkWidget *hseparator5; GtkWidget *hseparator6; GtkWidget *hseparator7; GtkWidget *hseparator8; GtkWidget *hseparator9; GtkWidget *hseparator10; GtkWidget *label144; GtkWidget *frame31; GtkWidget *alignment33; GtkWidget *table23; GtkWidget *radiation_f6_label; GtkObject *radiation_f1_spinbutton_adj; GtkWidget *radiation_f1_spinbutton; GtkObject *radiation_f2_spinbutton_adj; GtkWidget *radiation_f2_spinbutton; GtkObject *radiation_f6_spinbutton_adj; GtkWidget *radiation_f6_spinbutton; GtkWidget *radiation_f1_label; GtkWidget *label148; GtkObject *radiation_i3_spinbutton_adj; GtkWidget *radiation_i3_spinbutton; GtkObject *radiation_i2_spinbutton_adj; GtkWidget *radiation_i2_spinbutton; GtkWidget *radiation_i1_label; GtkWidget *label210; GtkWidget *radiation_f3_label; GtkObject *radiation_f3_spinbutton_adj; GtkWidget *radiation_f3_spinbutton; GtkWidget *radiation_f5_label; GtkObject *radiation_f5_spinbutton_adj; GtkWidget *radiation_f5_spinbutton; GtkWidget *label150; GtkObject *radiation_f4_spinbutton_adj; GtkWidget *radiation_f4_spinbutton; GtkWidget *label142; GtkWidget *hbox37; GtkWidget *radiation_new_button; GtkWidget *radiation_cancel_button; GtkWidget *alignment63; GtkWidget *hbox61; GtkWidget *image83; GtkWidget *label235; GtkWidget *radiation_apply_button; GtkWidget *radiation_ok_button; radiation_command = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (radiation_command), 4); gtk_window_set_title (GTK_WINDOW (radiation_command), _("Radiation Pattern (RP Card)")); gtk_window_set_icon_name (GTK_WINDOW (radiation_command), "gtk-dialog-info"); vbox19 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox19); gtk_container_add (GTK_CONTAINER (radiation_command), vbox19); frame29 = gtk_frame_new (NULL); gtk_widget_show (frame29); gtk_box_pack_start (GTK_BOX (vbox19), frame29, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame29), 4); alignment31 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment31); gtk_container_add (GTK_CONTAINER (frame29), alignment31); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment31), 0, 0, 12, 0); table21 = gtk_table_new (4, 2, FALSE); gtk_widget_show (table21); gtk_container_add (GTK_CONTAINER (alignment31), table21); radiation_i10_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Normal (Space) Wave")); gtk_widget_show (radiation_i10_radiobutton); gtk_table_attach (GTK_TABLE (table21), radiation_i10_radiobutton, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_i10_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_i10_radiobutton), radiation_i10_radiobutton_group); radiation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_i10_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiation_i10_radiobutton), TRUE); radiation_i16_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Circular Cliff + Radials")); gtk_widget_show (radiation_i16_radiobutton); gtk_table_attach (GTK_TABLE (table21), radiation_i16_radiobutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_i16_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_i16_radiobutton), radiation_i10_radiobutton_group); radiation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_i16_radiobutton)); radiation_i14_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Radial wire screen")); gtk_widget_show (radiation_i14_radiobutton); gtk_table_attach (GTK_TABLE (table21), radiation_i14_radiobutton, 0, 1, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_i14_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_i14_radiobutton), radiation_i10_radiobutton_group); radiation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_i14_radiobutton)); radiation_i12_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Linear Cliff")); gtk_widget_show (radiation_i12_radiobutton); gtk_table_attach (GTK_TABLE (table21), radiation_i12_radiobutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_i12_radiobutton), radiation_i10_radiobutton_group); radiation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_i12_radiobutton)); radiation_i11_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Space + Ground Wave")); gtk_widget_show (radiation_i11_radiobutton); gtk_table_attach (GTK_TABLE (table21), radiation_i11_radiobutton, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_i11_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_i11_radiobutton), radiation_i10_radiobutton_group); radiation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_i11_radiobutton)); radiation_i13_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Circular Cliff")); gtk_widget_show (radiation_i13_radiobutton); gtk_table_attach (GTK_TABLE (table21), radiation_i13_radiobutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_i13_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_i13_radiobutton), radiation_i10_radiobutton_group); radiation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_i13_radiobutton)); radiation_i15_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Linear Cliff + Radials")); gtk_widget_show (radiation_i15_radiobutton); gtk_table_attach (GTK_TABLE (table21), radiation_i15_radiobutton, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_i15_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_i15_radiobutton), radiation_i10_radiobutton_group); radiation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_i15_radiobutton)); label145 = gtk_label_new (_("See GN/GD Card Documentation")); gtk_widget_show (label145); gtk_table_attach (GTK_TABLE (table21), label145, 1, 2, 3, 4, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label145), TRUE); gtk_misc_set_alignment (GTK_MISC (label145), 0, 0.5); label140 = gtk_label_new (_("Wave Type and Ground (I1)")); gtk_widget_show (label140); gtk_frame_set_label_widget (GTK_FRAME (frame29), label140); gtk_misc_set_padding (GTK_MISC (label140), 4, 4); frame33 = gtk_frame_new (NULL); gtk_widget_show (frame33); gtk_box_pack_start (GTK_BOX (vbox19), frame33, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame33), 4); alignment35 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment35); gtk_container_add (GTK_CONTAINER (frame33), alignment35); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment35), 0, 0, 12, 0); table22 = gtk_table_new (10, 2, FALSE); gtk_widget_show (table22); gtk_container_add (GTK_CONTAINER (alignment35), table22); radiation_x0_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Major & Minor Axis & Total Gain")); gtk_widget_show (radiation_x0_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_x0_radiobutton, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_x0_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_x0_radiobutton), radiation_x0_radiobutton_group); radiation_x0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_x0_radiobutton)); radiation_x1_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Vertical, Horizontal & Total Gain")); gtk_widget_show (radiation_x1_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_x1_radiobutton, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_x1_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_x1_radiobutton), radiation_x0_radiobutton_group); radiation_x0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_x1_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiation_x1_radiobutton), TRUE); radiation_n0_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("No Normalized Gain")); gtk_widget_show (radiation_n0_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_n0_radiobutton, 0, 1, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_n0_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_n0_radiobutton), radiation_n0_radiobutton_group); radiation_n0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_n0_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiation_n0_radiobutton), TRUE); radiation_n2_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Minor Axis Gain Normalized")); gtk_widget_show (radiation_n2_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_n2_radiobutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_n2_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_n2_radiobutton), radiation_n0_radiobutton_group); radiation_n0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_n2_radiobutton)); radiation_n4_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Horizontal Axis Gain Normalized")); gtk_widget_show (radiation_n4_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_n4_radiobutton, 0, 1, 4, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_n4_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_n4_radiobutton), radiation_n0_radiobutton_group); radiation_n0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_n4_radiobutton)); radiation_d0_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Print/Normalize Power Gain")); gtk_widget_show (radiation_d0_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_d0_radiobutton, 0, 1, 6, 7, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_d0_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_d0_radiobutton), radiation_d0_radiobutton_group); radiation_d0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_d0_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radiation_d0_radiobutton), TRUE); radiation_a0_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("No Gain Averaging")); gtk_widget_show (radiation_a0_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_a0_radiobutton, 0, 1, 8, 9, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_a0_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_a0_radiobutton), radiation_a0_radiobutton_group); radiation_a0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_a0_radiobutton)); radiation_a2_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Points in Average Not Printed")); gtk_widget_show (radiation_a2_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_a2_radiobutton, 0, 1, 9, 10, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_a2_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_a2_radiobutton), radiation_a0_radiobutton_group); radiation_a0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_a2_radiobutton)); radiation_a1_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Average Gain Computed")); gtk_widget_show (radiation_a1_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_a1_radiobutton, 1, 2, 8, 9, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_a1_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_a1_radiobutton), radiation_a0_radiobutton_group); radiation_a0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_a1_radiobutton)); radiation_d1_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Print/Normalize Directive Gain")); gtk_widget_show (radiation_d1_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_d1_radiobutton, 1, 2, 6, 7, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_d1_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_d1_radiobutton), radiation_d0_radiobutton_group); radiation_d0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_d1_radiobutton)); radiation_n5_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Total Gain Normalized")); gtk_widget_show (radiation_n5_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_n5_radiobutton, 1, 2, 4, 5, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_n5_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_n5_radiobutton), radiation_n0_radiobutton_group); radiation_n0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_n5_radiobutton)); radiation_n3_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Vertical Axis Gain Normalized")); gtk_widget_show (radiation_n3_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_n3_radiobutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_n3_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_n3_radiobutton), radiation_n0_radiobutton_group); radiation_n0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_n3_radiobutton)); radiation_n1_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Major Axis Gain Normalized")); gtk_widget_show (radiation_n1_radiobutton); gtk_table_attach (GTK_TABLE (table22), radiation_n1_radiobutton, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_n1_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiation_n1_radiobutton), radiation_n0_radiobutton_group); radiation_n0_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiation_n1_radiobutton)); label146 = gtk_label_new (_("See RP Card Documentation")); gtk_widget_show (label146); gtk_table_attach (GTK_TABLE (table22), label146, 1, 2, 9, 10, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_label_set_use_markup (GTK_LABEL (label146), TRUE); gtk_misc_set_alignment (GTK_MISC (label146), 0, 0.5); hseparator5 = gtk_hseparator_new (); gtk_widget_show (hseparator5); gtk_table_attach (GTK_TABLE (table22), hseparator5, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); hseparator6 = gtk_hseparator_new (); gtk_widget_show (hseparator6); gtk_table_attach (GTK_TABLE (table22), hseparator6, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); hseparator7 = gtk_hseparator_new (); gtk_widget_show (hseparator7); gtk_table_attach (GTK_TABLE (table22), hseparator7, 0, 1, 5, 6, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); hseparator8 = gtk_hseparator_new (); gtk_widget_show (hseparator8); gtk_table_attach (GTK_TABLE (table22), hseparator8, 1, 2, 5, 6, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); hseparator9 = gtk_hseparator_new (); gtk_widget_show (hseparator9); gtk_table_attach (GTK_TABLE (table22), hseparator9, 0, 1, 7, 8, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); hseparator10 = gtk_hseparator_new (); gtk_widget_show (hseparator10); gtk_table_attach (GTK_TABLE (table22), hseparator10, 1, 2, 7, 8, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (GTK_FILL), 0, 0); label144 = gtk_label_new (_("Data Output Control (XNDA)")); gtk_widget_show (label144); gtk_frame_set_label_widget (GTK_FRAME (frame33), label144); gtk_misc_set_padding (GTK_MISC (label144), 4, 4); frame31 = gtk_frame_new (NULL); gtk_widget_show (frame31); gtk_box_pack_start (GTK_BOX (vbox19), frame31, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame31), 5); alignment33 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment33); gtk_container_add (GTK_CONTAINER (frame31), alignment33); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment33), 0, 0, 12, 0); table23 = gtk_table_new (6, 3, FALSE); gtk_widget_show (table23); gtk_container_add (GTK_CONTAINER (alignment33), table23); radiation_f6_label = gtk_label_new (_("Gain Normalization")); gtk_widget_show (radiation_f6_label); gtk_table_attach (GTK_TABLE (table23), radiation_f6_label, 2, 3, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (radiation_f6_label), 0.1, 0.5); radiation_f1_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); radiation_f1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (radiation_f1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (radiation_f1_spinbutton); gtk_table_attach (GTK_TABLE (table23), radiation_f1_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (radiation_f1_spinbutton), TRUE); radiation_f2_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); radiation_f2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (radiation_f2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (radiation_f2_spinbutton); gtk_table_attach (GTK_TABLE (table23), radiation_f2_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (radiation_f2_spinbutton), TRUE); radiation_f6_spinbutton_adj = gtk_adjustment_new (0, -1000, 1000, 9.99999974738e-06, 10, 0); radiation_f6_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (radiation_f6_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (radiation_f6_spinbutton); gtk_table_attach (GTK_TABLE (table23), radiation_f6_spinbutton, 2, 3, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (radiation_f6_spinbutton), TRUE); radiation_f1_label = gtk_label_new (_("Initial Theta (deg)")); gtk_widget_show (radiation_f1_label); gtk_table_attach (GTK_TABLE (table23), radiation_f1_label, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (radiation_f1_label), 0.1, 0.5); label148 = gtk_label_new (_("Initial Phi (deg)")); gtk_widget_show (label148); gtk_table_attach (GTK_TABLE (table23), label148, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label148), 0.1, 0.5); radiation_i3_spinbutton_adj = gtk_adjustment_new (4, 1, 10000, 1, 10, 0); radiation_i3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (radiation_i3_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (radiation_i3_spinbutton); gtk_table_attach (GTK_TABLE (table23), radiation_i3_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (radiation_i3_spinbutton), TRUE); radiation_i2_spinbutton_adj = gtk_adjustment_new (4, 1, 10000, 1, 10, 0); radiation_i2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (radiation_i2_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (radiation_i2_spinbutton); gtk_table_attach (GTK_TABLE (table23), radiation_i2_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (radiation_i2_spinbutton), TRUE); radiation_i1_label = gtk_label_new (_("Points in Phi")); gtk_widget_show (radiation_i1_label); gtk_table_attach (GTK_TABLE (table23), radiation_i1_label, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (radiation_i1_label), 0.1, 0.5); label210 = gtk_label_new (_("Points in Theta")); gtk_widget_show (label210); gtk_table_attach (GTK_TABLE (table23), label210, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label210), 0.1, 0.5); radiation_f3_label = gtk_label_new (_("Increment in Theta")); gtk_widget_show (radiation_f3_label); gtk_table_attach (GTK_TABLE (table23), radiation_f3_label, 0, 1, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (radiation_f3_label), 0.1, 0.5); radiation_f3_spinbutton_adj = gtk_adjustment_new (5, -1000, 1000, 9.99999974738e-06, 10, 0); radiation_f3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (radiation_f3_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (radiation_f3_spinbutton); gtk_table_attach (GTK_TABLE (table23), radiation_f3_spinbutton, 0, 1, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (radiation_f3_spinbutton), TRUE); radiation_f5_label = gtk_label_new (_("Field Point Distance")); gtk_widget_show (radiation_f5_label); gtk_table_attach (GTK_TABLE (table23), radiation_f5_label, 2, 3, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (radiation_f5_label), 0.1, 0.5); radiation_f5_spinbutton_adj = gtk_adjustment_new (0, -1000, 1000, 9.99999974738e-06, 10, 0); radiation_f5_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (radiation_f5_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (radiation_f5_spinbutton); gtk_table_attach (GTK_TABLE (table23), radiation_f5_spinbutton, 2, 3, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (radiation_f5_spinbutton), TRUE); label150 = gtk_label_new (_("Increment in Phi")); gtk_widget_show (label150); gtk_table_attach (GTK_TABLE (table23), label150, 1, 2, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label150), 0.1, 0.5); radiation_f4_spinbutton_adj = gtk_adjustment_new (5, -1000, 1000, 9.99999974738e-06, 10, 0); radiation_f4_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (radiation_f4_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (radiation_f4_spinbutton); gtk_table_attach (GTK_TABLE (table23), radiation_f4_spinbutton, 1, 2, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (radiation_f4_spinbutton), TRUE); label142 = gtk_label_new (_("Radiation Pattern Parameters")); gtk_widget_show (label142); gtk_frame_set_label_widget (GTK_FRAME (frame31), label142); gtk_misc_set_padding (GTK_MISC (label142), 4, 4); hbox37 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox37); gtk_box_pack_start (GTK_BOX (vbox19), hbox37, TRUE, TRUE, 0); radiation_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (radiation_new_button); gtk_box_pack_start (GTK_BOX (hbox37), radiation_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_new_button), 2); radiation_cancel_button = gtk_button_new (); gtk_widget_show (radiation_cancel_button); gtk_box_pack_start (GTK_BOX (hbox37), radiation_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_cancel_button), 2); alignment63 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment63); gtk_container_add (GTK_CONTAINER (radiation_cancel_button), alignment63); hbox61 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox61); gtk_container_add (GTK_CONTAINER (alignment63), hbox61); image83 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image83); gtk_box_pack_start (GTK_BOX (hbox61), image83, FALSE, FALSE, 0); label235 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label235); gtk_box_pack_start (GTK_BOX (hbox61), label235, FALSE, FALSE, 0); radiation_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (radiation_apply_button); gtk_box_pack_start (GTK_BOX (hbox37), radiation_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_apply_button), 2); radiation_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (radiation_ok_button); gtk_box_pack_start (GTK_BOX (hbox37), radiation_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (radiation_ok_button), 2); g_signal_connect ((gpointer) radiation_command, "destroy", G_CALLBACK (on_radiation_command_destroy), NULL); g_signal_connect ((gpointer) radiation_i10_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_i16_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_i14_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_i12_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_i11_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_i13_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_i15_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_x0_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_x1_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_n0_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_n2_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_n4_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_d0_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_a0_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_a2_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_a1_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_d1_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_n5_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_n3_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_n1_radiobutton, "toggled", G_CALLBACK (on_radiation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) radiation_f1_spinbutton, "value_changed", G_CALLBACK (on_radiation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) radiation_f2_spinbutton, "value_changed", G_CALLBACK (on_radiation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) radiation_f6_spinbutton, "value_changed", G_CALLBACK (on_radiation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) radiation_i3_spinbutton, "value_changed", G_CALLBACK (on_radiation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) radiation_i2_spinbutton, "value_changed", G_CALLBACK (on_radiation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) radiation_f3_spinbutton, "value_changed", G_CALLBACK (on_radiation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) radiation_f5_spinbutton, "value_changed", G_CALLBACK (on_radiation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) radiation_f4_spinbutton, "value_changed", G_CALLBACK (on_radiation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) radiation_new_button, "clicked", G_CALLBACK (on_radiation_new_button_clicked), NULL); g_signal_connect ((gpointer) radiation_cancel_button, "clicked", G_CALLBACK (on_radiation_cancel_button_clicked), NULL); g_signal_connect ((gpointer) radiation_apply_button, "clicked", G_CALLBACK (on_radiation_apply_button_clicked), NULL); g_signal_connect ((gpointer) radiation_ok_button, "clicked", G_CALLBACK (on_radiation_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (radiation_command, radiation_command, "radiation_command"); GLADE_HOOKUP_OBJECT (radiation_command, vbox19, "vbox19"); GLADE_HOOKUP_OBJECT (radiation_command, frame29, "frame29"); GLADE_HOOKUP_OBJECT (radiation_command, alignment31, "alignment31"); GLADE_HOOKUP_OBJECT (radiation_command, table21, "table21"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_i10_radiobutton, "radiation_i10_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_i16_radiobutton, "radiation_i16_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_i14_radiobutton, "radiation_i14_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_i12_radiobutton, "radiation_i12_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_i11_radiobutton, "radiation_i11_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_i13_radiobutton, "radiation_i13_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_i15_radiobutton, "radiation_i15_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, label145, "label145"); GLADE_HOOKUP_OBJECT (radiation_command, label140, "label140"); GLADE_HOOKUP_OBJECT (radiation_command, frame33, "frame33"); GLADE_HOOKUP_OBJECT (radiation_command, alignment35, "alignment35"); GLADE_HOOKUP_OBJECT (radiation_command, table22, "table22"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_x0_radiobutton, "radiation_x0_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_x1_radiobutton, "radiation_x1_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_n0_radiobutton, "radiation_n0_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_n2_radiobutton, "radiation_n2_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_n4_radiobutton, "radiation_n4_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_d0_radiobutton, "radiation_d0_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_a0_radiobutton, "radiation_a0_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_a2_radiobutton, "radiation_a2_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_a1_radiobutton, "radiation_a1_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_d1_radiobutton, "radiation_d1_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_n5_radiobutton, "radiation_n5_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_n3_radiobutton, "radiation_n3_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_n1_radiobutton, "radiation_n1_radiobutton"); GLADE_HOOKUP_OBJECT (radiation_command, label146, "label146"); GLADE_HOOKUP_OBJECT (radiation_command, hseparator5, "hseparator5"); GLADE_HOOKUP_OBJECT (radiation_command, hseparator6, "hseparator6"); GLADE_HOOKUP_OBJECT (radiation_command, hseparator7, "hseparator7"); GLADE_HOOKUP_OBJECT (radiation_command, hseparator8, "hseparator8"); GLADE_HOOKUP_OBJECT (radiation_command, hseparator9, "hseparator9"); GLADE_HOOKUP_OBJECT (radiation_command, hseparator10, "hseparator10"); GLADE_HOOKUP_OBJECT (radiation_command, label144, "label144"); GLADE_HOOKUP_OBJECT (radiation_command, frame31, "frame31"); GLADE_HOOKUP_OBJECT (radiation_command, alignment33, "alignment33"); GLADE_HOOKUP_OBJECT (radiation_command, table23, "table23"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_f6_label, "radiation_f6_label"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_f1_spinbutton, "radiation_f1_spinbutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_f2_spinbutton, "radiation_f2_spinbutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_f6_spinbutton, "radiation_f6_spinbutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_f1_label, "radiation_f1_label"); GLADE_HOOKUP_OBJECT (radiation_command, label148, "label148"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_i3_spinbutton, "radiation_i3_spinbutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_i2_spinbutton, "radiation_i2_spinbutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_i1_label, "radiation_i1_label"); GLADE_HOOKUP_OBJECT (radiation_command, label210, "label210"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_f3_label, "radiation_f3_label"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_f3_spinbutton, "radiation_f3_spinbutton"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_f5_label, "radiation_f5_label"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_f5_spinbutton, "radiation_f5_spinbutton"); GLADE_HOOKUP_OBJECT (radiation_command, label150, "label150"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_f4_spinbutton, "radiation_f4_spinbutton"); GLADE_HOOKUP_OBJECT (radiation_command, label142, "label142"); GLADE_HOOKUP_OBJECT (radiation_command, hbox37, "hbox37"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_new_button, "radiation_new_button"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_cancel_button, "radiation_cancel_button"); GLADE_HOOKUP_OBJECT (radiation_command, alignment63, "alignment63"); GLADE_HOOKUP_OBJECT (radiation_command, hbox61, "hbox61"); GLADE_HOOKUP_OBJECT (radiation_command, image83, "image83"); GLADE_HOOKUP_OBJECT (radiation_command, label235, "label235"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_apply_button, "radiation_apply_button"); GLADE_HOOKUP_OBJECT (radiation_command, radiation_ok_button, "radiation_ok_button"); return radiation_command; } GtkWidget* create_excitation_command (void) { GtkWidget *excitation_command; GtkWidget *vbox20; GtkWidget *frame34; GtkWidget *alignment36; GtkWidget *table24; GtkWidget *excitation_i10_radiobutton; GSList *excitation_i10_radiobutton_group = NULL; GtkWidget *excitation_i11_radiobutton; GtkWidget *excitation_i12_radiobutton; GtkWidget *excitation_i13_radiobutton; GtkWidget *excitation_i15_radiobutton; GtkWidget *excitation_i14_radiobutton; GtkWidget *label153; GtkWidget *frame35; GtkWidget *alignment37; GtkWidget *hbox39; GtkWidget *excitation_i419_checkbutton; GtkWidget *excitation_i420_checkbutton; GtkWidget *label154; GtkWidget *frame36; GtkWidget *alignment38; GtkWidget *table25; GtkWidget *excitation_i2_label; GtkWidget *excitation_i3_label; GtkWidget *excitation_f1_label; GtkWidget *excitation_f2_label; GtkWidget *excitation_f3_label; GtkWidget *excitation_f4_label; GtkWidget *excitation_f5_label; GtkWidget *excitation_f6_label; GtkObject *excitation_i2_spinbutton_adj; GtkWidget *excitation_i2_spinbutton; GtkObject *excitation_i3_spinbutton_adj; GtkWidget *excitation_i3_spinbutton; GtkObject *excitation_f2_spinbutton_adj; GtkWidget *excitation_f2_spinbutton; GtkObject *excitation_f3_spinbutton_adj; GtkWidget *excitation_f3_spinbutton; GtkObject *excitation_f4_spinbutton_adj; GtkWidget *excitation_f4_spinbutton; GtkObject *excitation_f5_spinbutton_adj; GtkWidget *excitation_f5_spinbutton; GtkObject *excitation_f6_spinbutton_adj; GtkWidget *excitation_f6_spinbutton; GtkObject *excitation_f1_spinbutton_adj; GtkWidget *excitation_f1_spinbutton; GtkWidget *label155; GtkWidget *hbox38; GtkWidget *excitation_new_button; GtkWidget *excitation_cancel_button; GtkWidget *alignment64; GtkWidget *hbox62; GtkWidget *image84; GtkWidget *label236; GtkWidget *excitation_apply_button; GtkWidget *excitation_ok_button; excitation_command = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (excitation_command), 4); gtk_window_set_title (GTK_WINDOW (excitation_command), _("Excitation Command (EX Card)")); vbox20 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox20); gtk_container_add (GTK_CONTAINER (excitation_command), vbox20); frame34 = gtk_frame_new (NULL); gtk_widget_show (frame34); gtk_box_pack_start (GTK_BOX (vbox20), frame34, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame34), 4); alignment36 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment36); gtk_container_add (GTK_CONTAINER (frame34), alignment36); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment36), 0, 0, 12, 0); table24 = gtk_table_new (2, 3, FALSE); gtk_widget_show (table24); gtk_container_add (GTK_CONTAINER (alignment36), table24); excitation_i10_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Voltage Source")); gtk_widget_show (excitation_i10_radiobutton); gtk_table_attach (GTK_TABLE (table24), excitation_i10_radiobutton, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (excitation_i10_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (excitation_i10_radiobutton), excitation_i10_radiobutton_group); excitation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (excitation_i10_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (excitation_i10_radiobutton), TRUE); excitation_i11_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Incident Linear Wave ")); gtk_widget_show (excitation_i11_radiobutton); gtk_table_attach (GTK_TABLE (table24), excitation_i11_radiobutton, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (excitation_i11_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (excitation_i11_radiobutton), excitation_i10_radiobutton_group); excitation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (excitation_i11_radiobutton)); excitation_i12_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Incident RH Wave")); gtk_widget_show (excitation_i12_radiobutton); gtk_table_attach (GTK_TABLE (table24), excitation_i12_radiobutton, 2, 3, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (excitation_i12_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (excitation_i12_radiobutton), excitation_i10_radiobutton_group); excitation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (excitation_i12_radiobutton)); excitation_i13_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Incident LH Wave")); gtk_widget_show (excitation_i13_radiobutton); gtk_table_attach (GTK_TABLE (table24), excitation_i13_radiobutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (excitation_i13_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (excitation_i13_radiobutton), excitation_i10_radiobutton_group); excitation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (excitation_i13_radiobutton)); excitation_i15_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Current Slope Discontinuity")); gtk_widget_show (excitation_i15_radiobutton); gtk_table_attach (GTK_TABLE (table24), excitation_i15_radiobutton, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (excitation_i15_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (excitation_i15_radiobutton), excitation_i10_radiobutton_group); excitation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (excitation_i15_radiobutton)); excitation_i14_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Current Source")); gtk_widget_show (excitation_i14_radiobutton); gtk_table_attach (GTK_TABLE (table24), excitation_i14_radiobutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (excitation_i14_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (excitation_i14_radiobutton), excitation_i10_radiobutton_group); excitation_i10_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (excitation_i14_radiobutton)); label153 = gtk_label_new (_("Excitation Type")); gtk_widget_show (label153); gtk_frame_set_label_widget (GTK_FRAME (frame34), label153); gtk_misc_set_padding (GTK_MISC (label153), 4, 4); frame35 = gtk_frame_new (NULL); gtk_widget_show (frame35); gtk_box_pack_start (GTK_BOX (vbox20), frame35, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame35), 4); alignment37 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment37); gtk_container_add (GTK_CONTAINER (frame35), alignment37); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment37), 0, 0, 12, 0); hbox39 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox39); gtk_container_add (GTK_CONTAINER (alignment37), hbox39); excitation_i419_checkbutton = gtk_check_button_new_with_mnemonic (_("Maximum Admittance Matrix Asymmetry")); gtk_widget_show (excitation_i419_checkbutton); gtk_box_pack_start (GTK_BOX (hbox39), excitation_i419_checkbutton, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (excitation_i419_checkbutton), 2); excitation_i420_checkbutton = gtk_check_button_new_with_mnemonic (_("Impedance of Source Segment")); gtk_widget_show (excitation_i420_checkbutton); gtk_box_pack_start (GTK_BOX (hbox39), excitation_i420_checkbutton, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (excitation_i420_checkbutton), 2); label154 = gtk_label_new (_("Print Control")); gtk_widget_show (label154); gtk_frame_set_label_widget (GTK_FRAME (frame35), label154); gtk_misc_set_padding (GTK_MISC (label154), 4, 4); frame36 = gtk_frame_new (NULL); gtk_widget_show (frame36); gtk_box_pack_start (GTK_BOX (vbox20), frame36, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame36), 4); alignment38 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment38); gtk_container_add (GTK_CONTAINER (frame36), alignment38); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment38), 0, 0, 12, 0); table25 = gtk_table_new (6, 3, FALSE); gtk_widget_show (table25); gtk_container_add (GTK_CONTAINER (alignment38), table25); excitation_i2_label = gtk_label_new (_("Tag Number")); gtk_widget_show (excitation_i2_label); gtk_table_attach (GTK_TABLE (table25), excitation_i2_label, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (excitation_i2_label), 0.1, 0.5); excitation_i3_label = gtk_label_new (_("Segment Number")); gtk_widget_show (excitation_i3_label); gtk_table_attach (GTK_TABLE (table25), excitation_i3_label, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (excitation_i3_label), 0.1, 0.5); excitation_f1_label = gtk_label_new (_("Voltage - Real Part")); gtk_widget_show (excitation_f1_label); gtk_table_attach (GTK_TABLE (table25), excitation_f1_label, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (excitation_f1_label), 0.1, 0.5); excitation_f2_label = gtk_label_new (_("Voltage - Imaginary Part")); gtk_widget_show (excitation_f2_label); gtk_table_attach (GTK_TABLE (table25), excitation_f2_label, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (excitation_f2_label), 0.1, 0.5); excitation_f3_label = gtk_label_new (_("Eta")); gtk_widget_show (excitation_f3_label); gtk_table_attach (GTK_TABLE (table25), excitation_f3_label, 2, 3, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (excitation_f3_label), 0.1, 0.5); excitation_f4_label = gtk_label_new (_("Theta")); gtk_widget_show (excitation_f4_label); gtk_table_attach (GTK_TABLE (table25), excitation_f4_label, 0, 1, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (excitation_f4_label), 0.1, 0.5); excitation_f5_label = gtk_label_new (_("Phi")); gtk_widget_show (excitation_f5_label); gtk_table_attach (GTK_TABLE (table25), excitation_f5_label, 1, 2, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (excitation_f5_label), 0.1, 0.5); excitation_f6_label = gtk_label_new (_("Ratio")); gtk_widget_show (excitation_f6_label); gtk_table_attach (GTK_TABLE (table25), excitation_f6_label, 2, 3, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (excitation_f6_label), 0.1, 0.5); excitation_i2_spinbutton_adj = gtk_adjustment_new (1, 1, 10000, 1, 10, 0); excitation_i2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (excitation_i2_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (excitation_i2_spinbutton); gtk_table_attach (GTK_TABLE (table25), excitation_i2_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (excitation_i2_spinbutton), TRUE); excitation_i3_spinbutton_adj = gtk_adjustment_new (1, 1, 10000, 1, 10, 0); excitation_i3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (excitation_i3_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (excitation_i3_spinbutton); gtk_table_attach (GTK_TABLE (table25), excitation_i3_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (excitation_i3_spinbutton), TRUE); excitation_f2_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); excitation_f2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (excitation_f2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (excitation_f2_spinbutton); gtk_table_attach (GTK_TABLE (table25), excitation_f2_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (excitation_f2_spinbutton), TRUE); excitation_f3_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); excitation_f3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (excitation_f3_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (excitation_f3_spinbutton); gtk_table_attach (GTK_TABLE (table25), excitation_f3_spinbutton, 2, 3, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (excitation_f3_spinbutton), TRUE); excitation_f4_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); excitation_f4_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (excitation_f4_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (excitation_f4_spinbutton); gtk_table_attach (GTK_TABLE (table25), excitation_f4_spinbutton, 0, 1, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (excitation_f4_spinbutton), TRUE); excitation_f5_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); excitation_f5_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (excitation_f5_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (excitation_f5_spinbutton); gtk_table_attach (GTK_TABLE (table25), excitation_f5_spinbutton, 1, 2, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (excitation_f5_spinbutton), TRUE); excitation_f6_spinbutton_adj = gtk_adjustment_new (0, -10000, 10000, 9.99999974738e-06, 10, 0); excitation_f6_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (excitation_f6_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (excitation_f6_spinbutton); gtk_table_attach (GTK_TABLE (table25), excitation_f6_spinbutton, 2, 3, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (excitation_f6_spinbutton), TRUE); excitation_f1_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); excitation_f1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (excitation_f1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (excitation_f1_spinbutton); gtk_table_attach (GTK_TABLE (table25), excitation_f1_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (excitation_f1_spinbutton), TRUE); label155 = gtk_label_new (_("Excitation Parameters")); gtk_widget_show (label155); gtk_frame_set_label_widget (GTK_FRAME (frame36), label155); gtk_misc_set_padding (GTK_MISC (label155), 4, 4); hbox38 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox38); gtk_box_pack_start (GTK_BOX (vbox20), hbox38, TRUE, TRUE, 0); excitation_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (excitation_new_button); gtk_box_pack_start (GTK_BOX (hbox38), excitation_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (excitation_new_button), 2); excitation_cancel_button = gtk_button_new (); gtk_widget_show (excitation_cancel_button); gtk_box_pack_start (GTK_BOX (hbox38), excitation_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (excitation_cancel_button), 2); alignment64 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment64); gtk_container_add (GTK_CONTAINER (excitation_cancel_button), alignment64); hbox62 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox62); gtk_container_add (GTK_CONTAINER (alignment64), hbox62); image84 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image84); gtk_box_pack_start (GTK_BOX (hbox62), image84, FALSE, FALSE, 0); label236 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label236); gtk_box_pack_start (GTK_BOX (hbox62), label236, FALSE, FALSE, 0); excitation_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (excitation_apply_button); gtk_box_pack_start (GTK_BOX (hbox38), excitation_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (excitation_apply_button), 2); excitation_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (excitation_ok_button); gtk_box_pack_start (GTK_BOX (hbox38), excitation_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (excitation_ok_button), 2); g_signal_connect ((gpointer) excitation_command, "destroy", G_CALLBACK (on_excitation_command_destroy), NULL); g_signal_connect ((gpointer) excitation_i10_radiobutton, "toggled", G_CALLBACK (on_excitation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) excitation_i11_radiobutton, "toggled", G_CALLBACK (on_excitation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) excitation_i12_radiobutton, "toggled", G_CALLBACK (on_excitation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) excitation_i13_radiobutton, "toggled", G_CALLBACK (on_excitation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) excitation_i15_radiobutton, "toggled", G_CALLBACK (on_excitation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) excitation_i14_radiobutton, "toggled", G_CALLBACK (on_excitation_radiobutton_toggled), NULL); g_signal_connect ((gpointer) excitation_i419_checkbutton, "toggled", G_CALLBACK (on_excitation_checkbutton_toggled), NULL); g_signal_connect ((gpointer) excitation_i420_checkbutton, "toggled", G_CALLBACK (on_excitation_checkbutton_toggled), NULL); g_signal_connect ((gpointer) excitation_i2_spinbutton, "value_changed", G_CALLBACK (on_excitation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) excitation_i3_spinbutton, "value_changed", G_CALLBACK (on_excitation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) excitation_f2_spinbutton, "value_changed", G_CALLBACK (on_excitation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) excitation_f3_spinbutton, "value_changed", G_CALLBACK (on_excitation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) excitation_f4_spinbutton, "value_changed", G_CALLBACK (on_excitation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) excitation_f5_spinbutton, "value_changed", G_CALLBACK (on_excitation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) excitation_f6_spinbutton, "value_changed", G_CALLBACK (on_excitation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) excitation_f1_spinbutton, "value_changed", G_CALLBACK (on_excitation_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) excitation_new_button, "clicked", G_CALLBACK (on_excitation_new_button_clicked), NULL); g_signal_connect ((gpointer) excitation_cancel_button, "clicked", G_CALLBACK (on_excitation_cancel_button_clicked), NULL); g_signal_connect ((gpointer) excitation_apply_button, "clicked", G_CALLBACK (on_excitation_apply_button_clicked), NULL); g_signal_connect ((gpointer) excitation_ok_button, "clicked", G_CALLBACK (on_excitation_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (excitation_command, excitation_command, "excitation_command"); GLADE_HOOKUP_OBJECT (excitation_command, vbox20, "vbox20"); GLADE_HOOKUP_OBJECT (excitation_command, frame34, "frame34"); GLADE_HOOKUP_OBJECT (excitation_command, alignment36, "alignment36"); GLADE_HOOKUP_OBJECT (excitation_command, table24, "table24"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_i10_radiobutton, "excitation_i10_radiobutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_i11_radiobutton, "excitation_i11_radiobutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_i12_radiobutton, "excitation_i12_radiobutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_i13_radiobutton, "excitation_i13_radiobutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_i15_radiobutton, "excitation_i15_radiobutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_i14_radiobutton, "excitation_i14_radiobutton"); GLADE_HOOKUP_OBJECT (excitation_command, label153, "label153"); GLADE_HOOKUP_OBJECT (excitation_command, frame35, "frame35"); GLADE_HOOKUP_OBJECT (excitation_command, alignment37, "alignment37"); GLADE_HOOKUP_OBJECT (excitation_command, hbox39, "hbox39"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_i419_checkbutton, "excitation_i419_checkbutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_i420_checkbutton, "excitation_i420_checkbutton"); GLADE_HOOKUP_OBJECT (excitation_command, label154, "label154"); GLADE_HOOKUP_OBJECT (excitation_command, frame36, "frame36"); GLADE_HOOKUP_OBJECT (excitation_command, alignment38, "alignment38"); GLADE_HOOKUP_OBJECT (excitation_command, table25, "table25"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_i2_label, "excitation_i2_label"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_i3_label, "excitation_i3_label"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_f1_label, "excitation_f1_label"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_f2_label, "excitation_f2_label"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_f3_label, "excitation_f3_label"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_f4_label, "excitation_f4_label"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_f5_label, "excitation_f5_label"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_f6_label, "excitation_f6_label"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_i2_spinbutton, "excitation_i2_spinbutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_i3_spinbutton, "excitation_i3_spinbutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_f2_spinbutton, "excitation_f2_spinbutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_f3_spinbutton, "excitation_f3_spinbutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_f4_spinbutton, "excitation_f4_spinbutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_f5_spinbutton, "excitation_f5_spinbutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_f6_spinbutton, "excitation_f6_spinbutton"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_f1_spinbutton, "excitation_f1_spinbutton"); GLADE_HOOKUP_OBJECT (excitation_command, label155, "label155"); GLADE_HOOKUP_OBJECT (excitation_command, hbox38, "hbox38"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_new_button, "excitation_new_button"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_cancel_button, "excitation_cancel_button"); GLADE_HOOKUP_OBJECT (excitation_command, alignment64, "alignment64"); GLADE_HOOKUP_OBJECT (excitation_command, hbox62, "hbox62"); GLADE_HOOKUP_OBJECT (excitation_command, image84, "image84"); GLADE_HOOKUP_OBJECT (excitation_command, label236, "label236"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_apply_button, "excitation_apply_button"); GLADE_HOOKUP_OBJECT (excitation_command, excitation_ok_button, "excitation_ok_button"); return excitation_command; } GtkWidget* create_frequency_command (void) { GtkWidget *frequency_command; GtkWidget *vbox21; GtkWidget *frame37; GtkWidget *alignment39; GtkWidget *hbox41; GtkWidget *frequency_add_radiobutton; GSList *frequency_add_radiobutton_group = NULL; GtkWidget *frequency_mul_radiobutton; GtkWidget *label165; GtkWidget *frame38; GtkWidget *alignment40; GtkWidget *table26; GtkWidget *label167; GtkWidget *label168; GtkObject *frequency_num_spinbutton_adj; GtkWidget *frequency_num_spinbutton; GtkObject *frequency_step_spinbutton_adj; GtkWidget *frequency_step_spinbutton; GtkWidget *label170; GtkWidget *label171; GtkObject *frequency_start_spinbutton_adj; GtkWidget *frequency_start_spinbutton; GtkObject *frequency_end_spinbutton_adj; GtkWidget *frequency_end_spinbutton; GtkWidget *label166; GtkWidget *hbox40; GtkWidget *frequency_new_button; GtkWidget *frequency_cancel_button; GtkWidget *alignment65; GtkWidget *hbox63; GtkWidget *image85; GtkWidget *label237; GtkWidget *frequency_apply_button; GtkWidget *frequency_ok_button; frequency_command = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (frequency_command), 4); gtk_window_set_title (GTK_WINDOW (frequency_command), _("Frequecy Command (FR Card)")); vbox21 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox21); gtk_container_add (GTK_CONTAINER (frequency_command), vbox21); frame37 = gtk_frame_new (NULL); gtk_widget_show (frame37); gtk_box_pack_start (GTK_BOX (vbox21), frame37, TRUE, TRUE, 0); alignment39 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment39); gtk_container_add (GTK_CONTAINER (frame37), alignment39); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment39), 0, 0, 12, 0); hbox41 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox41); gtk_container_add (GTK_CONTAINER (alignment39), hbox41); frequency_add_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Additive Stepping")); gtk_widget_show (frequency_add_radiobutton); gtk_box_pack_start (GTK_BOX (hbox41), frequency_add_radiobutton, TRUE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (frequency_add_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (frequency_add_radiobutton), frequency_add_radiobutton_group); frequency_add_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (frequency_add_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (frequency_add_radiobutton), TRUE); frequency_mul_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Multiplicative Stepping")); gtk_widget_show (frequency_mul_radiobutton); gtk_box_pack_start (GTK_BOX (hbox41), frequency_mul_radiobutton, TRUE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (frequency_mul_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (frequency_mul_radiobutton), frequency_add_radiobutton_group); frequency_add_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (frequency_mul_radiobutton)); label165 = gtk_label_new (_("Frequency Stepping")); gtk_widget_show (label165); gtk_frame_set_label_widget (GTK_FRAME (frame37), label165); gtk_misc_set_padding (GTK_MISC (label165), 4, 4); frame38 = gtk_frame_new (NULL); gtk_widget_show (frame38); gtk_box_pack_start (GTK_BOX (vbox21), frame38, TRUE, TRUE, 0); alignment40 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment40); gtk_container_add (GTK_CONTAINER (frame38), alignment40); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment40), 0, 0, 12, 0); table26 = gtk_table_new (4, 2, FALSE); gtk_widget_show (table26); gtk_container_add (GTK_CONTAINER (alignment40), table26); label167 = gtk_label_new (_("No. Frequency Points")); gtk_widget_show (label167); gtk_table_attach (GTK_TABLE (table26), label167, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label167), 0.1, 0.5); label168 = gtk_label_new (_("Frequency Step (MHz)")); gtk_widget_show (label168); gtk_table_attach (GTK_TABLE (table26), label168, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label168), 0.1, 0.5); frequency_num_spinbutton_adj = gtk_adjustment_new (11, 1, 10000, 1, 10, 0); frequency_num_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (frequency_num_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (frequency_num_spinbutton); gtk_table_attach (GTK_TABLE (table26), frequency_num_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (frequency_num_spinbutton), TRUE); frequency_step_spinbutton_adj = gtk_adjustment_new (0.10000000149, -1000, 1000, 9.99999974738e-06, 10, 0); frequency_step_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (frequency_step_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (frequency_step_spinbutton); gtk_table_attach (GTK_TABLE (table26), frequency_step_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (frequency_step_spinbutton), TRUE); label170 = gtk_label_new (_("Start Frequency (MHz)")); gtk_widget_show (label170); gtk_table_attach (GTK_TABLE (table26), label170, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label170), 0.1, 0.5); label171 = gtk_label_new (_("End Frequency (MHz)")); gtk_widget_show (label171); gtk_table_attach (GTK_TABLE (table26), label171, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label171), 0.1, 0.5); frequency_start_spinbutton_adj = gtk_adjustment_new (50, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); frequency_start_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (frequency_start_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (frequency_start_spinbutton); gtk_table_attach (GTK_TABLE (table26), frequency_start_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (frequency_start_spinbutton), TRUE); frequency_end_spinbutton_adj = gtk_adjustment_new (100, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); frequency_end_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (frequency_end_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (frequency_end_spinbutton); gtk_table_attach (GTK_TABLE (table26), frequency_end_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (frequency_end_spinbutton), TRUE); label166 = gtk_label_new (_("Frequency Stepping Parameters")); gtk_widget_show (label166); gtk_frame_set_label_widget (GTK_FRAME (frame38), label166); gtk_misc_set_padding (GTK_MISC (label166), 4, 4); hbox40 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox40); gtk_box_pack_start (GTK_BOX (vbox21), hbox40, FALSE, FALSE, 0); frequency_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (frequency_new_button); gtk_box_pack_start (GTK_BOX (hbox40), frequency_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frequency_new_button), 2); frequency_cancel_button = gtk_button_new (); gtk_widget_show (frequency_cancel_button); gtk_box_pack_start (GTK_BOX (hbox40), frequency_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frequency_cancel_button), 2); alignment65 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment65); gtk_container_add (GTK_CONTAINER (frequency_cancel_button), alignment65); hbox63 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox63); gtk_container_add (GTK_CONTAINER (alignment65), hbox63); image85 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image85); gtk_box_pack_start (GTK_BOX (hbox63), image85, FALSE, FALSE, 0); label237 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label237); gtk_box_pack_start (GTK_BOX (hbox63), label237, FALSE, FALSE, 0); frequency_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (frequency_apply_button); gtk_box_pack_start (GTK_BOX (hbox40), frequency_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frequency_apply_button), 2); frequency_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (frequency_ok_button); gtk_box_pack_start (GTK_BOX (hbox40), frequency_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frequency_ok_button), 2); g_signal_connect ((gpointer) frequency_command, "destroy", G_CALLBACK (on_frequency_command_destroy), NULL); g_signal_connect ((gpointer) frequency_add_radiobutton, "toggled", G_CALLBACK (on_frequency_radiobutton_toggled), NULL); g_signal_connect ((gpointer) frequency_mul_radiobutton, "toggled", G_CALLBACK (on_frequency_radiobutton_toggled), NULL); g_signal_connect ((gpointer) frequency_num_spinbutton, "value_changed", G_CALLBACK (on_frequency_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) frequency_step_spinbutton, "value_changed", G_CALLBACK (on_frequency_step_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) frequency_start_spinbutton, "value_changed", G_CALLBACK (on_frequency_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) frequency_end_spinbutton, "value_changed", G_CALLBACK (on_frequency_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) frequency_new_button, "clicked", G_CALLBACK (on_frequency_new_button_clicked), NULL); g_signal_connect ((gpointer) frequency_cancel_button, "clicked", G_CALLBACK (on_frequency_cancel_button_clicked), NULL); g_signal_connect ((gpointer) frequency_apply_button, "clicked", G_CALLBACK (on_frequency_apply_button_clicked), NULL); g_signal_connect ((gpointer) frequency_ok_button, "clicked", G_CALLBACK (on_frequency_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (frequency_command, frequency_command, "frequency_command"); GLADE_HOOKUP_OBJECT (frequency_command, vbox21, "vbox21"); GLADE_HOOKUP_OBJECT (frequency_command, frame37, "frame37"); GLADE_HOOKUP_OBJECT (frequency_command, alignment39, "alignment39"); GLADE_HOOKUP_OBJECT (frequency_command, hbox41, "hbox41"); GLADE_HOOKUP_OBJECT (frequency_command, frequency_add_radiobutton, "frequency_add_radiobutton"); GLADE_HOOKUP_OBJECT (frequency_command, frequency_mul_radiobutton, "frequency_mul_radiobutton"); GLADE_HOOKUP_OBJECT (frequency_command, label165, "label165"); GLADE_HOOKUP_OBJECT (frequency_command, frame38, "frame38"); GLADE_HOOKUP_OBJECT (frequency_command, alignment40, "alignment40"); GLADE_HOOKUP_OBJECT (frequency_command, table26, "table26"); GLADE_HOOKUP_OBJECT (frequency_command, label167, "label167"); GLADE_HOOKUP_OBJECT (frequency_command, label168, "label168"); GLADE_HOOKUP_OBJECT (frequency_command, frequency_num_spinbutton, "frequency_num_spinbutton"); GLADE_HOOKUP_OBJECT (frequency_command, frequency_step_spinbutton, "frequency_step_spinbutton"); GLADE_HOOKUP_OBJECT (frequency_command, label170, "label170"); GLADE_HOOKUP_OBJECT (frequency_command, label171, "label171"); GLADE_HOOKUP_OBJECT (frequency_command, frequency_start_spinbutton, "frequency_start_spinbutton"); GLADE_HOOKUP_OBJECT (frequency_command, frequency_end_spinbutton, "frequency_end_spinbutton"); GLADE_HOOKUP_OBJECT (frequency_command, label166, "label166"); GLADE_HOOKUP_OBJECT (frequency_command, hbox40, "hbox40"); GLADE_HOOKUP_OBJECT (frequency_command, frequency_new_button, "frequency_new_button"); GLADE_HOOKUP_OBJECT (frequency_command, frequency_cancel_button, "frequency_cancel_button"); GLADE_HOOKUP_OBJECT (frequency_command, alignment65, "alignment65"); GLADE_HOOKUP_OBJECT (frequency_command, hbox63, "hbox63"); GLADE_HOOKUP_OBJECT (frequency_command, image85, "image85"); GLADE_HOOKUP_OBJECT (frequency_command, label237, "label237"); GLADE_HOOKUP_OBJECT (frequency_command, frequency_apply_button, "frequency_apply_button"); GLADE_HOOKUP_OBJECT (frequency_command, frequency_ok_button, "frequency_ok_button"); return frequency_command; } GtkWidget* create_loading_command (void) { GtkWidget *loading_command; GtkWidget *vbox22; GtkWidget *frame39; GtkWidget *alignment41; GtkWidget *table27; GtkWidget *loading_slrlc_radiobutton; GSList *loading_slrlc_radiobutton_group = NULL; GtkWidget *loading_pdrlc_radiobutton; GtkWidget *loading_rr_radiobutton; GtkWidget *loading_plrlc_radiobutton; GtkWidget *loading_sdrlc_radiobutton; GtkWidget *loading_wcon_radiobutton; GtkWidget *loading_null_radiobutton; GtkWidget *label172; GtkWidget *loading_frame; GtkWidget *alignment42; GtkWidget *table28; GtkWidget *loading_i2_label; GtkWidget *loading_i3_label; GtkWidget *loading_i4_label; GtkWidget *loading_f1_label; GtkWidget *loading_f2_label; GtkWidget *loading_f3_label; GtkObject *loading_f1_spinbutton_adj; GtkWidget *loading_f1_spinbutton; GtkObject *loading_i2_spinbutton_adj; GtkWidget *loading_i2_spinbutton; GtkObject *loading_i3_spinbutton_adj; GtkWidget *loading_i3_spinbutton; GtkObject *loading_i4_spinbutton_adj; GtkWidget *loading_i4_spinbutton; GtkObject *loading_f2_spinbutton_adj; GtkWidget *loading_f2_spinbutton; GtkObject *loading_f3_spinbutton_adj; GtkWidget *loading_f3_spinbutton; GtkWidget *label173; GtkWidget *hbox42; GtkWidget *loading_new_button; GtkWidget *loading_cancel_button; GtkWidget *alignment66; GtkWidget *hbox64; GtkWidget *image86; GtkWidget *label238; GtkWidget *loading_apply_button; GtkWidget *loading_ok_button; loading_command = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (loading_command), 4); gtk_window_set_title (GTK_WINDOW (loading_command), _("Loading Command (LD Card)")); vbox22 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox22); gtk_container_add (GTK_CONTAINER (loading_command), vbox22); frame39 = gtk_frame_new (NULL); gtk_widget_show (frame39); gtk_box_pack_start (GTK_BOX (vbox22), frame39, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame39), 4); alignment41 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment41); gtk_container_add (GTK_CONTAINER (frame39), alignment41); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment41), 0, 0, 12, 0); table27 = gtk_table_new (3, 3, FALSE); gtk_widget_show (table27); gtk_container_add (GTK_CONTAINER (alignment41), table27); loading_slrlc_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Series, Lumped")); gtk_widget_show (loading_slrlc_radiobutton); gtk_table_attach (GTK_TABLE (table27), loading_slrlc_radiobutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (loading_slrlc_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (loading_slrlc_radiobutton), loading_slrlc_radiobutton_group); loading_slrlc_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (loading_slrlc_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (loading_slrlc_radiobutton), TRUE); loading_pdrlc_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Parallel, Distributed")); gtk_widget_show (loading_pdrlc_radiobutton); gtk_table_attach (GTK_TABLE (table27), loading_pdrlc_radiobutton, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (loading_pdrlc_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (loading_pdrlc_radiobutton), loading_slrlc_radiobutton_group); loading_slrlc_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (loading_pdrlc_radiobutton)); loading_rr_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Resistance & Reactance")); gtk_widget_show (loading_rr_radiobutton); gtk_table_attach (GTK_TABLE (table27), loading_rr_radiobutton, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (loading_rr_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (loading_rr_radiobutton), loading_slrlc_radiobutton_group); loading_slrlc_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (loading_rr_radiobutton)); loading_plrlc_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Parallel, Lumped")); gtk_widget_show (loading_plrlc_radiobutton); gtk_table_attach (GTK_TABLE (table27), loading_plrlc_radiobutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (loading_plrlc_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (loading_plrlc_radiobutton), loading_slrlc_radiobutton_group); loading_slrlc_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (loading_plrlc_radiobutton)); loading_sdrlc_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Series, Distributed")); gtk_widget_show (loading_sdrlc_radiobutton); gtk_table_attach (GTK_TABLE (table27), loading_sdrlc_radiobutton, 2, 3, 1, 2, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (loading_sdrlc_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (loading_sdrlc_radiobutton), loading_slrlc_radiobutton_group); loading_slrlc_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (loading_sdrlc_radiobutton)); loading_wcon_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Wire Conductivity")); gtk_widget_show (loading_wcon_radiobutton); gtk_table_attach (GTK_TABLE (table27), loading_wcon_radiobutton, 2, 3, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (loading_wcon_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (loading_wcon_radiobutton), loading_slrlc_radiobutton_group); loading_slrlc_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (loading_wcon_radiobutton)); loading_null_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Short all Loads (Nulls previous Loading Cards)")); gtk_widget_show (loading_null_radiobutton); gtk_table_attach (GTK_TABLE (table27), loading_null_radiobutton, 0, 3, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_container_set_border_width (GTK_CONTAINER (loading_null_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (loading_null_radiobutton), loading_slrlc_radiobutton_group); loading_slrlc_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (loading_null_radiobutton)); label172 = gtk_label_new (_("Loading Type")); gtk_widget_show (label172); gtk_frame_set_label_widget (GTK_FRAME (frame39), label172); gtk_misc_set_padding (GTK_MISC (label172), 4, 4); loading_frame = gtk_frame_new (NULL); gtk_widget_show (loading_frame); gtk_box_pack_start (GTK_BOX (vbox22), loading_frame, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (loading_frame), 4); alignment42 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment42); gtk_container_add (GTK_CONTAINER (loading_frame), alignment42); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment42), 0, 0, 12, 0); table28 = gtk_table_new (4, 3, FALSE); gtk_widget_show (table28); gtk_container_add (GTK_CONTAINER (alignment42), table28); loading_i2_label = gtk_label_new (_("Load Tag Number")); gtk_widget_show (loading_i2_label); gtk_table_attach (GTK_TABLE (table28), loading_i2_label, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (loading_i2_label), 0.1, 0.5); loading_i3_label = gtk_label_new (_("From Segment #")); gtk_widget_show (loading_i3_label); gtk_table_attach (GTK_TABLE (table28), loading_i3_label, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (loading_i3_label), 0.1, 0.5); loading_i4_label = gtk_label_new (_("To Segment #")); gtk_widget_show (loading_i4_label); gtk_table_attach (GTK_TABLE (table28), loading_i4_label, 2, 3, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (loading_i4_label), 0.1, 0.5); loading_f1_label = gtk_label_new (_("Resistance")); gtk_widget_show (loading_f1_label); gtk_table_attach (GTK_TABLE (table28), loading_f1_label, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (loading_f1_label), 0.1, 0.5); loading_f2_label = gtk_label_new (_("Inductance")); gtk_widget_show (loading_f2_label); gtk_table_attach (GTK_TABLE (table28), loading_f2_label, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (loading_f2_label), 0.1, 0.5); loading_f3_label = gtk_label_new (_("Capacitance")); gtk_widget_show (loading_f3_label); gtk_table_attach (GTK_TABLE (table28), loading_f3_label, 2, 3, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (loading_f3_label), 0.1, 0.5); loading_f1_spinbutton_adj = gtk_adjustment_new (1, 0, 1000000000, 9.99999974738e-06, 10, 0); loading_f1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (loading_f1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (loading_f1_spinbutton); gtk_table_attach (GTK_TABLE (table28), loading_f1_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (loading_f1_spinbutton), TRUE); loading_i2_spinbutton_adj = gtk_adjustment_new (1, 0, 10000, 1, 10, 0); loading_i2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (loading_i2_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (loading_i2_spinbutton); gtk_table_attach (GTK_TABLE (table28), loading_i2_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (loading_i2_spinbutton), TRUE); loading_i3_spinbutton_adj = gtk_adjustment_new (2, 0, 10000, 1, 10, 0); loading_i3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (loading_i3_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (loading_i3_spinbutton); gtk_table_attach (GTK_TABLE (table28), loading_i3_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (loading_i3_spinbutton), TRUE); loading_i4_spinbutton_adj = gtk_adjustment_new (3, 0, 10000, 1, 10, 0); loading_i4_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (loading_i4_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (loading_i4_spinbutton); gtk_table_attach (GTK_TABLE (table28), loading_i4_spinbutton, 2, 3, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (loading_i4_spinbutton), TRUE); loading_f2_spinbutton_adj = gtk_adjustment_new (1, -1000000, 1000000, 9.99999974738e-06, 10, 0); loading_f2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (loading_f2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (loading_f2_spinbutton); gtk_table_attach (GTK_TABLE (table28), loading_f2_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (loading_f2_spinbutton), TRUE); loading_f3_spinbutton_adj = gtk_adjustment_new (1, 0, 1000000000, 9.99999974738e-06, 10, 0); loading_f3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (loading_f3_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (loading_f3_spinbutton); gtk_table_attach (GTK_TABLE (table28), loading_f3_spinbutton, 2, 3, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (loading_f3_spinbutton), TRUE); label173 = gtk_label_new (_("Loading Parameters")); gtk_widget_show (label173); gtk_frame_set_label_widget (GTK_FRAME (loading_frame), label173); gtk_misc_set_padding (GTK_MISC (label173), 4, 4); hbox42 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox42); gtk_box_pack_start (GTK_BOX (vbox22), hbox42, TRUE, TRUE, 0); loading_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (loading_new_button); gtk_box_pack_start (GTK_BOX (hbox42), loading_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (loading_new_button), 2); loading_cancel_button = gtk_button_new (); gtk_widget_show (loading_cancel_button); gtk_box_pack_start (GTK_BOX (hbox42), loading_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (loading_cancel_button), 2); alignment66 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment66); gtk_container_add (GTK_CONTAINER (loading_cancel_button), alignment66); hbox64 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox64); gtk_container_add (GTK_CONTAINER (alignment66), hbox64); image86 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image86); gtk_box_pack_start (GTK_BOX (hbox64), image86, FALSE, FALSE, 0); label238 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label238); gtk_box_pack_start (GTK_BOX (hbox64), label238, FALSE, FALSE, 0); loading_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (loading_apply_button); gtk_box_pack_start (GTK_BOX (hbox42), loading_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (loading_apply_button), 2); loading_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (loading_ok_button); gtk_box_pack_start (GTK_BOX (hbox42), loading_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (loading_ok_button), 2); g_signal_connect ((gpointer) loading_command, "destroy", G_CALLBACK (on_loading_command_destroy), NULL); g_signal_connect ((gpointer) loading_slrlc_radiobutton, "toggled", G_CALLBACK (on_loading_radiobutton_toggled), NULL); g_signal_connect ((gpointer) loading_pdrlc_radiobutton, "toggled", G_CALLBACK (on_loading_radiobutton_toggled), NULL); g_signal_connect ((gpointer) loading_rr_radiobutton, "toggled", G_CALLBACK (on_loading_radiobutton_toggled), NULL); g_signal_connect ((gpointer) loading_plrlc_radiobutton, "toggled", G_CALLBACK (on_loading_radiobutton_toggled), NULL); g_signal_connect ((gpointer) loading_sdrlc_radiobutton, "toggled", G_CALLBACK (on_loading_radiobutton_toggled), NULL); g_signal_connect ((gpointer) loading_wcon_radiobutton, "toggled", G_CALLBACK (on_loading_radiobutton_toggled), NULL); g_signal_connect ((gpointer) loading_null_radiobutton, "toggled", G_CALLBACK (on_loading_radiobutton_toggled), NULL); g_signal_connect ((gpointer) loading_f1_spinbutton, "value_changed", G_CALLBACK (on_loading_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) loading_i2_spinbutton, "value_changed", G_CALLBACK (on_loading_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) loading_i3_spinbutton, "value_changed", G_CALLBACK (on_loading_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) loading_i4_spinbutton, "value_changed", G_CALLBACK (on_loading_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) loading_f2_spinbutton, "value_changed", G_CALLBACK (on_loading_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) loading_f3_spinbutton, "value_changed", G_CALLBACK (on_loading_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) loading_new_button, "clicked", G_CALLBACK (on_loading_new_button_clicked), NULL); g_signal_connect ((gpointer) loading_cancel_button, "clicked", G_CALLBACK (on_loading_cancel_button_clicked), NULL); g_signal_connect ((gpointer) loading_apply_button, "clicked", G_CALLBACK (on_loading_apply_button_clicked), NULL); g_signal_connect ((gpointer) loading_ok_button, "clicked", G_CALLBACK (on_loading_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (loading_command, loading_command, "loading_command"); GLADE_HOOKUP_OBJECT (loading_command, vbox22, "vbox22"); GLADE_HOOKUP_OBJECT (loading_command, frame39, "frame39"); GLADE_HOOKUP_OBJECT (loading_command, alignment41, "alignment41"); GLADE_HOOKUP_OBJECT (loading_command, table27, "table27"); GLADE_HOOKUP_OBJECT (loading_command, loading_slrlc_radiobutton, "loading_slrlc_radiobutton"); GLADE_HOOKUP_OBJECT (loading_command, loading_pdrlc_radiobutton, "loading_pdrlc_radiobutton"); GLADE_HOOKUP_OBJECT (loading_command, loading_rr_radiobutton, "loading_rr_radiobutton"); GLADE_HOOKUP_OBJECT (loading_command, loading_plrlc_radiobutton, "loading_plrlc_radiobutton"); GLADE_HOOKUP_OBJECT (loading_command, loading_sdrlc_radiobutton, "loading_sdrlc_radiobutton"); GLADE_HOOKUP_OBJECT (loading_command, loading_wcon_radiobutton, "loading_wcon_radiobutton"); GLADE_HOOKUP_OBJECT (loading_command, loading_null_radiobutton, "loading_null_radiobutton"); GLADE_HOOKUP_OBJECT (loading_command, label172, "label172"); GLADE_HOOKUP_OBJECT (loading_command, loading_frame, "loading_frame"); GLADE_HOOKUP_OBJECT (loading_command, alignment42, "alignment42"); GLADE_HOOKUP_OBJECT (loading_command, table28, "table28"); GLADE_HOOKUP_OBJECT (loading_command, loading_i2_label, "loading_i2_label"); GLADE_HOOKUP_OBJECT (loading_command, loading_i3_label, "loading_i3_label"); GLADE_HOOKUP_OBJECT (loading_command, loading_i4_label, "loading_i4_label"); GLADE_HOOKUP_OBJECT (loading_command, loading_f1_label, "loading_f1_label"); GLADE_HOOKUP_OBJECT (loading_command, loading_f2_label, "loading_f2_label"); GLADE_HOOKUP_OBJECT (loading_command, loading_f3_label, "loading_f3_label"); GLADE_HOOKUP_OBJECT (loading_command, loading_f1_spinbutton, "loading_f1_spinbutton"); GLADE_HOOKUP_OBJECT (loading_command, loading_i2_spinbutton, "loading_i2_spinbutton"); GLADE_HOOKUP_OBJECT (loading_command, loading_i3_spinbutton, "loading_i3_spinbutton"); GLADE_HOOKUP_OBJECT (loading_command, loading_i4_spinbutton, "loading_i4_spinbutton"); GLADE_HOOKUP_OBJECT (loading_command, loading_f2_spinbutton, "loading_f2_spinbutton"); GLADE_HOOKUP_OBJECT (loading_command, loading_f3_spinbutton, "loading_f3_spinbutton"); GLADE_HOOKUP_OBJECT (loading_command, label173, "label173"); GLADE_HOOKUP_OBJECT (loading_command, hbox42, "hbox42"); GLADE_HOOKUP_OBJECT (loading_command, loading_new_button, "loading_new_button"); GLADE_HOOKUP_OBJECT (loading_command, loading_cancel_button, "loading_cancel_button"); GLADE_HOOKUP_OBJECT (loading_command, alignment66, "alignment66"); GLADE_HOOKUP_OBJECT (loading_command, hbox64, "hbox64"); GLADE_HOOKUP_OBJECT (loading_command, image86, "image86"); GLADE_HOOKUP_OBJECT (loading_command, label238, "label238"); GLADE_HOOKUP_OBJECT (loading_command, loading_apply_button, "loading_apply_button"); GLADE_HOOKUP_OBJECT (loading_command, loading_ok_button, "loading_ok_button"); return loading_command; } GtkWidget* create_network_command (void) { GtkWidget *network_command; GtkWidget *vbox23; GtkWidget *frame41; GtkWidget *alignment43; GtkWidget *table29; GtkWidget *label184; GtkObject *network_i4_spinbutton_adj; GtkWidget *network_i4_spinbutton; GtkObject *network_i1_spinbutton_adj; GtkWidget *network_i1_spinbutton; GtkObject *network_i2_spinbutton_adj; GtkWidget *network_i2_spinbutton; GtkWidget *label183; GtkWidget *label182; GtkWidget *label185; GtkObject *network_i3_spinbutton_adj; GtkWidget *network_i3_spinbutton; GtkWidget *label180; GtkWidget *frame42; GtkWidget *alignment44; GtkWidget *table30; GtkWidget *label186; GtkWidget *label187; GtkWidget *label189; GtkWidget *label190; GtkObject *network_f3_spinbutton_adj; GtkWidget *network_f3_spinbutton; GtkObject *network_f4_spinbutton_adj; GtkWidget *network_f4_spinbutton; GtkWidget *label191; GtkWidget *label192; GtkObject *network_f1_spinbutton_adj; GtkWidget *network_f1_spinbutton; GtkObject *network_f2_spinbutton_adj; GtkWidget *network_f2_spinbutton; GtkObject *network_f6_spinbutton_adj; GtkWidget *network_f6_spinbutton; GtkObject *network_f5_spinbutton_adj; GtkWidget *network_f5_spinbutton; GtkWidget *label181; GtkWidget *hbox43; GtkWidget *network_new_button; GtkWidget *network_cancel_button; GtkWidget *alignment67; GtkWidget *hbox65; GtkWidget *image87; GtkWidget *label239; GtkWidget *network_apply_button; GtkWidget *network_ok_button; network_command = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (network_command), 4); gtk_window_set_title (GTK_WINDOW (network_command), _("Network Command (NT Card)")); vbox23 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox23); gtk_container_add (GTK_CONTAINER (network_command), vbox23); frame41 = gtk_frame_new (NULL); gtk_widget_show (frame41); gtk_box_pack_start (GTK_BOX (vbox23), frame41, TRUE, TRUE, 0); alignment43 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment43); gtk_container_add (GTK_CONTAINER (frame41), alignment43); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment43), 0, 0, 12, 0); table29 = gtk_table_new (4, 2, FALSE); gtk_widget_show (table29); gtk_container_add (GTK_CONTAINER (alignment43), table29); label184 = gtk_label_new (_("Tag Number, Port 2 ")); gtk_widget_show (label184); gtk_table_attach (GTK_TABLE (table29), label184, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label184), 0.1, 0.5); network_i4_spinbutton_adj = gtk_adjustment_new (1, 1, 10000, 1, 10, 0); network_i4_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (network_i4_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (network_i4_spinbutton); gtk_table_attach (GTK_TABLE (table29), network_i4_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (network_i4_spinbutton), TRUE); network_i1_spinbutton_adj = gtk_adjustment_new (1, 1, 10000, 1, 10, 0); network_i1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (network_i1_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (network_i1_spinbutton); gtk_table_attach (GTK_TABLE (table29), network_i1_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (network_i1_spinbutton), TRUE); network_i2_spinbutton_adj = gtk_adjustment_new (1, 1, 10000, 1, 10, 0); network_i2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (network_i2_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (network_i2_spinbutton); gtk_table_attach (GTK_TABLE (table29), network_i2_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (network_i2_spinbutton), TRUE); label183 = gtk_label_new (_("Segment Num, Port 1")); gtk_widget_show (label183); gtk_table_attach (GTK_TABLE (table29), label183, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label183), 0.1, 0.5); label182 = gtk_label_new (_("Tag Number, Port 1 ")); gtk_widget_show (label182); gtk_table_attach (GTK_TABLE (table29), label182, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label182), 0.1, 0.5); label185 = gtk_label_new (_("Segment Num, Port 2")); gtk_widget_show (label185); gtk_table_attach (GTK_TABLE (table29), label185, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label185), 0.1, 0.5); network_i3_spinbutton_adj = gtk_adjustment_new (2, 1, 10000, 1, 10, 0); network_i3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (network_i3_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (network_i3_spinbutton); gtk_table_attach (GTK_TABLE (table29), network_i3_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (network_i3_spinbutton), TRUE); label180 = gtk_label_new (_("Segment Identity")); gtk_widget_show (label180); gtk_frame_set_label_widget (GTK_FRAME (frame41), label180); gtk_misc_set_padding (GTK_MISC (label180), 4, 4); frame42 = gtk_frame_new (NULL); gtk_widget_show (frame42); gtk_box_pack_start (GTK_BOX (vbox23), frame42, TRUE, TRUE, 0); alignment44 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment44); gtk_container_add (GTK_CONTAINER (frame42), alignment44); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment44), 0, 0, 12, 0); table30 = gtk_table_new (6, 2, FALSE); gtk_widget_show (table30); gtk_container_add (GTK_CONTAINER (alignment44), table30); label186 = gtk_label_new (_("Element 1,1 Real Part")); gtk_widget_show (label186); gtk_table_attach (GTK_TABLE (table30), label186, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label186), 0.1, 0.5); label187 = gtk_label_new (_("Element 1,1 Imag Part")); gtk_widget_show (label187); gtk_table_attach (GTK_TABLE (table30), label187, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label187), 0.1, 0.5); label189 = gtk_label_new (_("Element 1,2 Real Part")); gtk_widget_show (label189); gtk_table_attach (GTK_TABLE (table30), label189, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label189), 0.1, 0.5); label190 = gtk_label_new (_("Element 1,2 Imag Part")); gtk_widget_show (label190); gtk_table_attach (GTK_TABLE (table30), label190, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label190), 0.1, 0.5); network_f3_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); network_f3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (network_f3_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (network_f3_spinbutton); gtk_table_attach (GTK_TABLE (table30), network_f3_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (network_f3_spinbutton), TRUE); network_f4_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); network_f4_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (network_f4_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (network_f4_spinbutton); gtk_table_attach (GTK_TABLE (table30), network_f4_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (network_f4_spinbutton), TRUE); label191 = gtk_label_new (_("Element 2,2 Real Part")); gtk_widget_show (label191); gtk_table_attach (GTK_TABLE (table30), label191, 0, 1, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label191), 0.1, 0.5); label192 = gtk_label_new (_("Element 2,2 Imag Part")); gtk_widget_show (label192); gtk_table_attach (GTK_TABLE (table30), label192, 1, 2, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label192), 0.1, 0.5); network_f1_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); network_f1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (network_f1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (network_f1_spinbutton); gtk_table_attach (GTK_TABLE (table30), network_f1_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (network_f1_spinbutton), TRUE); network_f2_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); network_f2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (network_f2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (network_f2_spinbutton); gtk_table_attach (GTK_TABLE (table30), network_f2_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (network_f2_spinbutton), TRUE); network_f6_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); network_f6_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (network_f6_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (network_f6_spinbutton); gtk_table_attach (GTK_TABLE (table30), network_f6_spinbutton, 1, 2, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (network_f6_spinbutton), TRUE); network_f5_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); network_f5_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (network_f5_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (network_f5_spinbutton); gtk_table_attach (GTK_TABLE (table30), network_f5_spinbutton, 0, 1, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (network_f5_spinbutton), TRUE); label181 = gtk_label_new (_("Admittance Matrix Elements")); gtk_widget_show (label181); gtk_frame_set_label_widget (GTK_FRAME (frame42), label181); gtk_misc_set_padding (GTK_MISC (label181), 4, 4); hbox43 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox43); gtk_box_pack_start (GTK_BOX (vbox23), hbox43, TRUE, TRUE, 0); network_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (network_new_button); gtk_box_pack_start (GTK_BOX (hbox43), network_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (network_new_button), 2); network_cancel_button = gtk_button_new (); gtk_widget_show (network_cancel_button); gtk_box_pack_start (GTK_BOX (hbox43), network_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (network_cancel_button), 2); alignment67 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment67); gtk_container_add (GTK_CONTAINER (network_cancel_button), alignment67); hbox65 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox65); gtk_container_add (GTK_CONTAINER (alignment67), hbox65); image87 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image87); gtk_box_pack_start (GTK_BOX (hbox65), image87, FALSE, FALSE, 0); label239 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label239); gtk_box_pack_start (GTK_BOX (hbox65), label239, FALSE, FALSE, 0); network_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (network_apply_button); gtk_box_pack_start (GTK_BOX (hbox43), network_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (network_apply_button), 2); network_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (network_ok_button); gtk_box_pack_start (GTK_BOX (hbox43), network_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (network_ok_button), 2); g_signal_connect ((gpointer) network_command, "destroy", G_CALLBACK (on_network_command_destroy), NULL); g_signal_connect ((gpointer) network_i4_spinbutton, "value_changed", G_CALLBACK (on_network_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) network_i1_spinbutton, "value_changed", G_CALLBACK (on_network_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) network_i2_spinbutton, "value_changed", G_CALLBACK (on_network_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) network_i3_spinbutton, "value_changed", G_CALLBACK (on_network_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) network_f3_spinbutton, "value_changed", G_CALLBACK (on_network_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) network_f4_spinbutton, "value_changed", G_CALLBACK (on_network_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) network_f1_spinbutton, "value_changed", G_CALLBACK (on_network_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) network_f2_spinbutton, "value_changed", G_CALLBACK (on_network_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) network_f6_spinbutton, "value_changed", G_CALLBACK (on_network_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) network_f5_spinbutton, "value_changed", G_CALLBACK (on_network_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) network_new_button, "clicked", G_CALLBACK (on_network_new_button_clicked), NULL); g_signal_connect ((gpointer) network_cancel_button, "clicked", G_CALLBACK (on_network_cancel_button_clicked), NULL); g_signal_connect ((gpointer) network_apply_button, "clicked", G_CALLBACK (on_network_apply_button_clicked), NULL); g_signal_connect ((gpointer) network_ok_button, "clicked", G_CALLBACK (on_network_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (network_command, network_command, "network_command"); GLADE_HOOKUP_OBJECT (network_command, vbox23, "vbox23"); GLADE_HOOKUP_OBJECT (network_command, frame41, "frame41"); GLADE_HOOKUP_OBJECT (network_command, alignment43, "alignment43"); GLADE_HOOKUP_OBJECT (network_command, table29, "table29"); GLADE_HOOKUP_OBJECT (network_command, label184, "label184"); GLADE_HOOKUP_OBJECT (network_command, network_i4_spinbutton, "network_i4_spinbutton"); GLADE_HOOKUP_OBJECT (network_command, network_i1_spinbutton, "network_i1_spinbutton"); GLADE_HOOKUP_OBJECT (network_command, network_i2_spinbutton, "network_i2_spinbutton"); GLADE_HOOKUP_OBJECT (network_command, label183, "label183"); GLADE_HOOKUP_OBJECT (network_command, label182, "label182"); GLADE_HOOKUP_OBJECT (network_command, label185, "label185"); GLADE_HOOKUP_OBJECT (network_command, network_i3_spinbutton, "network_i3_spinbutton"); GLADE_HOOKUP_OBJECT (network_command, label180, "label180"); GLADE_HOOKUP_OBJECT (network_command, frame42, "frame42"); GLADE_HOOKUP_OBJECT (network_command, alignment44, "alignment44"); GLADE_HOOKUP_OBJECT (network_command, table30, "table30"); GLADE_HOOKUP_OBJECT (network_command, label186, "label186"); GLADE_HOOKUP_OBJECT (network_command, label187, "label187"); GLADE_HOOKUP_OBJECT (network_command, label189, "label189"); GLADE_HOOKUP_OBJECT (network_command, label190, "label190"); GLADE_HOOKUP_OBJECT (network_command, network_f3_spinbutton, "network_f3_spinbutton"); GLADE_HOOKUP_OBJECT (network_command, network_f4_spinbutton, "network_f4_spinbutton"); GLADE_HOOKUP_OBJECT (network_command, label191, "label191"); GLADE_HOOKUP_OBJECT (network_command, label192, "label192"); GLADE_HOOKUP_OBJECT (network_command, network_f1_spinbutton, "network_f1_spinbutton"); GLADE_HOOKUP_OBJECT (network_command, network_f2_spinbutton, "network_f2_spinbutton"); GLADE_HOOKUP_OBJECT (network_command, network_f6_spinbutton, "network_f6_spinbutton"); GLADE_HOOKUP_OBJECT (network_command, network_f5_spinbutton, "network_f5_spinbutton"); GLADE_HOOKUP_OBJECT (network_command, label181, "label181"); GLADE_HOOKUP_OBJECT (network_command, hbox43, "hbox43"); GLADE_HOOKUP_OBJECT (network_command, network_new_button, "network_new_button"); GLADE_HOOKUP_OBJECT (network_command, network_cancel_button, "network_cancel_button"); GLADE_HOOKUP_OBJECT (network_command, alignment67, "alignment67"); GLADE_HOOKUP_OBJECT (network_command, hbox65, "hbox65"); GLADE_HOOKUP_OBJECT (network_command, image87, "image87"); GLADE_HOOKUP_OBJECT (network_command, label239, "label239"); GLADE_HOOKUP_OBJECT (network_command, network_apply_button, "network_apply_button"); GLADE_HOOKUP_OBJECT (network_command, network_ok_button, "network_ok_button"); return network_command; } GtkWidget* create_txline_command (void) { GtkWidget *txline_command; GtkWidget *vbox24; GtkWidget *frame43; GtkWidget *alignment45; GtkWidget *table31; GtkObject *txline_i4_spinbutton_adj; GtkWidget *txline_i4_spinbutton; GtkObject *txline_i1_spinbutton_adj; GtkWidget *txline_i1_spinbutton; GtkObject *txline_i2_spinbutton_adj; GtkWidget *txline_i2_spinbutton; GtkWidget *label194; GtkWidget *label195; GtkWidget *label196; GtkObject *txline_i3_spinbutton_adj; GtkWidget *txline_i3_spinbutton; GtkWidget *label193; GtkWidget *label197; GtkWidget *frame44; GtkWidget *alignment46; GtkWidget *table32; GtkWidget *label198; GtkWidget *label199; GtkWidget *label200; GtkWidget *label201; GtkObject *txline_f3_spinbutton_adj; GtkWidget *txline_f3_spinbutton; GtkObject *txline_f4_spinbutton_adj; GtkWidget *txline_f4_spinbutton; GtkWidget *label202; GtkWidget *label203; GtkObject *txline_f1_spinbutton_adj; GtkWidget *txline_f1_spinbutton; GtkObject *txline_f2_spinbutton_adj; GtkWidget *txline_f2_spinbutton; GtkObject *txline_f6_spinbutton_adj; GtkWidget *txline_f6_spinbutton; GtkObject *txline_f5_spinbutton_adj; GtkWidget *txline_f5_spinbutton; GtkWidget *txline_crossed_checkbutton; GtkWidget *hbox44; GtkWidget *txline_new_button; GtkWidget *txline_cancel_button; GtkWidget *alignment68; GtkWidget *hbox66; GtkWidget *image88; GtkWidget *label240; GtkWidget *txline_apply_button; GtkWidget *txline_ok_button; txline_command = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (txline_command), 4); gtk_window_set_title (GTK_WINDOW (txline_command), _("Trans. Line Command (TL Card)")); vbox24 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox24); gtk_container_add (GTK_CONTAINER (txline_command), vbox24); frame43 = gtk_frame_new (NULL); gtk_widget_show (frame43); gtk_box_pack_start (GTK_BOX (vbox24), frame43, TRUE, TRUE, 0); alignment45 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment45); gtk_container_add (GTK_CONTAINER (frame43), alignment45); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment45), 0, 0, 12, 0); table31 = gtk_table_new (4, 2, FALSE); gtk_widget_show (table31); gtk_container_add (GTK_CONTAINER (alignment45), table31); txline_i4_spinbutton_adj = gtk_adjustment_new (1, 1, 10000, 1, 10, 0); txline_i4_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (txline_i4_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (txline_i4_spinbutton); gtk_table_attach (GTK_TABLE (table31), txline_i4_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (txline_i4_spinbutton), TRUE); txline_i1_spinbutton_adj = gtk_adjustment_new (1, 1, 10000, 1, 10, 0); txline_i1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (txline_i1_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (txline_i1_spinbutton); gtk_table_attach (GTK_TABLE (table31), txline_i1_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (txline_i1_spinbutton), TRUE); txline_i2_spinbutton_adj = gtk_adjustment_new (1, 1, 10000, 1, 10, 0); txline_i2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (txline_i2_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (txline_i2_spinbutton); gtk_table_attach (GTK_TABLE (table31), txline_i2_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (txline_i2_spinbutton), TRUE); label194 = gtk_label_new (_("Segment Num, End 1")); gtk_widget_show (label194); gtk_table_attach (GTK_TABLE (table31), label194, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label194), 0.1, 0.5); label195 = gtk_label_new (_("Tag Number, End 1 ")); gtk_widget_show (label195); gtk_table_attach (GTK_TABLE (table31), label195, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label195), 0.1, 0.5); label196 = gtk_label_new (_("Segment Num, End 2")); gtk_widget_show (label196); gtk_table_attach (GTK_TABLE (table31), label196, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label196), 0.1, 0.5); txline_i3_spinbutton_adj = gtk_adjustment_new (2, 1, 10000, 1, 10, 0); txline_i3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (txline_i3_spinbutton_adj), 0.00999999977648, 0); gtk_widget_show (txline_i3_spinbutton); gtk_table_attach (GTK_TABLE (table31), txline_i3_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (txline_i3_spinbutton), TRUE); label193 = gtk_label_new (_("Tag Number, End 2 ")); gtk_widget_show (label193); gtk_table_attach (GTK_TABLE (table31), label193, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label193), 0.1, 0.5); label197 = gtk_label_new (_("Segment Identity")); gtk_widget_show (label197); gtk_frame_set_label_widget (GTK_FRAME (frame43), label197); gtk_misc_set_padding (GTK_MISC (label197), 4, 4); frame44 = gtk_frame_new (NULL); gtk_widget_show (frame44); gtk_box_pack_start (GTK_BOX (vbox24), frame44, TRUE, TRUE, 0); alignment46 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment46); gtk_container_add (GTK_CONTAINER (frame44), alignment46); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment46), 0, 0, 12, 0); table32 = gtk_table_new (6, 2, FALSE); gtk_widget_show (table32); gtk_container_add (GTK_CONTAINER (alignment46), table32); label198 = gtk_label_new (_("Characteristic Impedance")); gtk_widget_show (label198); gtk_table_attach (GTK_TABLE (table32), label198, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label198), 0.1, 0.5); gtk_misc_set_padding (GTK_MISC (label198), 4, 0); label199 = gtk_label_new (_("Length of Tx Line (m)")); gtk_widget_show (label199); gtk_table_attach (GTK_TABLE (table32), label199, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label199), 0.1, 0.5); gtk_misc_set_padding (GTK_MISC (label199), 4, 0); label200 = gtk_label_new (_("End 1 Y Real Part (S)")); gtk_widget_show (label200); gtk_table_attach (GTK_TABLE (table32), label200, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label200), 0.1, 0.5); label201 = gtk_label_new (_("End 1 Y Imag Part (S)")); gtk_widget_show (label201); gtk_table_attach (GTK_TABLE (table32), label201, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label201), 0.1, 0.5); txline_f3_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); txline_f3_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (txline_f3_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (txline_f3_spinbutton); gtk_table_attach (GTK_TABLE (table32), txline_f3_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (txline_f3_spinbutton), TRUE); txline_f4_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); txline_f4_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (txline_f4_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (txline_f4_spinbutton); gtk_table_attach (GTK_TABLE (table32), txline_f4_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (txline_f4_spinbutton), TRUE); label202 = gtk_label_new (_("End 2 Y Real Part (S)")); gtk_widget_show (label202); gtk_table_attach (GTK_TABLE (table32), label202, 0, 1, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label202), 0.1, 0.5); label203 = gtk_label_new (_("End 2 Y Imag Part (S)")); gtk_widget_show (label203); gtk_table_attach (GTK_TABLE (table32), label203, 1, 2, 4, 5, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label203), 0.1, 0.5); txline_f1_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); txline_f1_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (txline_f1_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (txline_f1_spinbutton); gtk_table_attach (GTK_TABLE (table32), txline_f1_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (txline_f1_spinbutton), TRUE); txline_f2_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); txline_f2_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (txline_f2_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (txline_f2_spinbutton); gtk_table_attach (GTK_TABLE (table32), txline_f2_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (txline_f2_spinbutton), TRUE); txline_f6_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); txline_f6_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (txline_f6_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (txline_f6_spinbutton); gtk_table_attach (GTK_TABLE (table32), txline_f6_spinbutton, 1, 2, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (txline_f6_spinbutton), TRUE); txline_f5_spinbutton_adj = gtk_adjustment_new (1, -10000, 10000, 9.99999974738e-06, 10, 0); txline_f5_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (txline_f5_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (txline_f5_spinbutton); gtk_table_attach (GTK_TABLE (table32), txline_f5_spinbutton, 0, 1, 5, 6, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (txline_f5_spinbutton), TRUE); txline_crossed_checkbutton = gtk_check_button_new_with_mnemonic (_("Crossed Transmission Line")); gtk_widget_show (txline_crossed_checkbutton); gtk_frame_set_label_widget (GTK_FRAME (frame44), txline_crossed_checkbutton); gtk_container_set_border_width (GTK_CONTAINER (txline_crossed_checkbutton), 4); hbox44 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox44); gtk_box_pack_start (GTK_BOX (vbox24), hbox44, TRUE, TRUE, 0); txline_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (txline_new_button); gtk_box_pack_start (GTK_BOX (hbox44), txline_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (txline_new_button), 2); txline_cancel_button = gtk_button_new (); gtk_widget_show (txline_cancel_button); gtk_box_pack_start (GTK_BOX (hbox44), txline_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (txline_cancel_button), 2); alignment68 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment68); gtk_container_add (GTK_CONTAINER (txline_cancel_button), alignment68); hbox66 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox66); gtk_container_add (GTK_CONTAINER (alignment68), hbox66); image88 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image88); gtk_box_pack_start (GTK_BOX (hbox66), image88, FALSE, FALSE, 0); label240 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label240); gtk_box_pack_start (GTK_BOX (hbox66), label240, FALSE, FALSE, 0); txline_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (txline_apply_button); gtk_box_pack_start (GTK_BOX (hbox44), txline_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (txline_apply_button), 2); txline_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (txline_ok_button); gtk_box_pack_start (GTK_BOX (hbox44), txline_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (txline_ok_button), 2); g_signal_connect ((gpointer) txline_command, "destroy", G_CALLBACK (on_txline_command_destroy), NULL); g_signal_connect ((gpointer) txline_i4_spinbutton, "value_changed", G_CALLBACK (on_txline_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) txline_i1_spinbutton, "value_changed", G_CALLBACK (on_txline_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) txline_i2_spinbutton, "value_changed", G_CALLBACK (on_txline_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) txline_i3_spinbutton, "value_changed", G_CALLBACK (on_txline_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) txline_f3_spinbutton, "value_changed", G_CALLBACK (on_txline_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) txline_f4_spinbutton, "value_changed", G_CALLBACK (on_txline_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) txline_f1_spinbutton, "value_changed", G_CALLBACK (on_txline_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) txline_f2_spinbutton, "value_changed", G_CALLBACK (on_txline_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) txline_f6_spinbutton, "value_changed", G_CALLBACK (on_txline_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) txline_f5_spinbutton, "value_changed", G_CALLBACK (on_txline_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) txline_crossed_checkbutton, "toggled", G_CALLBACK (on_txline_checkbutton_toggled), NULL); g_signal_connect ((gpointer) txline_new_button, "clicked", G_CALLBACK (on_txline_new_button_clicked), NULL); g_signal_connect ((gpointer) txline_cancel_button, "clicked", G_CALLBACK (on_txline_cancel_button_clicked), NULL); g_signal_connect ((gpointer) txline_apply_button, "clicked", G_CALLBACK (on_txline_apply_button_clicked), NULL); g_signal_connect ((gpointer) txline_ok_button, "clicked", G_CALLBACK (on_txline_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (txline_command, txline_command, "txline_command"); GLADE_HOOKUP_OBJECT (txline_command, vbox24, "vbox24"); GLADE_HOOKUP_OBJECT (txline_command, frame43, "frame43"); GLADE_HOOKUP_OBJECT (txline_command, alignment45, "alignment45"); GLADE_HOOKUP_OBJECT (txline_command, table31, "table31"); GLADE_HOOKUP_OBJECT (txline_command, txline_i4_spinbutton, "txline_i4_spinbutton"); GLADE_HOOKUP_OBJECT (txline_command, txline_i1_spinbutton, "txline_i1_spinbutton"); GLADE_HOOKUP_OBJECT (txline_command, txline_i2_spinbutton, "txline_i2_spinbutton"); GLADE_HOOKUP_OBJECT (txline_command, label194, "label194"); GLADE_HOOKUP_OBJECT (txline_command, label195, "label195"); GLADE_HOOKUP_OBJECT (txline_command, label196, "label196"); GLADE_HOOKUP_OBJECT (txline_command, txline_i3_spinbutton, "txline_i3_spinbutton"); GLADE_HOOKUP_OBJECT (txline_command, label193, "label193"); GLADE_HOOKUP_OBJECT (txline_command, label197, "label197"); GLADE_HOOKUP_OBJECT (txline_command, frame44, "frame44"); GLADE_HOOKUP_OBJECT (txline_command, alignment46, "alignment46"); GLADE_HOOKUP_OBJECT (txline_command, table32, "table32"); GLADE_HOOKUP_OBJECT (txline_command, label198, "label198"); GLADE_HOOKUP_OBJECT (txline_command, label199, "label199"); GLADE_HOOKUP_OBJECT (txline_command, label200, "label200"); GLADE_HOOKUP_OBJECT (txline_command, label201, "label201"); GLADE_HOOKUP_OBJECT (txline_command, txline_f3_spinbutton, "txline_f3_spinbutton"); GLADE_HOOKUP_OBJECT (txline_command, txline_f4_spinbutton, "txline_f4_spinbutton"); GLADE_HOOKUP_OBJECT (txline_command, label202, "label202"); GLADE_HOOKUP_OBJECT (txline_command, label203, "label203"); GLADE_HOOKUP_OBJECT (txline_command, txline_f1_spinbutton, "txline_f1_spinbutton"); GLADE_HOOKUP_OBJECT (txline_command, txline_f2_spinbutton, "txline_f2_spinbutton"); GLADE_HOOKUP_OBJECT (txline_command, txline_f6_spinbutton, "txline_f6_spinbutton"); GLADE_HOOKUP_OBJECT (txline_command, txline_f5_spinbutton, "txline_f5_spinbutton"); GLADE_HOOKUP_OBJECT (txline_command, txline_crossed_checkbutton, "txline_crossed_checkbutton"); GLADE_HOOKUP_OBJECT (txline_command, hbox44, "hbox44"); GLADE_HOOKUP_OBJECT (txline_command, txline_new_button, "txline_new_button"); GLADE_HOOKUP_OBJECT (txline_command, txline_cancel_button, "txline_cancel_button"); GLADE_HOOKUP_OBJECT (txline_command, alignment68, "alignment68"); GLADE_HOOKUP_OBJECT (txline_command, hbox66, "hbox66"); GLADE_HOOKUP_OBJECT (txline_command, image88, "image88"); GLADE_HOOKUP_OBJECT (txline_command, label240, "label240"); GLADE_HOOKUP_OBJECT (txline_command, txline_apply_button, "txline_apply_button"); GLADE_HOOKUP_OBJECT (txline_command, txline_ok_button, "txline_ok_button"); return txline_command; } GtkWidget* create_ground2_command (void) { GtkWidget *ground2_command; GtkWidget *vbox25; GtkWidget *frame45; GtkWidget *alignment47; GtkWidget *table33; GtkWidget *label204; GtkWidget *label205; GtkWidget *label206; GtkWidget *label207; GtkObject *ground2_diel_spinbutton_adj; GtkWidget *ground2_diel_spinbutton; GtkObject *ground2_res_spinbutton_adj; GtkWidget *ground2_res_spinbutton; GtkObject *ground2_below_spinbutton_adj; GtkWidget *ground2_below_spinbutton; GtkObject *ground2_dist_spinbutton_adj; GtkWidget *ground2_dist_spinbutton; GtkWidget *label208; GtkWidget *hbox45; GtkWidget *ground2_new_button; GtkWidget *ground2_cancel_button; GtkWidget *alignment69; GtkWidget *hbox67; GtkWidget *image89; GtkWidget *label241; GtkWidget *ground2_apply_button; GtkWidget *ground2_ok_button; ground2_command = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (ground2_command), 4); gtk_window_set_title (GTK_WINDOW (ground2_command), _("Ground Parameters (GD Card)")); vbox25 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox25); gtk_container_add (GTK_CONTAINER (ground2_command), vbox25); frame45 = gtk_frame_new (NULL); gtk_widget_show (frame45); gtk_box_pack_start (GTK_BOX (vbox25), frame45, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame45), 4); alignment47 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment47); gtk_container_add (GTK_CONTAINER (frame45), alignment47); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment47), 0, 0, 12, 0); table33 = gtk_table_new (4, 2, FALSE); gtk_widget_show (table33); gtk_container_add (GTK_CONTAINER (alignment47), table33); gtk_table_set_row_spacings (GTK_TABLE (table33), 2); gtk_table_set_col_spacings (GTK_TABLE (table33), 2); label204 = gtk_label_new (_("Relative Dielectric Const.")); gtk_widget_show (label204); gtk_table_attach (GTK_TABLE (table33), label204, 0, 1, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label204), 0, 0.5); label205 = gtk_label_new (_("Ground Conductivity S/m")); gtk_widget_show (label205); gtk_table_attach (GTK_TABLE (table33), label205, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label205), 0, 0.5); label206 = gtk_label_new (_("Distance to 2nd Medium")); gtk_widget_show (label206); gtk_table_attach (GTK_TABLE (table33), label206, 0, 1, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label206), 0, 0.5); label207 = gtk_label_new (_("Dist. below 1st Medium")); gtk_widget_show (label207); gtk_table_attach (GTK_TABLE (table33), label207, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL), (GtkAttachOptions) (0), 0, 0); gtk_misc_set_alignment (GTK_MISC (label207), 0, 0.5); ground2_diel_spinbutton_adj = gtk_adjustment_new (12, 0, 10000, 9.99999974738e-06, 10, 0); ground2_diel_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground2_diel_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (ground2_diel_spinbutton); gtk_table_attach (GTK_TABLE (table33), ground2_diel_spinbutton, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground2_diel_spinbutton), TRUE); ground2_res_spinbutton_adj = gtk_adjustment_new (0.005, 0, 10000, 9.99999974738e-06, 10, 0); ground2_res_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground2_res_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (ground2_res_spinbutton); gtk_table_attach (GTK_TABLE (table33), ground2_res_spinbutton, 1, 2, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground2_res_spinbutton), TRUE); ground2_below_spinbutton_adj = gtk_adjustment_new (1, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); ground2_below_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground2_below_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (ground2_below_spinbutton); gtk_table_attach (GTK_TABLE (table33), ground2_below_spinbutton, 1, 2, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground2_below_spinbutton), TRUE); ground2_dist_spinbutton_adj = gtk_adjustment_new (1, 9.99999974738e-06, 10000, 9.99999974738e-06, 10, 0); ground2_dist_spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (ground2_dist_spinbutton_adj), 0.00999999977648, 5); gtk_widget_show (ground2_dist_spinbutton); gtk_table_attach (GTK_TABLE (table33), ground2_dist_spinbutton, 0, 1, 3, 4, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), (GtkAttachOptions) (0), 2, 4); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ground2_dist_spinbutton), TRUE); label208 = gtk_label_new (_("2nd Medium Parameters")); gtk_widget_show (label208); gtk_frame_set_label_widget (GTK_FRAME (frame45), label208); gtk_misc_set_padding (GTK_MISC (label208), 4, 4); hbox45 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox45); gtk_box_pack_start (GTK_BOX (vbox25), hbox45, TRUE, TRUE, 0); ground2_new_button = gtk_button_new_from_stock ("gtk-new"); gtk_widget_show (ground2_new_button); gtk_box_pack_start (GTK_BOX (hbox45), ground2_new_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (ground2_new_button), 2); ground2_cancel_button = gtk_button_new (); gtk_widget_show (ground2_cancel_button); gtk_box_pack_start (GTK_BOX (hbox45), ground2_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (ground2_cancel_button), 2); alignment69 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment69); gtk_container_add (GTK_CONTAINER (ground2_cancel_button), alignment69); hbox67 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox67); gtk_container_add (GTK_CONTAINER (alignment69), hbox67); image89 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image89); gtk_box_pack_start (GTK_BOX (hbox67), image89, FALSE, FALSE, 0); label241 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label241); gtk_box_pack_start (GTK_BOX (hbox67), label241, FALSE, FALSE, 0); ground2_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (ground2_apply_button); gtk_box_pack_start (GTK_BOX (hbox45), ground2_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (ground2_apply_button), 2); ground2_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (ground2_ok_button); gtk_box_pack_start (GTK_BOX (hbox45), ground2_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (ground2_ok_button), 2); g_signal_connect ((gpointer) ground2_command, "destroy", G_CALLBACK (on_ground2_command_destroy), NULL); g_signal_connect ((gpointer) ground2_diel_spinbutton, "value_changed", G_CALLBACK (on_ground2_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground2_res_spinbutton, "value_changed", G_CALLBACK (on_ground2_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground2_below_spinbutton, "value_changed", G_CALLBACK (on_ground2_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground2_dist_spinbutton, "value_changed", G_CALLBACK (on_ground2_spinbutton_value_changed), NULL); g_signal_connect ((gpointer) ground2_new_button, "clicked", G_CALLBACK (on_ground2_new_button_clicked), NULL); g_signal_connect ((gpointer) ground2_cancel_button, "clicked", G_CALLBACK (on_ground2_cancel_button_clicked), NULL); g_signal_connect ((gpointer) ground2_apply_button, "clicked", G_CALLBACK (on_ground2_apply_button_clicked), NULL); g_signal_connect ((gpointer) ground2_ok_button, "clicked", G_CALLBACK (on_ground2_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (ground2_command, ground2_command, "ground2_command"); GLADE_HOOKUP_OBJECT (ground2_command, vbox25, "vbox25"); GLADE_HOOKUP_OBJECT (ground2_command, frame45, "frame45"); GLADE_HOOKUP_OBJECT (ground2_command, alignment47, "alignment47"); GLADE_HOOKUP_OBJECT (ground2_command, table33, "table33"); GLADE_HOOKUP_OBJECT (ground2_command, label204, "label204"); GLADE_HOOKUP_OBJECT (ground2_command, label205, "label205"); GLADE_HOOKUP_OBJECT (ground2_command, label206, "label206"); GLADE_HOOKUP_OBJECT (ground2_command, label207, "label207"); GLADE_HOOKUP_OBJECT (ground2_command, ground2_diel_spinbutton, "ground2_diel_spinbutton"); GLADE_HOOKUP_OBJECT (ground2_command, ground2_res_spinbutton, "ground2_res_spinbutton"); GLADE_HOOKUP_OBJECT (ground2_command, ground2_below_spinbutton, "ground2_below_spinbutton"); GLADE_HOOKUP_OBJECT (ground2_command, ground2_dist_spinbutton, "ground2_dist_spinbutton"); GLADE_HOOKUP_OBJECT (ground2_command, label208, "label208"); GLADE_HOOKUP_OBJECT (ground2_command, hbox45, "hbox45"); GLADE_HOOKUP_OBJECT (ground2_command, ground2_new_button, "ground2_new_button"); GLADE_HOOKUP_OBJECT (ground2_command, ground2_cancel_button, "ground2_cancel_button"); GLADE_HOOKUP_OBJECT (ground2_command, alignment69, "alignment69"); GLADE_HOOKUP_OBJECT (ground2_command, hbox67, "hbox67"); GLADE_HOOKUP_OBJECT (ground2_command, image89, "image89"); GLADE_HOOKUP_OBJECT (ground2_command, label241, "label241"); GLADE_HOOKUP_OBJECT (ground2_command, ground2_apply_button, "ground2_apply_button"); GLADE_HOOKUP_OBJECT (ground2_command, ground2_ok_button, "ground2_ok_button"); return ground2_command; } GtkWidget* create_gend_editor (void) { GtkWidget *gend_editor; GtkWidget *vbox26; GtkWidget *frame46; GtkWidget *alignment48; GtkWidget *vbox27; GtkWidget *gend_nognd_radiobutton; GSList *gend_nognd_radiobutton_group = NULL; GtkWidget *gend_img_radiobutton; GtkWidget *gend_noimg_radiobutton; GtkWidget *label211; GtkWidget *hbox46; GtkWidget *gend_cancel_button; GtkWidget *alignment70; GtkWidget *hbox68; GtkWidget *image90; GtkWidget *label242; GtkWidget *gend_apply_button; GtkWidget *gend_ok_button; gend_editor = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (gend_editor), 4); gtk_window_set_title (GTK_WINDOW (gend_editor), _("Geometry End (GE Card)")); vbox26 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox26); gtk_container_add (GTK_CONTAINER (gend_editor), vbox26); frame46 = gtk_frame_new (NULL); gtk_widget_show (frame46); gtk_box_pack_start (GTK_BOX (vbox26), frame46, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (frame46), 4); alignment48 = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_widget_show (alignment48); gtk_container_add (GTK_CONTAINER (frame46), alignment48); gtk_alignment_set_padding (GTK_ALIGNMENT (alignment48), 0, 0, 12, 0); vbox27 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox27); gtk_container_add (GTK_CONTAINER (alignment48), vbox27); gend_nognd_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("No Ground, Free Space condition")); gtk_widget_show (gend_nognd_radiobutton); gtk_box_pack_start (GTK_BOX (vbox27), gend_nognd_radiobutton, TRUE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (gend_nognd_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (gend_nognd_radiobutton), gend_nognd_radiobutton_group); gend_nognd_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (gend_nognd_radiobutton)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gend_nognd_radiobutton), TRUE); gend_img_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Ground present, Strucure reflection")); gtk_widget_show (gend_img_radiobutton); gtk_box_pack_start (GTK_BOX (vbox27), gend_img_radiobutton, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (gend_img_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (gend_img_radiobutton), gend_nognd_radiobutton_group); gend_nognd_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (gend_img_radiobutton)); gend_noimg_radiobutton = gtk_radio_button_new_with_mnemonic (NULL, _("Ground present, no Structure reflection")); gtk_widget_show (gend_noimg_radiobutton); gtk_box_pack_start (GTK_BOX (vbox27), gend_noimg_radiobutton, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (gend_noimg_radiobutton), 2); gtk_radio_button_set_group (GTK_RADIO_BUTTON (gend_noimg_radiobutton), gend_nognd_radiobutton_group); gend_nognd_radiobutton_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (gend_noimg_radiobutton)); label211 = gtk_label_new (_("Ground Plane type")); gtk_widget_show (label211); gtk_frame_set_label_widget (GTK_FRAME (frame46), label211); gtk_misc_set_padding (GTK_MISC (label211), 4, 4); hbox46 = gtk_hbox_new (TRUE, 0); gtk_widget_show (hbox46); gtk_box_pack_start (GTK_BOX (vbox26), hbox46, FALSE, FALSE, 0); gend_cancel_button = gtk_button_new (); gtk_widget_show (gend_cancel_button); gtk_box_pack_start (GTK_BOX (hbox46), gend_cancel_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (gend_cancel_button), 2); alignment70 = gtk_alignment_new (0.5, 0.5, 0, 0); gtk_widget_show (alignment70); gtk_container_add (GTK_CONTAINER (gend_cancel_button), alignment70); hbox68 = gtk_hbox_new (FALSE, 2); gtk_widget_show (hbox68); gtk_container_add (GTK_CONTAINER (alignment70), hbox68); image90 = gtk_image_new_from_stock ("gtk-delete", GTK_ICON_SIZE_BUTTON); gtk_widget_show (image90); gtk_box_pack_start (GTK_BOX (hbox68), image90, FALSE, FALSE, 0); label242 = gtk_label_new_with_mnemonic ("Delete Card"); gtk_widget_show (label242); gtk_box_pack_start (GTK_BOX (hbox68), label242, FALSE, FALSE, 0); gend_apply_button = gtk_button_new_from_stock ("gtk-apply"); gtk_widget_show (gend_apply_button); gtk_box_pack_start (GTK_BOX (hbox46), gend_apply_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (gend_apply_button), 2); gend_ok_button = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (gend_ok_button); gtk_box_pack_start (GTK_BOX (hbox46), gend_ok_button, TRUE, TRUE, 0); gtk_container_set_border_width (GTK_CONTAINER (gend_ok_button), 2); g_signal_connect ((gpointer) gend_editor, "destroy", G_CALLBACK (on_gend_editor_destroy), NULL); g_signal_connect ((gpointer) gend_nognd_radiobutton, "toggled", G_CALLBACK (on_gend_radiobutton_toggled), NULL); g_signal_connect ((gpointer) gend_img_radiobutton, "toggled", G_CALLBACK (on_gend_radiobutton_toggled), NULL); g_signal_connect ((gpointer) gend_noimg_radiobutton, "toggled", G_CALLBACK (on_gend_radiobutton_toggled), NULL); g_signal_connect ((gpointer) gend_cancel_button, "clicked", G_CALLBACK (on_gend_cancel_button_clicked), NULL); g_signal_connect ((gpointer) gend_apply_button, "clicked", G_CALLBACK (on_gend_apply_button_clicked), NULL); g_signal_connect ((gpointer) gend_ok_button, "clicked", G_CALLBACK (on_gend_ok_button_clicked), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (gend_editor, gend_editor, "gend_editor"); GLADE_HOOKUP_OBJECT (gend_editor, vbox26, "vbox26"); GLADE_HOOKUP_OBJECT (gend_editor, frame46, "frame46"); GLADE_HOOKUP_OBJECT (gend_editor, alignment48, "alignment48"); GLADE_HOOKUP_OBJECT (gend_editor, vbox27, "vbox27"); GLADE_HOOKUP_OBJECT (gend_editor, gend_nognd_radiobutton, "gend_nognd_radiobutton"); GLADE_HOOKUP_OBJECT (gend_editor, gend_img_radiobutton, "gend_img_radiobutton"); GLADE_HOOKUP_OBJECT (gend_editor, gend_noimg_radiobutton, "gend_noimg_radiobutton"); GLADE_HOOKUP_OBJECT (gend_editor, label211, "label211"); GLADE_HOOKUP_OBJECT (gend_editor, hbox46, "hbox46"); GLADE_HOOKUP_OBJECT (gend_editor, gend_cancel_button, "gend_cancel_button"); GLADE_HOOKUP_OBJECT (gend_editor, alignment70, "alignment70"); GLADE_HOOKUP_OBJECT (gend_editor, hbox68, "hbox68"); GLADE_HOOKUP_OBJECT (gend_editor, image90, "image90"); GLADE_HOOKUP_OBJECT (gend_editor, label242, "label242"); GLADE_HOOKUP_OBJECT (gend_editor, gend_apply_button, "gend_apply_button"); GLADE_HOOKUP_OBJECT (gend_editor, gend_ok_button, "gend_ok_button"); return gend_editor; } GtkWidget* create_aboutdialog (void) { GtkWidget *aboutdialog; const gchar *authors[] = { "Neoklis Kyriazis", "Ham Radio Call: 5B4AZ", "http://www.qsl.net/5b4az", NULL }; const gchar *documenters[] = { "Neoklis Kyriazis", NULL }; /* TRANSLATORS: Replace this string with your names, one name per line. */ gchar *translators = _("translator-credits"); aboutdialog = gtk_about_dialog_new (); gtk_container_set_border_width (GTK_CONTAINER (aboutdialog), 5); gtk_about_dialog_set_version (GTK_ABOUT_DIALOG (aboutdialog), VERSION); gtk_about_dialog_set_name (GTK_ABOUT_DIALOG (aboutdialog), _("Xnec2c")); gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG (aboutdialog), _("(C) 2007-2010 Neoklis Kyriazis")); gtk_about_dialog_set_comments (GTK_ABOUT_DIALOG (aboutdialog), _("xnec2c is an interactive graphical wrapper around a modified version of nec2c, which is itself a translation to C of the original FORTRAN NEC2 Numerical Electromagnetics Code.\n\nxnec2c can display frequency-dependent data (gain, input impedance, vswr etc) in a graphical format. It can also display radiation pattern data in a rotatable wire frame format and near-field (E, H, S vectors) in a grid format.\n\nxnec2c has a built-in NEC2 input file editor that makes it easier to create or edit antenna description files and specify NEC2 commands.\n\nPLEASE read the documantation in the doc/ sub-directory as xnec2c is not fully compatible with NEC2 input files and it works in different ways!")); gtk_about_dialog_set_license (GTK_ABOUT_DIALOG (aboutdialog), _("GPL v2 or higher")); gtk_about_dialog_set_website (GTK_ABOUT_DIALOG (aboutdialog), "http://www.qsl.net/5b4az"); gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG (aboutdialog), authors); gtk_about_dialog_set_documenters (GTK_ABOUT_DIALOG (aboutdialog), documenters); gtk_about_dialog_set_translator_credits (GTK_ABOUT_DIALOG (aboutdialog), translators); g_signal_connect ((gpointer) aboutdialog, "close", G_CALLBACK (on_aboutdialog_close), NULL); g_signal_connect ((gpointer) aboutdialog, "response", G_CALLBACK (on_aboutdialog_response), NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (aboutdialog, aboutdialog, "aboutdialog"); return aboutdialog; } xnec2c-3.4/src/interface.h000066400000000000000000000024621257141547200154560ustar00rootroot00000000000000/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ GtkWidget* create_main_window (void); GtkWidget* create_filechooserdialog (void); GtkWidget* create_fileselection (void); GtkWidget* create_freqplots_window (void); GtkWidget* create_rdpattern_window (void); GtkWidget* create_quit_dialog (void); GtkWidget* create_error_dialog (void); GtkWidget* create_animate_dialog (void); GtkWidget* create_nec2_editor (void); GtkWidget* create_wire_editor (void); GtkWidget* create_patch_editor (void); GtkWidget* create_arc_editor (void); GtkWidget* create_transform_editor (void); GtkWidget* create_helix_editor (void); GtkWidget* create_reflect_editor (void); GtkWidget* create_scale_editor (void); GtkWidget* create_cylinder_editor (void); GtkWidget* create_kernel_command (void); GtkWidget* create_execute_command (void); GtkWidget* create_intrange_command (void); GtkWidget* create_ground_command (void); GtkWidget* create_nearfield_command (void); GtkWidget* create_radiation_command (void); GtkWidget* create_excitation_command (void); GtkWidget* create_frequency_command (void); GtkWidget* create_loading_command (void); GtkWidget* create_network_command (void); GtkWidget* create_txline_command (void); GtkWidget* create_ground2_command (void); GtkWidget* create_gend_editor (void); GtkWidget* create_aboutdialog (void); xnec2c-3.4/src/main.c000066400000000000000000000323071257141547200144360ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* * Initial main.c file generated by Glade. Edit as required. * Glade will not overwrite this file. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "main.h" #include "shared.h" static void sig_handler(int signal); /* Child process pid returned by fork() */ static pid_t child_pid = (pid_t)(-1); /*------------------------------------------------------------------------*/ int main (int argc, char *argv[]) { /* getopt() variables */ int option, idx, err; gboolean new = TRUE; /*** Signal handler related code ***/ /* new and old actions for sigaction() */ struct sigaction sa_new, sa_old; /* initialize new actions */ sa_new.sa_handler = sig_handler; sigemptyset( &sa_new.sa_mask ); sa_new.sa_flags = 0; /* register function to handle signals */ sigaction( SIGINT, &sa_new, &sa_old ); sigaction( SIGSEGV, &sa_new, NULL ); sigaction( SIGFPE, &sa_new, NULL ); sigaction( SIGTERM, &sa_new, NULL ); sigaction( SIGABRT, &sa_new, NULL ); sigaction( SIGCHLD, &sa_new, NULL ); /* Process command line options */ calc_data.num_jobs = 1; while( (option = getopt(argc, argv, "i:j:hv") ) != -1 ) { switch( option ) { case 'i': /* specify input file name */ if( strlen(optarg) > 80 ) { fprintf ( stderr, _("xnec2c: input file name too long (>80 char)\n") ); exit(-1); } Strlcpy( infile, optarg, sizeof(infile) ); /* For null term. */ break; case 'j': /* number of child processes = num of processors */ calc_data.num_jobs = atoi( optarg ); break; case 'h': /* print usage and exit */ usage(); exit(0); case 'v': /* print xnec2c version */ puts( PACKAGE_STRING ); exit(0); default: usage(); exit(0); } /* end of switch( option ) */ } /* while( (option = getopt(argc, argv, "i:o:hv") ) != -1 ) */ /* Read input file path name if not supplied by -i option */ if( (strlen(infile) == 0) && (strstr(argv[argc - 1], ".nec") || strstr(argv[argc - 1], ".NEC")) ) { if( strlen(argv[argc - 1]) > 80 ) { fprintf ( stderr, _("xnec2c: input file path name too long (>80 char)\n") ); exit(-1); } Strlcpy( infile, argv[argc-1], sizeof(infile) ); /* For null term. */ } /* When forking is useful, e.g. if more than 1 processor is * available, the parent process handles the GUI and delegates * calculations to the child processes, one per processor. The * requested number of child processes = number of processors */ /* Allocate buffers for fork data */ if( calc_data.num_jobs > 1 ) { size_t mreq = (size_t)calc_data.num_jobs * sizeof(forked_proc_data_t *); mem_alloc( (void **)&forked_proc_data, mreq, "in main.c" ); for( idx = 0; idx < calc_data.num_jobs; idx++ ) { forked_proc_data[idx] = NULL; mreq = sizeof(forked_proc_data_t); mem_alloc( (void **)&forked_proc_data[idx], mreq, "in main.c" ); } /* Fork child processes */ for( idx = 0; idx < calc_data.num_jobs; idx++ ) { /* Make pipes to transfer data */ err = pipe( forked_proc_data[idx]->pnt2child_pipe ); if( err ) { perror( "xnec2c: pipe()" ); fprintf( stderr, _("xnec2c: exiting after fatal error (pipe() failed)") ); exit(-1); } err = pipe( forked_proc_data[idx]->child2pnt_pipe ); if( err ) { perror( "xnec2c: pipe()" ); fprintf( stderr, _("xnec2c: exiting after fatal error (pipe() failed)") ); exit(-1); } /* Fork child process */ forked_proc_data[idx]->child_pid = fork(); if( forked_proc_data[idx]->child_pid == -1 ) { perror( "xnec2c: fork()" ); fprintf( stderr, _("xnec2c: exiting after fatal error (fork() failed)") ); exit(-1); } else child_pid = forked_proc_data[idx]->child_pid; /* Child get out of forking loop! */ if( CHILD ) Child_Process( idx ); /* Ready to accept a job */ forked_proc_data[idx]->busy = FALSE; /* Close unwanted pipe ends */ close( forked_proc_data[idx]->pnt2child_pipe[READ] ); close( forked_proc_data[idx]->child2pnt_pipe[WRITE] ); /* Set file descriptors for select() */ FD_ZERO( &forked_proc_data[idx]->read_fds ); FD_SET( forked_proc_data[idx]->child2pnt_pipe[READ], &forked_proc_data[idx]->read_fds ); FD_ZERO( &forked_proc_data[idx]->write_fds ); FD_SET( forked_proc_data[idx]->pnt2child_pipe[WRITE], &forked_proc_data[idx]->write_fds ); /* Count child processes */ num_child_procs++; } /* for( idx = 0; idx < calc_data.num_jobs; idx++ ) */ FORKED = TRUE; } /* if( calc_data.num_jobs > 1 ) */ gtk_set_locale (); gtk_init (&argc, &argv); setlocale(LC_NUMERIC, "C"); add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps"); /* * The following code was added by Glade to create one of each component * (except popup menus), just so that you see something after building * the project. Delete any components that you don't want shown initially. */ main_window = create_main_window (); gtk_window_set_title( GTK_WINDOW(main_window), PACKAGE_STRING ); gtk_widget_show (main_window); mainwin_frequency = GTK_SPIN_BUTTON(lookup_widget( main_window, "main_freq_spinbutton") ); gtk_widget_hide_all( lookup_widget( main_window, "main_hbox1") ); gtk_widget_hide_all( lookup_widget( main_window, "main_hbox2") ); gtk_widget_hide_all( lookup_widget( main_window, "main_hbox3") ); gtk_widget_hide_all( lookup_widget( main_window, "main_view_menuitem") ); gtk_widget_hide( lookup_widget( main_window, "structure_drawingarea") ); structure_drawingarea = lookup_widget( main_window, "structure_drawingarea"); gtk_widget_add_events( GTK_WIDGET(structure_drawingarea), GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK ); structure_motion_handler = g_signal_connect ( (gpointer) structure_drawingarea, "motion_notify_event", G_CALLBACK (on_structure_drawingarea_motion_notify_event), NULL); /* Initialize structure projection angles */ rotate_structure = GTK_SPIN_BUTTON(lookup_widget( main_window, "main_rotate_spinbutton")); incline_structure = GTK_SPIN_BUTTON(lookup_widget( main_window, "main_incline_spinbutton")); structure_zoom = GTK_SPIN_BUTTON(lookup_widget( main_window, "structure_zoom_spinbutton")); structure_fstep_entry = GTK_ENTRY(lookup_widget( main_window, "structure_fstep_entry")) ; structure_proj_params.Wr = gtk_spin_button_get_value(rotate_structure); structure_proj_params.Wi = gtk_spin_button_get_value(incline_structure); structure_proj_params.xy_zoom = 1.0; structure_proj_params.reset = TRUE; structure_proj_params.type = STRUCTURE_DRAWINGAREA; rdpattern_proj_params.xy_zoom = 1.0; rdpattern_proj_params.reset = TRUE; rdpattern_proj_params.type = RDPATTERN_DRAWINGAREA; calc_data.zo = 50.0; /* Open input file if specified */ if( strlen(infile) > 0 ) g_idle_add( Open_Input_File, (gpointer)&new ); else SetFlag( INPUT_PENDING ); gtk_main (); return 0; } /*-----------------------------------------------------------------------*/ /* Open_Input_File() * * Opens NEC2 input file */ gboolean Open_Input_File( gpointer udata ) { gboolean ok, new; /* Stop freq loop */ if( isFlagSet(FREQ_LOOP_RUNNING) ) Stop_Frequency_Loop(); /* Close open files if any */ Close_File( &input_fp ); /* Suppress activity while input file opened */ ClearFlag( OPEN_INPUT_FLAGS ); SetFlag( INPUT_PENDING ); calc_data.fstep = -1; /* Open NEC2 input file */ Open_File( &input_fp, infile, "r"); /* Read input file, record failures */ ok = Read_Comments() && Read_Geometry() && Read_Commands(); if( !ok ) { /* Hide main control buttons etc */ gtk_widget_hide_all( lookup_widget( main_window, "main_hbox1") ); gtk_widget_hide_all( lookup_widget( main_window, "main_hbox2") ); gtk_widget_hide_all( lookup_widget( main_window, "main_view_menuitem") ); gtk_widget_hide( lookup_widget( main_window, "structure_drawingarea") ); /* Close plot/rdpat windows */ if( rdpattern_window != NULL ) gtk_widget_destroy( rdpattern_window ); if( freqplots_window != NULL ) gtk_widget_destroy( freqplots_window ); if( nec2_edit_window == NULL ) Open_Nec2_Editor( NEC2_EDITOR_RELOAD ); else Nec2_Input_File_Treeview( NEC2_EDITOR_REVERT ); return( FALSE ); } /* Ask child processes to read input file */ if( FORKED ) { int idx; size_t lenc, leni; lenc = strlen( fork_commands[INFILE] ); leni = strlen( infile ); for( idx = 0; idx < num_child_procs; idx++ ) { Write_Pipe( idx, fork_commands[INFILE], (ssize_t)lenc, TRUE ); Write_Pipe( idx, infile, (ssize_t)leni, TRUE ); } } /* if( FORKED ) */ /* Allow redraws on expose events etc */ ClearFlag( INPUT_PENDING ); /* Initialize xnec2c */ SetFlag( COMMON_PROJECTION ); SetFlag( COMMON_FREQUENCY ); SetFlag( MAIN_NEW_FREQ ); SetFlag( FREQ_LOOP_INIT ); floop_tag = 0; save.last_freq = 0.0; crnt.newer = 0; crnt.valid = 0; near_field.newer = 0; near_field.valid = 0; /* Set projection at 45 deg rotation and * inclination if NEC2 editor window is not open */ if( nec2_edit_window == NULL ) New_Viewer_Angle( 45.0, 45.0, rotate_structure, incline_structure, &structure_proj_params ); New_Structure_Projection_Angle(); /* Show current frequency */ gtk_spin_button_set_value( mainwin_frequency, (gdouble)calc_data.fmhz ); /* Show main control buttons etc */ gtk_widget_show_all( lookup_widget( main_window, "main_hbox1") ); gtk_widget_show_all( lookup_widget( main_window, "main_hbox2") ); gtk_widget_show_all( lookup_widget( main_window, "main_hbox3") ); gtk_widget_show_all( lookup_widget( main_window, "main_view_menuitem") ); gtk_widget_show( lookup_widget( main_window, "structure_drawingarea") ); /* If currents or charges draw button is active * re-initialize structure currents/charges drawing */ if( isFlagSet(DRAW_CURRENTS) ) Main_Currents_Togglebutton_Toggled( TRUE ); if( isFlagSet(DRAW_CHARGES) ) Main_Charges_Togglebutton_Toggled( TRUE ); /* Set input file to NEC2 editor. It will only * happen if the NEC2 editor window is open */ new = *(gboolean *)udata; if( new ) Nec2_Input_File_Treeview( NEC2_EDITOR_REVERT ); else Nec2_Input_File_Treeview( NEC2_EDITOR_RELOAD ); /* Display sructure */ Draw_Structure( structure_drawingarea ); /* Re-initialize Rad Pattern drawing if window open */ if( rdpattern_window != NULL ) { Main_Rdpattern_Activate( FALSE ); crnt.valid = FALSE; if( isFlagSet(DRAW_GAIN) ) Rdpattern_Gain_Togglebutton_Toggled( TRUE ); else Rdpattern_Gain_Togglebutton_Toggled( FALSE ); if( isFlagSet(DRAW_EHFIELD) ) Rdpattern_EH_Togglebutton_Toggled( TRUE ); else Rdpattern_EH_Togglebutton_Toggled( FALSE ); } /* Re-initiate plots if window open */ if( freqplots_window != NULL ) { Main_Freqplots_Activate(); Start_Frequency_Loop(); } return( FALSE ); } /* Open_Input_File() */ /*------------------------------------------------------------------------*/ static void sig_handler( int signal ) { switch( signal ) { case SIGINT: fprintf( stderr, _("xnec2c: exiting via user interrupt\n") ); break; case SIGSEGV: fprintf( stderr, _("xnec2c: segmentation fault, exiting\n") ); break; case SIGFPE: fprintf( stderr, _("xnec2c: floating point exception, exiting\n") ); break; case SIGABRT: fprintf( stderr, _("xnec2c: abort signal received, exiting\n") ); break; case SIGTERM: fprintf( stderr, _("xnec2c: termination request received, exiting\n") ); break; case SIGCHLD: { int idx; pid_t pid = getpid(); if( !FORKED ) { fprintf( stderr, _("xnec2c: not forked, ignoring SIGCHLD from pid %d\n"), pid ); return; } else { for( idx = 0; idx < calc_data.num_jobs; idx++ ) if( forked_proc_data[idx]->child_pid == pid ) { fprintf( stderr, _("xnec2c: child process pid %d exited\n"), pid ); if( isFlagSet(MAIN_QUIT) ) return; else break; } return; } } default: fprintf( stderr, _("xnec2c: default exit with signal: %d\n"), signal ); } /* switch( signal ) */ /* Kill child processes */ if( FORKED && !CHILD ) while( num_child_procs ) { num_child_procs--; kill( forked_proc_data[num_child_procs]->child_pid, SIGKILL ); } Close_File( &input_fp ); if( CHILD ) _exit( 0 ); else exit( signal ); } /* End of sig_handler() */ /*------------------------------------------------------------------------*/ /* Tests for child process */ gboolean isChild(void) { return( child_pid == (pid_t)(0) ); } /*------------------------------------------------------------------------*/ xnec2c-3.4/src/main.h000066400000000000000000000021021257141547200144310ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef MAIN_H #define MAIN_H 1 #include "common.h" #include "callbacks.h" #include "interface.h" #include "support.h" #include "fork.h" #include "nec2_model.h" #define OPEN_INPUT_FLAGS \ RDPAT_FLAGS | \ FREQ_LOOP_FLAGS | \ PLOT_FREQ_LINE | \ ENABLE_EXCITN #endif xnec2c-3.4/src/matrix.c000066400000000000000000000756771257141547200150370ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /******* Translated to the C language by N. Kyriazis 20 Aug 2003 ****** Program NEC(input,tape5=input,output,tape11,tape12,tape13,tape14, tape15,tape16,tape20,tape21) Numerical Electromagnetics Code (NEC2) developed at Lawrence Livermore lab., Livermore, CA. (contact G. Burke at 415-422-8414 for problems with the NEC code. For problems with the vax implem- entation, contact J. Breakall at 415-422-8196 or E. Domning at 415 422-5936) file created 4/11/80. ***********Notice********** This computer code material was prepared as an account of work sponsored by the United States government. Neither the United States nor the United States Department Of Energy, nor any of their employees, nor any of their contractors, subcontractors, or their employees, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness or usefulness of any information, apparatus, product or process disclosed, or represents that its use would not infringe privately-owned rights. ***********************************************************************/ #include "matrix.h" #include "shared.h" /*-------------------------------------------------------------------*/ /* cmset sets up the complex structure matrix in the array cm */ void cmset( int nrow, complex double *cmx, double rkhx, int iexkx ) { int mp2, neq, npeq, it, i, j, i1, i2, in2, im1; int im2, ist, ij, ipr, jss, jm1, jm2, jst, k, ka, kk; complex double zaj, deter, *scm = NULL; mp2=2* data.mp; npeq= data.np+ mp2; neq= data.n+2* data.m; smat.nop = neq/npeq; dataj.rkh= rkhx; dataj.iexk= iexkx; it= matpar.nlast; for( i = 0; i < nrow; i++ ) for( j = 0; j < it; j++ ) cmx[i+j*nrow]= CPLX_00; i1= 1; i2= it; in2= i2; if( in2 > data.np) in2= data.np; im1= i1- data.np; im2= i2- data.np; if( im1 < 1) im1=1; ist=1; if( i1 <= data.np) ist= data.np- i1+2; /* wire source loop */ if( data.n != 0) { for( j = 1; j <= data.n; j++ ) { trio(j); for( i = 0; i < segj.jsno; i++ ) { ij= segj.jco[i]; segj.jco[i]=(( ij-1)/ data.np)* mp2+ ij; } if( i1 <= in2) cmww( j, i1, in2, cmx, nrow, cmx, nrow,1); if( im1 <= im2) cmws( j, im1, im2, &cmx[(ist-1)*nrow], nrow, cmx, 1); /* matrix elements modified by loading */ if( zload.nload == 0) continue; if( j > data.np) continue; ipr= j; if( (ipr < 1) || (ipr > it) ) continue; zaj= zload.zarray[j-1]; for( i = 0; i < segj.jsno; i++ ) { jss= segj.jco[i]; cmx[(jss-1)+(ipr-1)*nrow] -= ( segj.ax[i]+ segj.cx[i])* zaj; } } /* for( j = 1; j <= n; j++ ) */ } /* if( n != 0) */ if( data.m != 0) { /* matrix elements for patch current sources */ jm1=1- data.mp; jm2=0; jst=1- mp2; for( i = 0; i < smat.nop; i++ ) { jm1 += data.mp; jm2 += data.mp; jst += npeq; if( i1 <= in2) cmsw( jm1, jm2, i1, in2, &cmx[(jst-1)], cmx, 0, nrow, 1); if( im1 <= im2) cmss( jm1, jm2, im1, im2, &cmx[(jst-1)+(ist-1)*nrow], nrow, 1); } } /* if( m != 0) */ if( matpar.icase == 1) return; /* Allocate to scratch memory */ size_t mreq = (size_t)data.np2m * sizeof(complex double); mem_alloc( (void **)&scm, mreq, "in matrix.c"); /* combine elements for symmetry modes */ for( i = 0; i < it; i++ ) { for( j = 0; j < npeq; j++ ) { for( k = 0; k < smat.nop; k++ ) { ka= j+ k*npeq; scm[k]= cmx[ka+i*nrow]; } deter= scm[0]; for( kk = 1; kk < smat.nop; kk++ ) deter += scm[kk]; cmx[j+i*nrow]= deter; for( k = 1; k < smat.nop; k++ ) { ka= j+ k*npeq; deter= scm[0]; for( kk = 1; kk < smat.nop; kk++ ) { deter += scm[kk]* smat.ssx[k+kk*smat.nop]; cmx[ka+i*nrow]= deter; } } /* for( k = 1; k < smat.nop; k++ ) */ } /* for( j = 0; j < npeq; j++ ) */ } /* for( i = 0; i < it; i++ ) */ free_ptr( (void **)&scm ); return; } /*-----------------------------------------------------------------------*/ /* cmss computes matrix elements for surface-surface interactions. */ void cmss( int j1, int j2, int im1, int im2, complex double *cmx, int nrow, int itrp ) { int i1, i2, icomp, ii1, i, il, ii2, jj1, j, jl, jj2; double t1xi, t1yi, t1zi, t2xi, t2yi, t2zi, xi, yi, zi; complex double g11, g12, g21, g22; i1=( im1+1)/2; i2=( im2+1)/2; icomp= i1*2-3; ii1=-2; if( icomp+2 < im1) ii1=-3; /* loop over observation patches */ il = -1; for( i = i1; i <= i2; i++ ) { il++; icomp += 2; ii1 += 2; ii2 = ii1+1; t1xi= data.t1x[il]* data.psalp[il]; t1yi= data.t1y[il]* data.psalp[il]; t1zi= data.t1z[il]* data.psalp[il]; t2xi= data.t2x[il]* data.psalp[il]; t2yi= data.t2y[il]* data.psalp[il]; t2zi= data.t2z[il]* data.psalp[il]; xi= data.px[il]; yi= data.py[il]; zi= data.pz[il]; /* loop over source patches */ jj1=-2; for( j = j1; j <= j2; j++ ) { jl=j-1; jj1 += 2; jj2 = jj1+1; dataj.s= data.pbi[jl]; dataj.xj= data.px[jl]; dataj.yj= data.py[jl]; dataj.zj= data.pz[jl]; dataj.t1xj= data.t1x[jl]; dataj.t1yj= data.t1y[jl]; dataj.t1zj= data.t1z[jl]; dataj.t2xj= data.t2x[jl]; dataj.t2yj= data.t2y[jl]; dataj.t2zj= data.t2z[jl]; hintg( xi, yi, zi); g11=-( t2xi* dataj.exk+ t2yi* dataj.eyk+ t2zi* dataj.ezk); g12=-( t2xi* dataj.exs+ t2yi* dataj.eys+ t2zi* dataj.ezs); g21=-( t1xi* dataj.exk+ t1yi* dataj.eyk+ t1zi* dataj.ezk); g22=-( t1xi* dataj.exs+ t1yi* dataj.eys+ t1zi* dataj.ezs); if( i == j ) { g11 -= .5; g22 += .5; } /* normal fill */ if( itrp == 0) { if( icomp >= im1 ) { cmx[ii1+jj1*nrow]= g11; cmx[ii1+jj2*nrow]= g12; } if( icomp >= im2 ) continue; cmx[ii2+jj1*nrow]= g21; cmx[ii2+jj2*nrow]= g22; continue; } /* if( itrp == 0) */ /* transposed fill */ if( icomp >= im1 ) { cmx[jj1+ii1*nrow]= g11; cmx[jj2+ii1*nrow]= g12; } if( icomp >= im2 ) continue; cmx[jj1+ii2*nrow]= g21; cmx[jj2+ii2*nrow]= g22; } /* for( j = j1; j <= j2; j++ ) */ } /* for( i = i1; i <= i2; i++ ) */ return; } /*-----------------------------------------------------------------------*/ /* computes matrix elements for e along wires due to patch current */ void cmsw( int j1, int j2, int i1, int i2, complex double *cmx, complex double *cw, int ncw, int nrow, int itrp ) { int jsnox; /* -1 offset to "jsno" for array indexing */ static complex double *emel = NULL; size_t mreq = 9 * sizeof(complex double); mem_alloc( (void **)&emel, mreq, "in matrix.c"); jsnox = segj.jsno-1; if( itrp >= 0) { int k, icgo, i, ipch, jl, j, js, il, ip; double xi, yi, zi, cabi, sabi, salpi, fsign=1.0, pyl, pxl; k=-1; icgo=0; /* observation loop */ for( i = i1-1; i < i2; i++ ) { k++; xi= data.x[i]; yi= data.y[i]; zi= data.z[i]; cabi= data.cab[i]; sabi= data.sab[i]; salpi= data.salp[i]; ipch=0; if( data.icon1[i] >= PCHCON) { ipch= data.icon1[i]-PCHCON; fsign=-1.0; } if( data.icon2[i] >= PCHCON) { ipch= data.icon2[i]-PCHCON; fsign=1.0; } /* source loop */ jl = -1; for( j = j1; j <= j2; j++ ) { jl += 2; js = j-1; dataj.t1xj= data.t1x[js]; dataj.t1yj= data.t1y[js]; dataj.t1zj= data.t1z[js]; dataj.t2xj= data.t2x[js]; dataj.t2yj= data.t2y[js]; dataj.t2zj= data.t2z[js]; dataj.xj= data.px[js]; dataj.yj= data.py[js]; dataj.zj= data.pz[js]; dataj.s= data.pbi[js]; /* ground loop */ for( ip = 1; ip <= gnd.ksymp; ip++ ) { dataj.ipgnd= ip; if( ((ipch == j) || (icgo != 0)) && (ip != 2) ) { if( icgo <= 0 ) { pcint( xi, yi, zi, cabi, sabi, salpi, emel); pyl= PI* data.si[i]* fsign; pxl= sin( pyl); pyl= cos( pyl); dataj.exc= emel[8]* fsign; trio(i+1); il= i-ncw; if( i < data.np) il += (il/data.np)*2*data.mp; if( itrp == 0 ) cw[k+il*nrow] += dataj.exc*( segj.ax[jsnox] + segj.bx[jsnox]* pxl+ segj.cx[jsnox]* pyl); else cw[il+k*nrow] += dataj.exc*( segj.ax[jsnox] + segj.bx[jsnox]* pxl+ segj.cx[jsnox]* pyl); } /* if( icgo <= 0 ) */ if( itrp == 0) { cmx[k+(jl-1)*nrow]= emel[icgo]; cmx[k+jl*nrow] = emel[icgo+4]; } else { cmx[(jl-1)+k*nrow]= emel[icgo]; cmx[jl+k*nrow] = emel[icgo+4]; } icgo++; if( icgo == 4) icgo=0; continue; } /* if( ((ipch == (j+1)) || (icgo != 0)) && (ip != 2) ) */ unere( xi, yi, zi); /* normal fill */ if( itrp == 0) { cmx[k+(jl-1)*nrow] += dataj.exk* cabi+ dataj.eyk* sabi+ dataj.ezk* salpi; cmx[k+jl*nrow] += dataj.exs* cabi+ dataj.eys* sabi+ dataj.ezs* salpi; continue; } /* transposed fill */ cmx[(jl-1)+k*nrow] += dataj.exk* cabi+ dataj.eyk* sabi+ dataj.ezk* salpi; cmx[jl+k*nrow] += dataj.exs* cabi+ dataj.eys* sabi+ dataj.ezs* salpi; } /* for( ip = 1; ip <= gnd.ksymp; ip++ ) */ } /* for( j = j1; j <= j2; j++ ) */ } /* for( i = i1-1; i < i2; i++ ) */ } /* if( itrp >= 0) */ return; } /*-----------------------------------------------------------------------*/ /* cmws computes matrix elements for wire-surface interactions */ void cmws( int j, int i1, int i2, complex double *cmx, int nr, complex double *cw, int itrp ) { int ipr, i, ipatch, ik, js=0, ij, jx; double xi, yi, zi, tx, ty, tz; complex double etk, ets, etc; j--; dataj.s= data.si[j]; dataj.b= data.bi[j]; dataj.xj= data.x[j]; dataj.yj= data.y[j]; dataj.zj= data.z[j]; dataj.cabj= data.cab[j]; dataj.sabj= data.sab[j]; dataj.salpj= data.salp[j]; /* observation loop */ ipr= -1; for( i = i1; i <= i2; i++ ) { ipr++; ipatch=(i+1)/2; ik= i-( i/2)*2; if( (ik != 0) || (ipr == 0) ) { js= ipatch-1; xi= data.px[js]; yi= data.py[js]; zi= data.pz[js]; hsfld( xi, yi, zi, 0.0); if( ik != 0 ) { tx= data.t2x[js]; ty= data.t2y[js]; tz= data.t2z[js]; } else { tx= data.t1x[js]; ty= data.t1y[js]; tz= data.t1z[js]; } } /* if( (ik != 0) || (ipr == 0) ) */ else { tx= data.t1x[js]; ty= data.t1y[js]; tz= data.t1z[js]; } /* if( (ik != 0) || (ipr == 0) ) */ etk=-( dataj.exk* tx+ dataj.eyk* ty + dataj.ezk* tz)* data.psalp[js]; ets=-( dataj.exs* tx+ dataj.eys* ty + dataj.ezs* tz)* data.psalp[js]; etc=-( dataj.exc* tx+ dataj.eyc* ty + dataj.ezc* tz)* data.psalp[js]; /* fill matrix elements. element locations */ /* determined by connection data. */ /* normal fill */ if( itrp == 0) { for( ij = 0; ij < segj.jsno; ij++ ) { jx= segj.jco[ij]-1; cmx[ipr+jx*nr] += etk* segj.ax[ij] + ets* segj.bx[ij]+ etc* segj.cx[ij]; } continue; } /* if( itrp == 0) */ /* transposed fill */ if( itrp != 2) { for( ij = 0; ij < segj.jsno; ij++ ) { jx= segj.jco[ij]-1; cmx[jx+ipr*nr] += etk* segj.ax[ij] + ets* segj.bx[ij]+ etc* segj.cx[ij]; } continue; } /* if( itrp != 2) */ /* transposed fill - c(ws) and d(ws)prime (=cw) */ for( ij = 0; ij < segj.jsno; ij++ ) { jx= segj.jco[ij]-1; if( jx < nr) cmx[jx+ipr*nr] += etk* segj.ax[ij] + ets* segj.bx[ij]+ etc* segj.cx[ij]; else { jx -= nr; cw[jx+ipr*nr] += etk* segj.ax[ij] + ets* segj.bx[ij]+ etc* segj.cx[ij]; } } /* for( ij = 0; ij < segj.jsno; ij++ ) */ } /* for( i = i1; i <= i2; i++ ) */ return; } /*-----------------------------------------------------------------------*/ /* cmww computes matrix elements for wire-wire interactions */ void cmww( int j, int i1, int i2, complex double *cmx, int nr, complex double *cw, int nw, int itrp) { int ipr, iprx, i, ij, jx; double xi, yi, zi, ai, cabi, sabi, salpi; complex double etk, ets, etc; /* set source segment parameters */ jx = j; j--; dataj.s= data.si[j]; dataj.b= data.bi[j]; dataj.xj= data.x[j]; dataj.yj= data.y[j]; dataj.zj= data.z[j]; dataj.cabj= data.cab[j]; dataj.sabj= data.sab[j]; dataj.salpj= data.salp[j]; /* decide whether ext. t.w. approx. can be used */ if( dataj.iexk != 0) { ipr = data.icon1[j]; if (ipr > PCHCON) dataj.ind1 = 0; else if( ipr < 0 ) { ipr= -ipr; iprx= ipr-1; if( -data.icon1[iprx] != jx ) dataj.ind1=2; else { xi= fabs( dataj.cabj* data.cab[iprx]+ dataj.sabj* data.sab[iprx]+ dataj.salpj* data.salp[iprx]); if( (xi < 0.999999) || (fabs(data.bi[iprx]/dataj.b-1.0) > 1.0e-6) ) dataj.ind1=2; else dataj.ind1=0; } /* if( -data.icon1[iprx] != jx ) */ } /* if( ipr < 0 ) */ else { iprx = ipr-1; if( ipr == 0 ) dataj.ind1=1; else { if( ipr != jx ) { if( data.icon2[iprx] != jx ) dataj.ind1=2; else { xi= fabs( dataj.cabj* data.cab[iprx]+ dataj.sabj* data.sab[iprx]+ dataj.salpj* data.salp[iprx]); if( (xi < 0.999999) || (fabs(data.bi[iprx]/dataj.b-1.0) > 1.0e-6) ) dataj.ind1=2; else dataj.ind1=0; } /* if( data.icon2[iprx] != jx ) */ } /* if( ipr != jx ) */ else if( (dataj.cabj* dataj.cabj + dataj.sabj* dataj.sabj) > 1.0e-8) dataj.ind1=2; else dataj.ind1=0; } /* if( ipr == 0 ) */ } /* if( ipr < 0 ) */ ipr = data.icon2[j]; if (ipr > PCHCON) dataj.ind2 = 2; else if( ipr < 0 ) { ipr= -ipr; iprx = ipr-1; if( -data.icon2[iprx] != jx ) dataj.ind2=2; else { xi= fabs( dataj.cabj* data.cab[iprx]+ dataj.sabj* data.sab[iprx]+ dataj.salpj* data.salp[iprx]); if( (xi < 0.99999) || (fabs(data.bi[iprx]/dataj.b-1.0) > 1.0e-6) ) dataj.ind2=2; else dataj.ind2=0; } /* if( -data.icon1[iprx] != jx ) */ } /* if( ipr < 0 ) */ else { iprx = ipr-1; if( ipr == 0 ) dataj.ind2=1; else { if( ipr != jx ) { if( data.icon1[iprx] != jx ) dataj.ind2=2; else { xi= fabs( dataj.cabj* data.cab[iprx]+ dataj.sabj* data.sab[iprx]+ dataj.salpj* data.salp[iprx]); if( (xi < 0.999999) || (fabs(data.bi[iprx]/dataj.b-1.0) > 1.0e-6) ) dataj.ind2=2; else dataj.ind2=0; } /* if( data.icon2[iprx] != jx ) */ } /* if( ipr != jx ) */ else if( (dataj.cabj* dataj.cabj + dataj.sabj* dataj.sabj) > 1.0e-8) dataj.ind2=2; else dataj.ind2=0; } /* if( ipr == 0 ) */ } /* if( ipr < 0 ) */ } /* if( dataj.iexk != 0) */ /* observation loop */ ipr=-1; for( i = i1-1; i < i2; i++ ) { ipr++; ij= i-j; xi= data.x[i]; yi= data.y[i]; zi= data.z[i]; ai= data.bi[i]; cabi= data.cab[i]; sabi= data.sab[i]; salpi= data.salp[i]; efld( xi, yi, zi, ai, ij); etk= dataj.exk* cabi+ dataj.eyk * sabi+ dataj.ezk* salpi; ets= dataj.exs* cabi+ dataj.eys * sabi+ dataj.ezs* salpi; etc= dataj.exc* cabi+ dataj.eyc * sabi+ dataj.ezc* salpi; /* fill matrix elements. element locations */ /* determined by connection data. */ /* normal fill */ if( itrp == 0) { for( ij = 0; ij < segj.jsno; ij++ ) { jx = segj.jco[ij]-1; cmx[ipr+jx*nr] += etk* segj.ax[ij] + ets* segj.bx[ij]+ etc* segj.cx[ij]; } continue; } /* transposed fill */ if( itrp != 2) { for( ij = 0; ij < segj.jsno; ij++ ) { jx= segj.jco[ij]-1; cmx[jx+ipr*nr] += etk* segj.ax[ij] + ets* segj.bx[ij]+ etc* segj.cx[ij]; } continue; } /* trans. fill for c(ww) - test for elements for d(ww)prime */ for( ij = 0; ij < segj.jsno; ij++ ) { jx= segj.jco[ij]-1; if( jx < nr) cmx[jx+ipr*nr] += etk* segj.ax[ij] + ets* segj.bx[ij]+ etc* segj.cx[ij]; else { jx -= nr; cw[jx*ipr*nw] += etk* segj.ax[ij] + ets* segj.bx[ij]+ etc* segj.cx[ij]; } } /* for( ij = 0; ij < segj.jsno; ij++ ) */ } /* for( i = i1-1; i < i2; i++ ) */ return; } /*-----------------------------------------------------------------------*/ /* etmns fills the array e with the negative of the */ /* electric field incident on the structure. e is the */ /* right hand side of the matrix equation. */ void etmns( double p1, double p2, double p3, double p4, double p5, double p6, int ipr, complex double *e ) { int i, is, i1, i2=0, neq; double cth, sth, cph, sph, cet, set, pxl, pyl, pzl, wx; double wy, wz, qx, qy, qz, arg, ds, dsh, rs, r; complex double cx, cy, cz, er, et, ezh; complex double erh, rrv=CPLX_00, rrh=CPLX_00, tt1, tt2; neq= data.n+2*data.m; vsorc.nqds=0; /* applied field of voltage sources for transmitting case */ if( (ipr == 0) || (ipr == 5) ) { for( i = 0; i < neq; i++ ) e[i]=CPLX_00; if( vsorc.nsant != 0) { for( i = 0; i < vsorc.nsant; i++ ) { is= vsorc.isant[i]-1; e[is]= -vsorc.vsant[i]/( data.si[is]* data.wlam); } } if( vsorc.nvqd == 0) return; for( i = 0; i < vsorc.nvqd; i++ ) { is= vsorc.ivqd[i]; qdsrc( is, vsorc.vqd[i], e); } return; } /* if( (ipr <= 0) || (ipr == 5) ) */ /* incident plane wave, linearly polarized. */ if( ipr <= 3) { cth= cos( p1); sth= sin( p1); cph= cos( p2); sph= sin( p2); cet= cos( p3); set= sin( p3); pxl= cth* cph* cet- sph* set; pyl= cth* sph* cet+ cph* set; pzl= -sth* cet; wx= -sth* cph; wy= -sth* sph; wz= -cth; qx= wy* pzl- wz* pyl; qy= wz* pxl- wx* pzl; qz= wx* pyl- wy* pxl; if( gnd.ksymp != 1) { if( gnd.iperf != 1) { rrv= csqrt(1.0- gnd.zrati* gnd.zrati* sth* sth); rrh= gnd.zrati* cth; rrh=( rrh- rrv)/( rrh+ rrv); rrv= gnd.zrati* rrv; rrv=-( cth- rrv)/( cth+ rrv); } else { rrv=-CPLX_10; rrh=-CPLX_10; } /* if( gnd.iperf != 1) */ } /* if( gnd.ksymp != 1) */ if( ipr <= 1) { if( data.n != 0) { for( i = 0; i < data.n; i++ ) { arg= -TP*( wx* data.x[i]+ wy* data.y[i]+ wz* data.z[i]); e[i]=-( pxl* data.cab[i]+ pyl* data.sab[i]+ pzl* data.salp[i])* cmplx( cos( arg), sin( arg)); } if( gnd.ksymp != 1) { tt1=( pyl* cph- pxl* sph)*( rrh- rrv); cx= rrv* pxl- tt1* sph; cy= rrv* pyl+ tt1* cph; cz= -rrv* pzl; for( i = 0; i < data.n; i++ ) { arg= -TP*( wx* data.x[i]+ wy* data.y[i]- wz* data.z[i]); e[i]= e[i]-( cx* data.cab[i]+ cy* data.sab[i]+ cz* data.salp[i])* cmplx(cos( arg), sin( arg)); } } /* if( gnd.ksymp != 1) */ } /* if( data.n != 0) */ if( data.m == 0) return; i= -1; i1= data.n-2; for( is = 0; is < data.m; is++ ) { i++; i1 += 2; i2 = i1+1; arg= -TP*( wx* data.px[i] + wy* data.py[i]+ wz* data.pz[i]); tt1= cmplx( cos( arg), sin( arg)) * data.psalp[i]* RETA; e[i2]=( qx* data.t1x[i]+ qy* data.t1y[i] + qz* data.t1z[i])* tt1; e[i1]=( qx* data.t2x[i]+ qy* data.t2y[i] + qz* data.t2z[i])* tt1; } if( gnd.ksymp == 1) return; tt1=( qy* cph- qx* sph)*( rrv- rrh); cx=-( rrh* qx- tt1* sph); cy=-( rrh* qy+ tt1* cph); cz= rrh* qz; i= -1; i1= data.n-2; for( is = 0; is < data.m; is++ ) { i++; i1 += 2; i2 = i1+1; arg= -TP*( wx* data.px[i] + wy* data.py[i]- wz* data.pz[i]); tt1= cmplx( cos( arg), sin( arg)) * data.psalp[i]* RETA; e[i2]= e[i2]+( cx* data.t1x[i]+ cy * data.t1y[i]+ cz* data.t1z[i])* tt1; e[i1]= e[i1]+( cx* data.t2x[i]+ cy * data.t2y[i]+ cz* data.t2z[i])* tt1; } return; } /* if( ipr <= 1) */ /* incident plane wave, elliptic polarization. */ tt1=-(CPLX_01)* p6; if( ipr == 3) tt1= -tt1; if( data.n != 0) { cx= pxl+ tt1* qx; cy= pyl+ tt1* qy; cz= pzl+ tt1* qz; for( i = 0; i < data.n; i++ ) { arg= -TP*( wx* data.x[i]+ wy* data.y[i] + wz* data.z[i]); e[i]=-( cx* data.cab[i]+ cy* data.sab[i] + cz * data.salp[i])* cmplx( cos( arg), sin( arg)); } if( gnd.ksymp != 1) { tt2=( cy* cph- cx* sph)*( rrh- rrv); cx= rrv* cx- tt2* sph; cy= rrv* cy+ tt2* cph; cz= -rrv* cz; for( i = 0; i < data.n; i++ ) { arg= -TP*( wx* data.x[i]+ wy* data.y[i]- wz* data.z[i]); e[i]= e[i]-( cx* data.cab[i]+ cy* data.sab[i]+ cz* data.salp[i])* cmplx(cos( arg), sin( arg)); } } /* if( gnd.ksymp != 1) */ } /* if( n != 0) */ if( data.m == 0) return; cx= qx- tt1* pxl; cy= qy- tt1* pyl; cz= qz- tt1* pzl; i= -1; i1= data.n-2; for( is = 0; is < data.m; is++ ) { i++; i1 += 2; i2 = i1+1; arg= -TP*( wx* data.px[i] + wy* data.py[i]+ wz* data.pz[i]); tt2= cmplx( cos( arg), sin( arg)) * data.psalp[i] * RETA; e[i2]=( cx* data.t1x[i] + cy* data.t1y[i]+ cz* data.t1z[i])* tt2; e[i1]=( cx* data.t2x[i] + cy* data.t2y[i]+ cz* data.t2z[i])* tt2; } if( gnd.ksymp == 1) return; tt1=( cy* cph- cx* sph)*( rrv- rrh); cx=-( rrh* cx- tt1* sph); cy=-( rrh* cy+ tt1* cph); cz= rrh* cz; i= -1; i1= data.n-2; for( is=0; is < data.m; is++ ) { i++; i1 += 2; i2 = i1+1; arg= -TP*( wx* data.px[i] + wy* data.py[i]- wz* data.pz[i]); tt1= cmplx( cos( arg), sin( arg)) * data.psalp[i]* RETA; e[i2]= e[i2]+( cx* data.t1x[i]+ cy * data.t1y[i]+ cz* data.t1z[i])* tt1; e[i1]= e[i1]+( cx* data.t2x[i]+ cy * data.t2y[i]+ cz* data.t2z[i])* tt1; } return; } /* if( ipr <= 3) */ /* incident field of an elementary current source. */ wz= cos( p4); wx= wz* cos( p5); wy= wz* sin( p5); wz= sin( p4); ds= p6*59.9580; dsh= p6/(2.0* TP); is= 0; i1= data.n-2; for( i = 0; i < data.npm; i++ ) { if( i >= data.n ) { i1 += 2; i2 = i1+1; pxl= data.px[is]- p1; pyl= data.py[is]- p2; pzl= data.pz[is]- p3; } else { pxl= data.x[i]- p1; pyl= data.y[i]- p2; pzl= data.z[i]- p3; } rs= pxl* pxl+ pyl* pyl+ pzl* pzl; if( rs < 1.0e-30) continue; r= sqrt( rs); pxl= pxl/ r; pyl= pyl/ r; pzl= pzl/ r; cth= pxl* wx+ pyl* wy+ pzl* wz; sth= sqrt(1.0- cth* cth); qx= pxl- wx* cth; qy= pyl- wy* cth; qz= pzl- wz* cth; arg= sqrt( qx* qx+ qy* qy+ qz* qz); if( arg >= 1.0e-30) { qx= qx/ arg; qy= qy/ arg; qz= qz/ arg; } else { qx=1.0; qy=0.0; qz=0.0; } /* if( arg >= 1.0e-30) */ arg= -TP* r; tt1= cmplx( cos( arg), sin( arg)); if( i < data.n ) { tt2= cmplx(1.0,-1.0/( r* TP))/ rs; er= ds* tt1* tt2* cth; et=.5* ds* tt1*((CPLX_01)* TP/ r+ tt2)* sth; ezh= er* cth- et* sth; erh= er* sth+ et* cth; cx= ezh* wx+ erh* qx; cy= ezh* wy+ erh* qy; cz= ezh* wz+ erh* qz; e[i]=-( cx* data.cab[i] + cy* data.sab[i]+ cz* data.salp[i]); } else { pxl= wy* qz- wz* qy; pyl= wz* qx- wx* qz; pzl= wx* qy- wy* qx; tt2= dsh* tt1* cmplx(1.0/ r, TP) / r* sth* data.psalp[is]; cx= tt2* pxl; cy= tt2* pyl; cz= tt2* pzl; e[i2]= cx* data.t1x[is] + cy* data.t1y[is]+ cz* data.t1z[is]; e[i1]= cx* data.t2x[is] + cy* data.t2y[is]+ cz* data.t2z[is]; is++; } /* if( i < data.n) */ } /* for( i = 0; i < npm; i++ ) */ return; } /*-----------------------------------------------------------------------*/ /* subroutine to factor a matrix into a unit lower triangular matrix */ /* and an upper triangular matrix using the gauss-doolittle algorithm */ /* presented on pages 411-416 of a. ralston--a first course in */ /* numerical analysis. comments below refer to comments in ralstons */ /* text. (matrix transposed.) */ void factr( int n, complex double *a, int *ip, int ndim) { int r, rm1, rp1, pj, pr, iflg, k, j, jp1, i; double dmax, elmag; complex double arj, *scm = NULL; /* Allocate to scratch memory */ size_t mreq = (size_t)data.np2m * sizeof(complex double); mem_alloc( (void **)&scm, mreq, "in matrix.c"); /* Un-transpose the matrix for Gauss elimination */ for( i = 1; i < n; i++ ) for( j = 0; j < i; j++ ) { arj = a[i+j*ndim]; a[i+j*ndim] = a[j+i*ndim]; a[j+i*ndim] = arj; } iflg=FALSE; /* step 1 */ for( r = 0; r < n; r++ ) { for( k = 0; k < n; k++ ) scm[k]= a[k+r*ndim]; /* steps 2 and 3 */ rm1= r; if( rm1 > 0) { for( j = 0; j < rm1; j++ ) { pj= ip[j]-1; arj= scm[pj]; a[j+r*ndim]= arj; scm[pj]= scm[j]; jp1= j+1; for( i = jp1; i < n; i++ ) scm[i] -= a[i+j*ndim]* arj; } /* for( j = 0; j < rm1; j++ ) */ } /* if( rm1 >= 0.0) */ /* step 4 */ dmax= creal( scm[r]*conj(scm[r]) ); rp1= r+1; ip[r]= rp1; if( rp1 < n) { for( i = rp1; i < n; i++ ) { elmag= creal( scm[i]* conj(scm[i]) ); if( elmag >= dmax) { dmax= elmag; ip[r]= i+1; } } } /* if( rp1 < n) */ if( dmax < 1.0e-10) iflg=TRUE; pr= ip[r]-1; a[r+r*ndim]= scm[pr]; scm[pr]= scm[r]; /* step 5 */ if( rp1 < n) { arj=1.0/ a[r+r*ndim]; for( i = rp1; i < n; i++ ) a[i+r*ndim]= scm[i]* arj; } if( iflg == TRUE ) { fprintf( stderr, "xnec2c: pivot(%d)= %16.8E\n", r, dmax ); iflg=FALSE; } } /* for( r=0; r < n; r++ ) */ free_ptr( (void **)&scm ); return; } /*-----------------------------------------------------------------------*/ /* factrs, for symmetric structure, transforms submatricies to form */ /* matricies of the symmetric modes and calls routine to factor */ /* matricies. if no symmetry, the routine is called to factor the */ /* complete matrix. */ void factrs( int np, int nrow, complex double *a, int *ip ) { int kk, ka; smat.nop = nrow/np; for( kk = 0; kk < smat.nop; kk++ ) { ka= kk* np; factr( np, &a[ka], &ip[ka], nrow ); } return; } /*-----------------------------------------------------------------------*/ /* fblock sets parameters for out-of-core */ /* solution for the primary matrix (a) */ void fblock( int nrow, int ncol, int imax, int ipsym ) { int i, j, k, ka, kk; double phaz, arg; complex double deter; if( nrow*ncol <= imax) { matpar.npblk= nrow; matpar.nlast= nrow; matpar.imat= nrow* ncol; if( nrow == ncol) { matpar.icase=1; return; } else matpar.icase=2; } /* if( nrow*ncol <= imax) */ smat.nop = ncol/nrow; if( smat.nop*nrow != ncol) { fprintf( stderr, "xnec2c: fblock(): symmetry error - nrow:%d ncol:%d\n",nrow, ncol ); stop( _("fblock(): Symmetry error"), ERR_STOP ); } /* set up smat.ssx matrix for rotational symmetry. */ if( ipsym <= 0) { phaz = TP/smat.nop; for( i = 1; i < smat.nop; i++ ) { for( j= i; j < smat.nop; j++ ) { arg= phaz* (double)i * (double)j; smat.ssx[i+j*smat.nop]= cmplx( cos( arg), sin( arg)); smat.ssx[j+i*smat.nop]= smat.ssx[i+j*smat.nop]; } } return; } /* if( ipsym <= 0) */ /* set up smat.ssx matrix for plane symmetry */ kk=1; smat.ssx[0]=CPLX_10; k = 2; for( ka = 1; k != smat.nop; ka++ ) k *= 2; for( k = 0; k < ka; k++ ) { for( i = 0; i < kk; i++ ) { for( j = 0; j < kk; j++ ) { deter= smat.ssx[i+j*smat.nop]; smat.ssx[i+(j+kk)*smat.nop]= deter; smat.ssx[i+kk+(j+kk)*smat.nop]= -deter; smat.ssx[i+kk+j*smat.nop]= deter; } } kk *= 2; } /* for( k = 0; k < ka; k++ ) */ return; } /*-----------------------------------------------------------------------*/ /* subroutine to solve the matrix equation lu*x=b where l is a unit */ /* lower triangular matrix and u is an upper triangular matrix both */ /* of which are stored in a. the rhs vector b is input and the */ /* solution is returned through vector b. (matrix transposed) */ void solve( int n, complex double *a, int *ip, complex double *b, int ndim ) { int i, ip1, j, k, pia; complex double sum, *scm = NULL; /* Allocate to scratch memory */ size_t mreq = (size_t)data.np2m * sizeof(complex double); mem_alloc( (void **)&scm, mreq, "in matrix.c"); /* forward substitution */ for( i = 0; i < n; i++ ) { pia= ip[i]-1; scm[i]= b[pia]; b[pia]= b[i]; ip1= i+1; if( ip1 < n) for( j = ip1; j < n; j++ ) b[j] -= a[j+i*ndim]* scm[i]; } /* backward substitution */ for( k = 0; k < n; k++ ) { i= n-k-1; sum=CPLX_00; ip1= i+1; if( ip1 < n) for( j = ip1; j < n; j++ ) sum += a[i+j*ndim]* b[j]; b[i]=( scm[i]- sum)/ a[i+i*ndim]; } free_ptr( (void **)&scm ); return; } /*-----------------------------------------------------------------------*/ /* subroutine solves, for symmetric structures, handles the */ /* transformation of the right hand side vector and solution */ /* of the matrix eq. */ void solves( complex double *a, int *ip, complex double *b, int neq, int nrh, int np, int n, int mp, int m) { int npeq, nrow, ic, i, kk, ia, ib, j, k; double fnop, fnorm; complex double sum, *scm = NULL; npeq= np+ 2*mp; smat.nop = neq/npeq; fnop= smat.nop; fnorm=1.0/ fnop; nrow= neq; /* Allocate to scratch memory */ size_t mreq = (size_t)data.np2m * sizeof(complex double); mem_alloc( (void **)&scm, mreq, "in matrix.c"); if( smat.nop != 1) { for( ic = 0; ic < nrh; ic++ ) { if( (n != 0) && (m != 0) ) { for( i = 0; i < neq; i++ ) scm[i]= b[i+ic*neq]; kk=2* mp; ia= np-1; ib= n-1; j= np-1; for( k = 0; k < smat.nop; k++ ) { if( k != 0 ) { for( i = 0; i < np; i++ ) { ia++; j++; b[j+ic*neq]= scm[ia]; } if( k == (smat.nop-1) ) continue; } /* if( k != 0 ) */ for( i = 0; i < kk; i++ ) { ib++; j++; b[j+ic*neq]= scm[ib]; } } /* for( k = 0; k < smat.nop; k++ ) */ } /* if( (n != 0) && (m != 0) ) */ /* transform matrix eq. rhs vector according to symmetry modes */ for( i = 0; i < npeq; i++ ) { for( k = 0; k < smat.nop; k++ ) { ia= i+ k* npeq; scm[k]= b[ia+ic*neq]; } sum= scm[0]; for( k = 1; k < smat.nop; k++ ) sum += scm[k]; b[i+ic*neq]= sum* fnorm; for( k = 1; k < smat.nop; k++ ) { ia= i+ k* npeq; sum= scm[0]; for( j = 1; j < smat.nop; j++ ) sum += scm[j]* conj( smat.ssx[k+j*smat.nop]); b[ia+ic*neq]= sum* fnorm; } } /* for( i = 0; i < npeq; i++ ) */ } /* for( ic = 0; ic < nrh; ic++ ) */ } /* if( smat.nop != 1) */ /* solve each mode equation */ for( kk = 0; kk < smat.nop; kk++ ) { ia= kk* npeq; ib= ia; for( ic = 0; ic < nrh; ic++ ) solve( npeq, &a[ib], &ip[ia], &b[ia+ic*neq], nrow ); } /* for( kk = 0; kk < smat.nop; kk++ ) */ if( smat.nop == 1) { free_ptr( (void **)&scm ); return; } /* inverse transform the mode solutions */ for( ic = 0; ic < nrh; ic++ ) { for( i = 0; i < npeq; i++ ) { for( k = 0; k < smat.nop; k++ ) { ia= i+ k* npeq; scm[k]= b[ia+ic*neq]; } sum= scm[0]; for( k = 1; k < smat.nop; k++ ) sum += scm[k]; b[i+ic*neq]= sum; for( k = 1; k < smat.nop; k++ ) { ia= i+ k* npeq; sum= scm[0]; for( j = 1; j < smat.nop; j++ ) sum += scm[j]* smat.ssx[k+j*smat.nop]; b[ia+ic*neq]= sum; } } /* for( i = 0; i < npeq; i++ ) */ if( (n == 0) || (m == 0) ) continue; for( i = 0; i < neq; i++ ) scm[i]= b[i+ic*neq]; kk=2* mp; ia= np-1; ib= n-1; j= np-1; for( k = 0; k < smat.nop; k++ ) { if( k != 0 ) { for( i = 0; i < np; i++ ) { ia++; j++; b[ia+ic*neq]= scm[j]; } if( k == smat.nop) continue; } /* if( k != 0 ) */ for( i = 0; i < kk; i++ ) { ib++; j++; b[ib+ic*neq]= scm[j]; } } /* for( k = 0; k < smat.nop; k++ ) */ } /* for( ic = 0; ic < nrh; ic++ ) */ free_ptr( (void **)&scm ); return; } /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/matrix.h000066400000000000000000000016401257141547200150170ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef MATRIX_H #define MATRIX_H 1 #include "common.h" #include "support.h" #define RETA 2.654420938E-3 #endif xnec2c-3.4/src/nec2_model.c000066400000000000000000000433661257141547200155300ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* nec2_model.c * * Structure modelling functions for xnec2c */ #include "nec2_model.h" #include "shared.h" /*------------------------------------------------------------------------*/ /* Nec2_Input_File_Treeview() * * Reads a NEC2 input file and renders it in a tree view */ void Nec2_Input_File_Treeview( int action ) { /* Abort if editor window is not opened */ if( nec2_edit_window == NULL ) return; /* Signal save of edited file */ SetFlag( NEC2_EDIT_SAVE ); /* Implement user action */ switch( action ) { case NEC2_EDITOR_REVERT: /* Revert editor to file contents */ /* Clear all tree view list stores */ gtk_list_store_clear( cmnt_store ); gtk_list_store_clear( geom_store ); gtk_list_store_clear( cmnd_store ); break; case NEC2_EDITOR_NEW: /* Create new default input file */ /* If tree view stores are already * created, just make the new file */ Create_List_Stores(); /* Only done if needed */ Create_Default_File(); return; case NEC2_EDITOR_RELOAD: /* Just reload input file */ Create_List_Stores(); /* Only done if needed */ break; } /* switch( action ) */ /* Rewind NEC2 input file */ rewind( input_fp ); /*** List Comment cards ***/ List_Comments(); /*** List Geometry cards ***/ List_Geometry(); /*** Read Command cards ***/ List_Commands(); return; } /* Nec2_Input_File_Treeview() */ /*------------------------------------------------------------------------*/ /* Create_List_Stores() * * Create stores needed for the treeview */ void Create_List_Stores( void ) { /* Comments column names */ char *cmnt_col_name[CMNT_NUM_COLS] = { _("Card"), _("Comments") }; /* Geometry column names */ char *geom_col_name[GEOM_NUM_COLS] = { _("Card"), "I1", "I2", "F1", "F2", "F3", "F4", "F5", "F6", "F7" }; /* Command column names */ char *cmnd_col_name[CMND_NUM_COLS] = { _("Card"), "I1", "I2", "I3", "I4", "F1", "F2", "F3", "F4", "F5", "F6" }; /* Create list stores only if needed */ if( cmnt_store != NULL ) return; /* Create comments list store */ cmnt_store = gtk_list_store_new( CMNT_NUM_COLS, G_TYPE_STRING, G_TYPE_STRING ); /* Create geometry data list store */ geom_store = gtk_list_store_new( GEOM_NUM_COLS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING ); /* Create control commands data list store */ cmnd_store = gtk_list_store_new( CMND_NUM_COLS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING ); /* Insert comment columns */ Insert_Columns( nec2_edit_window, "nec2_cmnt_treeview", cmnt_store, CMNT_NUM_COLS, cmnt_col_name ); /* Insert geometry columns */ Insert_Columns( nec2_edit_window, "nec2_geom_treeview", geom_store, GEOM_NUM_COLS, geom_col_name ); /* Insert command columns */ Insert_Columns( nec2_edit_window, "nec2_cmnd_treeview", cmnd_store, CMND_NUM_COLS, cmnd_col_name ); /* Set models to treviews */ gtk_tree_view_set_model( GTK_TREE_VIEW(lookup_widget( nec2_edit_window, "nec2_cmnt_treeview")), GTK_TREE_MODEL(cmnt_store) ); gtk_tree_view_set_model( GTK_TREE_VIEW(lookup_widget( nec2_edit_window, "nec2_geom_treeview")), GTK_TREE_MODEL(geom_store) ); gtk_tree_view_set_model( GTK_TREE_VIEW(lookup_widget( nec2_edit_window, "nec2_cmnd_treeview")), GTK_TREE_MODEL(cmnd_store) ); } /* Create_List_Stores() */ /*------------------------------------------------------------------------*/ /* Create_Default_File() * * Creates a default NEC2 file if needed */ void Create_Default_File( void ) { GtkTreeIter iter; int idx, idi; char str[64]; size_t s = sizeof( str ); /* Clear all tree views */ gtk_list_store_clear( cmnt_store ); gtk_list_store_clear( geom_store ); gtk_list_store_clear( cmnd_store ); /* Append a default comment row */ Strlcpy( str, _("--- NEC2 Input File created or edited by "), s ); Strlcat( str, PACKAGE_STRING, s ); Strlcat( str, " ---", s ); gtk_list_store_append( cmnt_store, &iter ); gtk_list_store_set( cmnt_store, &iter, CMNT_COL_NAME, "CM", CMNT_COL_COMMENT, str, -1 ); /* Append a default CE card */ gtk_list_store_append( cmnt_store, &iter ); gtk_list_store_set( cmnt_store, &iter, CMNT_COL_NAME, "CE", CMNT_COL_COMMENT, _("--- End Comments ---"), -1 ); /* Append a dipole wire (GW) card */ gtk_list_store_append( geom_store, &iter ); gtk_list_store_set( geom_store, &iter, GEOM_COL_NAME, "GW", GEOM_COL_I1, "1", GEOM_COL_I2, "15", GEOM_COL_F1, "0.0", GEOM_COL_F2, "0.0", GEOM_COL_F3, "-1.0", GEOM_COL_F4, "0.0", GEOM_COL_F5, "0.0", GEOM_COL_F6, "1.0", GEOM_COL_F7, "0.015", -1 ); /* Append a geometry end (GE) card */ gtk_list_store_append( geom_store, &iter ); gtk_list_store_set( geom_store, &iter, GEOM_COL_NAME, "GE", -1 ); for( idx = GEOM_COL_I1; idx < GEOM_NUM_COLS; idx++ ) gtk_list_store_set( geom_store, &iter, idx, "0", -1 ); /* Append an excitation (EX) card */ gtk_list_store_append( cmnd_store, &iter ); gtk_list_store_set( cmnd_store, &iter, CMND_COL_NAME, "EX", CMND_COL_I1, "0", CMND_COL_I2, "1", CMND_COL_I3, "8", CMND_COL_I4, "0", CMND_COL_F1, "1.0", CMND_COL_F2, "0.0", CMND_COL_F3, "0.0", CMND_COL_F4, "0.0", CMND_COL_F5, "0.0", CMND_COL_F6, "0.0", -1 ); /* Append a frequency (FR) card */ gtk_list_store_append( cmnd_store, &iter ); gtk_list_store_set( cmnd_store, &iter, CMND_COL_NAME, "FR", CMND_COL_I1, "0", CMND_COL_I2, "11", CMND_COL_I3, "0", CMND_COL_I4, "0", CMND_COL_F1, "50.0", CMND_COL_F2, "5.0", CMND_COL_F3, "0.0", CMND_COL_F4, "0.0", CMND_COL_F5, "0.0", CMND_COL_F6, "0.0", -1 ); /* Append a near H field (NH) card */ gtk_list_store_append( cmnd_store, &iter ); gtk_list_store_set( cmnd_store, &iter, CMND_COL_NAME, "NH", CMND_COL_I1, "0", CMND_COL_I2, "0", CMND_COL_I3, "0", CMND_COL_I4, "0", CMND_COL_F1, "0.0", CMND_COL_F2, "0.0", CMND_COL_F3, "0.0", CMND_COL_F4, "0.0", CMND_COL_F5, "0.0", CMND_COL_F6, "0.0", -1 ); /* Append a near E field (NE) card */ gtk_list_store_append( cmnd_store, &iter ); gtk_list_store_set( cmnd_store, &iter, CMND_COL_NAME, "NE", CMND_COL_I1, "0", CMND_COL_I2, "10", CMND_COL_I3, "1", CMND_COL_I4, "10", CMND_COL_F1, "-1.35", CMND_COL_F2, "0.0", CMND_COL_F3, "-1.35", CMND_COL_F4, "0.3", CMND_COL_F5, "0.0", CMND_COL_F6, "0.3", -1 ); /* Append a radiation pattern (RP) card */ gtk_list_store_append( cmnd_store, &iter ); gtk_list_store_set( cmnd_store, &iter, CMND_COL_NAME, "RP", CMND_COL_I1, "0", CMND_COL_I2, "19", CMND_COL_I3, "37", CMND_COL_I4, "1000", CMND_COL_F1, "0.0", CMND_COL_F2, "0.0", CMND_COL_F3, "10.0", CMND_COL_F4, "10.0", CMND_COL_F5, "0.0", CMND_COL_F6, "0.0", -1 ); /* Append a file end (EN) card */ gtk_list_store_append( cmnd_store, &iter ); gtk_list_store_set( cmnd_store, &iter, CMND_COL_NAME, "EN", -1 ); for( idi = CMND_COL_I1; idi < CMND_NUM_COLS; idi++ ) gtk_list_store_set( cmnd_store, &iter, idi, "0", -1 ); } /* Create_Default_File() */ /*------------------------------------------------------------------------*/ /* List_Comments() * * Reads comments from file and lists in tree view */ void List_Comments( void ) { GtkTreeIter iter; gboolean ret; /* "Card" mnemonic and line buffer */ char ain[3], line_buf[LINE_LEN]; /* Check that store is empty */ ret = gtk_tree_model_get_iter_first( GTK_TREE_MODEL(cmnt_store), &iter ); /* Keep reading till the CE card */ do { /* Read a line from input file */ if( Load_Line(line_buf, input_fp) == EOF ) stop( _("List_Comments():\n"\ "Error reading input file\n"\ "Unexpected EOF (End of File)"), ERR_OK ); /* Check for short or missing CM or CE and fix */ if( strlen(line_buf) < 2 ) { stop( _("List_Comments():\n"\ "Error reading input file\n"\ "Comment mnemonic short or missing"), ERR_OK ); Strlcpy( line_buf, "XX ", sizeof(line_buf) ); } /* If only mnemonic in card, * "cut" the rest of line buffer */ if( strlen(line_buf) == 2 ) line_buf[3] = '\0'; /* Separate card's id mnemonic */ Strlcpy( ain, line_buf, sizeof(ain) ); /* Append a comment row and fill in text if opening call */ if( !ret ) gtk_list_store_append( cmnt_store, &iter ); gtk_list_store_set( cmnt_store, &iter, CMNT_COL_NAME, ain, CMNT_COL_COMMENT, &line_buf[3], -1 ); /* Get new row if available */ ret = gtk_tree_model_iter_next( GTK_TREE_MODEL(cmnt_store), &iter); } /* do */ while( strcmp(ain, "CE") != 0 ); } /* List_Comments() */ /*------------------------------------------------------------------------*/ /* List_Geometry() * * Reads geometry cards from file and lists in tree view */ void List_Geometry( void ) { GtkTreeIter iter; /* "Card" mnemonic */ char ain[3]; /* int data from cards */ int iv[4]; /* float data from cards */ double fv[7]; /* For snprintf */ char si[4][7], sf[7][13]; int idx; gboolean ret; /* Check that store is empty */ ret = gtk_tree_model_get_iter_first( GTK_TREE_MODEL(geom_store), &iter ); do { /* Read a geometry card. Errors are handled in readgm() */ if( !readgm( ain, &iv[0], &iv[1], &fv[0], &fv[1], &fv[2], &fv[3], &fv[4], &fv[5], &fv[6]) ) break; /* Ignore in-data (NEC4 style) comments */ if( strcmp(ain, "CM") == 0 ) continue; /* Format card data and print to string */ snprintf( si[0], 6, "%5d", iv[0] ); snprintf( si[1], 7, "%5d ", iv[1] ); for( idx = GEOM_COL_F1; idx <= GEOM_COL_F7; idx++ ) snprintf( sf[idx-GEOM_COL_F1], 13, "%12.5E", (double)fv[idx-GEOM_COL_F1] ); /* Append a comment row and fill in text if opening call */ if( !ret ) gtk_list_store_append( geom_store, &iter ); /* Set data to list store */ gtk_list_store_set( geom_store, &iter, GEOM_COL_NAME, ain, -1 ); for( idx = GEOM_COL_I1; idx <= GEOM_COL_I2; idx++ ) gtk_list_store_set( geom_store, &iter, idx, si[idx-GEOM_COL_I1], -1 ); for( idx = GEOM_COL_F1; idx <= GEOM_COL_F7; idx++ ) gtk_list_store_set( geom_store, &iter, idx, sf[idx-GEOM_COL_F1], -1 ); /* Get new row if available */ ret = gtk_tree_model_iter_next( GTK_TREE_MODEL(geom_store), &iter); } while( strcmp(ain, "GE") != 0 ); } /* List_Geometry() */ /*------------------------------------------------------------------------*/ /* List_Commands() * * Reads command cards from file and lists in tree view */ void List_Commands( void ) { GtkTreeIter iter; /* "Card" mnemonic and line buffer */ char ain[3]; /* int data from cards */ int iv[4]; /* float data from cards */ double fv[7]; /* For snprintf */ char si[4][7], sf[7][13]; int idx; gboolean ret; /* Check that store is empty */ ret = gtk_tree_model_get_iter_first( GTK_TREE_MODEL(cmnd_store), &iter ); do { /* Read a command card. Errors are handled in readmn() */ readmn( ain, &iv[0], &iv[1], &iv[2], &iv[3], &fv[0], &fv[1], &fv[2], &fv[3], &fv[4], &fv[5] ); /* Ignore in-data (NEC4 style) comments */ if( strcmp(ain, "CM") == 0 ) continue; /* Format card data and print to string */ for( idx = CMND_COL_I1; idx < CMND_COL_I4; idx++ ) snprintf( si[idx-CMND_COL_I1], 6, "%5d", iv[idx-CMND_COL_I1] ); /* For alignment of data printed to NEC2 file */ snprintf( si[idx-CMND_COL_I1], 7, " %5d", iv[idx-CMND_COL_I1] ); for( idx = CMND_COL_F1; idx <= CMND_COL_F6; idx++ ) snprintf( sf[idx-CMND_COL_F1], 13, "%12.5E", (double)fv[idx-CMND_COL_F1] ); /* Append a command row and fill in text if opening call */ if( !ret ) gtk_list_store_append( cmnd_store, &iter ); /* Set data to list store */ gtk_list_store_set( cmnd_store, &iter, CMND_COL_NAME, ain, -1 ); for( idx = CMND_COL_I1; idx <= CMND_COL_I4; idx++ ) gtk_list_store_set( cmnd_store, &iter, idx, si[idx-CMND_COL_I1], -1 ); for( idx = CMND_COL_F1; idx <= CMND_COL_F6; idx++ ) gtk_list_store_set( cmnd_store, &iter, idx, sf[idx-CMND_COL_F1], -1 ); /* Get new row if available */ ret = gtk_tree_model_iter_next( GTK_TREE_MODEL(cmnd_store), &iter); } while( strcmp(ain, "EN") != 0 ); } /* List_Commands() */ /*------------------------------------------------------------------------*/ /* Insert_Columns() * * Inserts columns in a list store */ void Insert_Columns( GtkWidget *window, gchar *treeview, GtkListStore* store, int ncols, char *colname[] ) { int idx; GtkTreeModel *model; GtkCellRenderer *renderer; static GtkWidget *view; view = lookup_widget( window, treeview ); for( idx = 0; idx < ncols; idx++ ) { renderer = gtk_cell_renderer_text_new(); g_object_set(renderer, "editable", TRUE, NULL); g_signal_connect( renderer, "edited", (GCallback)cell_edited_callback, view ); g_object_set_data( G_OBJECT(renderer), "column", GUINT_TO_POINTER(idx) ); gtk_tree_view_insert_column_with_attributes( GTK_TREE_VIEW(view), -1, colname[idx], renderer, "text", idx, NULL ); } model = GTK_TREE_MODEL(store); gtk_tree_view_set_model( GTK_TREE_VIEW (view), model ); /* Destroy model automatically with view */ g_object_unref( model ); } /* Insert_Columns() */ /*------------------------------------------------------------------------*/ /* cell_edited_callback() * * Text cell edited callback */ void cell_edited_callback( GtkCellRendererText *cell, gchar *path, gchar *new_text, gpointer user_data ) { GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; guint column; column = GPOINTER_TO_UINT( g_object_get_data(G_OBJECT(cell), "column") ); selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(user_data) ); gtk_tree_selection_get_selected( selection, &model, &iter ); /* Blank cells cause problems */ if( strcmp(new_text, "") == 0 ) { gchar *name; gtk_tree_model_get( model, &iter, 0, &name, -1 ); if( strcmp(name, "CE") == 0 ) gtk_list_store_set( GTK_LIST_STORE(model), &iter, column, _("End Comments"), -1 ); else gtk_list_store_set( GTK_LIST_STORE(model), &iter, column, "0", -1 ); g_free(name); } else gtk_list_store_set( GTK_LIST_STORE(model), &iter, column, new_text, -1 ); } /* cell_edited_callback() */ /*------------------------------------------------------------------------*/ /* Save_Nec2_Input_File() * * Saves the data in a NEC2 input treeview to a given filename */ void Save_Nec2_Input_File( GtkWidget *treeview_window, char *nec2_file ) { FILE *nec2_fp = NULL; GtkTreeView *tree_view; /* Abort if editor window is not opened */ if( nec2_edit_window == NULL ) return; /* Open NEC2 input file for writing */ if( !Open_File(&nec2_fp, nec2_file, "w") ) return; /* Save comments to file */ tree_view = GTK_TREE_VIEW( lookup_widget( treeview_window, "nec2_cmnt_treeview") ); Save_Treeview_Data( tree_view, CMNT_NUM_COLS, nec2_fp ); /* Save geometry to file */ tree_view = GTK_TREE_VIEW( lookup_widget( treeview_window, "nec2_geom_treeview") ); Save_Treeview_Data( tree_view, GEOM_NUM_COLS, nec2_fp ); /* Save commands to file */ tree_view = GTK_TREE_VIEW( lookup_widget( treeview_window, "nec2_cmnd_treeview") ); Save_Treeview_Data( tree_view, CMND_NUM_COLS, nec2_fp ); /* Re-open file in read mode */ Close_File( &nec2_fp ); } /* Save_Nec2_Input_File() */ /*------------------------------------------------------------------------*/ /* Save_Treeview_Data() * * Saves tree view data to an open NEC2 input file */ void Save_Treeview_Data( GtkTreeView *tree_view, int ncols, FILE *nec2_fp ) { GtkTreeModel *list_store; GtkTreeIter iter; gboolean valid; int idx; /* Abort if no open file to sane to */ if( nec2_fp == NULL ) { stop( _("Cannot save treeview data\n"\ "Please use the Save button\n"\ "to specify a file path"), ERR_STOP ); } /* Get the first iter in the list */ list_store = GTK_TREE_MODEL( gtk_tree_view_get_model(tree_view) ); valid = gtk_tree_model_get_iter_first( list_store, &iter ); /* Walk through all rows and print data to file */ while( valid ) { gchar *str_data; for( idx = 0; idx < ncols; idx++ ) { gtk_tree_model_get( list_store, &iter, idx, &str_data, -1 ); fprintf( nec2_fp, "%s ", str_data ); g_free( str_data ); } /* Overwrite last space with newline */ if( fseek(nec2_fp, -1, SEEK_CUR) == 0 ) fprintf( nec2_fp, "\n" ); valid = gtk_tree_model_iter_next( list_store, &iter ); } /* while( valid ) */ } /* Save_Treeview_Data() */ /*------------------------------------------------------------------------*/ /* Helper function */ gboolean gtk_tree_model_iter_previous(GtkTreeModel *tree_model, GtkTreeIter *iter) { GtkTreePath *path; gboolean ret; path = gtk_tree_model_get_path (tree_model, iter); ret = gtk_tree_path_prev (path); if (ret == TRUE) gtk_tree_model_get_iter (tree_model, iter, path); gtk_tree_path_free (path); return ret; } /*------------------------------------------------------------------------*/ xnec2c-3.4/src/nec2_model.h000066400000000000000000000020661257141547200155250ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef NEC2_MODEL_H #define NEC2_MODEL_H 1 #include "common.h" #include "interface.h" #include "support.h" #include "editors.h" /* Commands for the NEC2 file editor */ enum NEC2_CMND { NEC2_EDITOR_NEW = 0, NEC2_EDITOR_REVERT, NEC2_EDITOR_RELOAD }; #endif xnec2c-3.4/src/network.c000066400000000000000000000374241257141547200152100ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /******* Translated to the C language by N. Kyriazis 20 Aug 2003 ****** Program NEC(input,tape5=input,output,tape11,tape12,tape13,tape14, tape15,tape16,tape20,tape21) Numerical Electromagnetics Code (NEC2) developed at Lawrence Livermore lab., Livermore, CA. (contact G. Burke at 415-422-8414 for problems with the NEC code. For problems with the vax implem- entation, contact J. Breakall at 415-422-8196 or E. Domning at 415 422-5936) file created 4/11/80. ***********Notice********** This computer code material was prepared as an account of work sponsored by the United States government. Neither the United States nor the United States Department Of Energy, nor any of their employees, nor any of their contractors, subcontractors, or their employees, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness or usefulness of any information, apparatus, product or process disclosed, or represents that its use would not infringe privately-owned rights. ***********************************************************************/ #include "network.h" #include "shared.h" /*-------------------------------------------------------------------*/ /* subroutine netwk solves for structure currents for a given */ /* excitation including the effect of non-radiating networks if */ /* present. */ void netwk( complex double *cmx, int *ip, complex double *einc ) { int *ipnt = NULL, *nteqa = NULL, *ntsca = NULL; int nteq=0, ntsc=0, j, ndimn; int neqt, irow1=0, i, isc1=0; double pwr; complex double *vsrc = NULL, *rhs = NULL, *cmn = NULL; complex double *rhnt = NULL, *rhnx = NULL, ymit, vlt, cux; size_t mreq; netcx.pin=0.0; netcx.pnls=0.0; neqt= netcx.neq+ netcx.neq2; ndimn = j = (2*netcx.nonet + vsorc.nsant); /* Allocate network buffers */ if( netcx.nonet > 0 ) { mreq = (size_t)data.np3m * sizeof(complex double); mem_alloc( (void **)&rhs, mreq, "in network.c"); mreq = (size_t)j * sizeof(complex double); mem_alloc( (void **)&rhnt, mreq, "in network.c"); mem_alloc( (void **)&rhnx, mreq, "in network.c"); mem_alloc( (void **)&cmn, mreq * (size_t)j, "in network.c"); mreq = (size_t)j * sizeof(int); mem_alloc( (void **)&ntsca, mreq, "in network.c"); mem_alloc( (void **)&nteqa, mreq, "in network.c"); mem_alloc( (void **)&ipnt, mreq, "in network.c"); mreq = (size_t)vsorc.nsant * sizeof(complex double); mem_alloc( (void **)&vsrc, mreq, "in network.c"); } else if( netcx.masym != 0) { mreq = (size_t)j * sizeof(int); mem_alloc( (void **)&ipnt, mreq, "in network.c"); } /* Signal new and valid current data */ crnt.newer = crnt.valid = 1; if( netcx.ntsol == 0) { int nseg1; /* compute relative matrix asymmetry */ if( netcx.masym != 0) { irow1=0; if( netcx.nonet != 0) { for( i = 0; i < netcx.nonet; i++ ) { nseg1= netcx.iseg1[i]; for( isc1 = 0; isc1 < 2; isc1++ ) { if( irow1 == 0) { ipnt[irow1]= nseg1; nseg1= netcx.iseg2[i]; irow1++; continue; } for( j = 0; j < irow1; j++ ) if( nseg1 == ipnt[j]) break; if( j == irow1 ) { ipnt[irow1]= nseg1; irow1++; } nseg1= netcx.iseg2[i]; } /* for( isc1 = 0; isc1 < 2; isc1++ ) */ } /* for( i = 0; i < netcx.nonet; i++ ) */ } /* if( netcx.nonet != 0) */ if( vsorc.nsant != 0) { for( i = 0; i < vsorc.nsant; i++ ) { nseg1= vsorc.isant[i]; if( irow1 == 0) { ipnt[irow1]= nseg1; irow1++; continue; } for( j = 0; j < irow1; j++ ) if( nseg1 == ipnt[j]) break; if( j == irow1 ) { ipnt[irow1]= nseg1; irow1++; } } /* for( i = 0; i < vsorc.nsant; i++ ) */ } /* if( vsorc.nsant != 0) */ if( irow1 >= 2) { double asmx; for( i = 0; i < irow1; i++ ) { isc1= ipnt[i]-1; asmx= data.si[isc1]; for( j = 0; j < neqt; j++ ) rhs[j] = CPLX_00; rhs[isc1] = CPLX_10; solves( cmx, ip, rhs, netcx.neq, 1, data.np, data.n, data.mp, data.m); cabc( rhs); for( j = 0; j < irow1; j++ ) { isc1= ipnt[j]-1; cmn[j+i*ndimn]= rhs[isc1]/ asmx; } } /* for( i = 0; i < irow1; i++ ) */ asmx=0.0; for( i = 1; i < irow1; i++ ) { isc1= i; for( j = 0; j < isc1; j++ ) { cux= cmn[i+j*ndimn]; pwr= cabs(( cux- cmn[j+i*ndimn])/ cux); if( pwr < asmx) continue; asmx= pwr; nteq= ipnt[i]; ntsc= ipnt[j]; } /* for( j = 0; j < isc1; j++ ) */ } /* for( i = 1; i < irow1; i++ ) */ } /* if( irow1 >= 2) */ } /* if( netcx.masym != 0) */ /* solution of network equations */ if( netcx.nonet > 0) { for( i = 0; i < ndimn; i++ ) { rhnx[i]=CPLX_00; for( j = 0; j < ndimn; j++ ) cmn[j+i*ndimn]=CPLX_00; } /* sort network and source data and */ /* assign equation numbers to segments */ nteq=0; ntsc=0; for( j = 0; j < netcx.nonet; j++ ) { int jump1, jump2, nseg2, isc2=0, irow2=0; double y11r, y11i, y12r, y12i, y22r, y22i; nseg1= netcx.iseg1[j]; nseg2= netcx.iseg2[j]; if( netcx.ntyp[j] <= 1) { y11r= netcx.x11r[j]; y11i= netcx.x11i[j]; y12r= netcx.x12r[j]; y12i= netcx.x12i[j]; y22r= netcx.x22r[j]; y22i= netcx.x22i[j]; } else { y22r= TP* netcx.x11i[j]/ data.wlam; y12r=0.0; y12i=1.0/( netcx.x11r[j]* sin( y22r)); y11r= netcx.x12r[j]; y11i= -y12i* cos( y22r); y22r= netcx.x22r[j]; y22i= y11i+ netcx.x22i[j]; y11i= y11i+ netcx.x12i[j]; if( netcx.ntyp[j] != 2) { y12r= -y12r; y12i= -y12i; } } /* if( netcx.ntyp[j] <= 1) */ jump1 = FALSE; if( vsorc.nsant != 0) { for( i = 0; i < vsorc.nsant; i++ ) if( nseg1 == vsorc.isant[i]) { isc1 = i; jump1 = TRUE; break; } } /* if( vsorc.nsant != 0) */ jump2 = FALSE; if( ! jump1 ) { isc1=-1; if( nteq != 0) { for( i = 0; i < nteq; i++ ) if( nseg1 == nteqa[i]) { irow1 = i; jump2 = TRUE; break; } } /* if( nteq != 0) */ if( ! jump2 ) { irow1= nteq; nteqa[nteq]= nseg1; nteq++; } } /* if( ! jump1 ) */ else { if( ntsc != 0) { for( i = 0; i < ntsc; i++ ) { if( nseg1 == ntsca[i]) { irow1 = ndimn- (i+1); jump2 = TRUE; break; } } } /* if( ntsc != 0) */ if( ! jump2 ) { irow1= ndimn- (ntsc+1); ntsca[ntsc]= nseg1; vsrc[ntsc]= vsorc.vsant[isc1]; ntsc++; } } /* if( ! jump1 ) */ jump1 = FALSE; if( vsorc.nsant != 0) { for( i = 0; i < vsorc.nsant; i++ ) { if( nseg2 == vsorc.isant[i]) { isc2= i; jump1 = TRUE; break; } } } /* if( vsorc.nsant != 0) */ jump2 = FALSE; if( ! jump1 ) { isc2=-1; if( nteq != 0) { for( i = 0; i < nteq; i++ ) if( nseg2 == nteqa[i]) { irow2= i; jump2 = TRUE; break; } } /* if( nteq != 0) */ if( ! jump2 ) { irow2= nteq; nteqa[nteq]= nseg2; nteq++; } } /* if( ! jump1 ) */ else { if( ntsc != 0) { for( i = 0; i < ntsc; i++ ) if( nseg2 == ntsca[i]) { irow2 = ndimn- (i+1); jump2 = TRUE; break; } } /* if( ntsc != 0) */ if( ! jump2 ) { irow2= ndimn- (ntsc+1); ntsca[ntsc]= nseg2; vsrc[ntsc]= vsorc.vsant[isc2]; ntsc++; } } /* if( ! jump1 ) */ /* fill network equation matrix and right hand side vector with */ /* network short-circuit admittance matrix coefficients. */ if( isc1 == -1) { cmn[irow1+irow1*ndimn] -= cmplx( y11r, y11i)* data.si[nseg1-1]; cmn[irow1+irow2*ndimn] -= cmplx( y12r, y12i)* data.si[nseg1-1]; } else { rhnx[irow1] += cmplx( y11r, y11i) * vsorc.vsant[isc1]/data.wlam; rhnx[irow2] += cmplx( y12r, y12i) * vsorc.vsant[isc1]/data.wlam; } if( isc2 == -1) { cmn[irow2+irow2*ndimn] -= cmplx( y22r, y22i)* data.si[nseg2-1]; cmn[irow2+irow1*ndimn] -= cmplx( y12r, y12i)* data.si[nseg2-1]; } else { rhnx[irow1] += cmplx( y12r, y12i) * vsorc.vsant[isc2]/data.wlam; rhnx[irow2] += cmplx( y22r, y22i) * vsorc.vsant[isc2]/data.wlam; } } /* for( j = 0; j < netcx.nonet; j++ ) */ /* add interaction matrix admittance */ /* elements to network equation matrix */ for( i = 0; i < nteq; i++ ) { for( j = 0; j < neqt; j++ ) rhs[j] = CPLX_00; irow1= nteqa[i]-1; rhs[irow1]=CPLX_10; solves( cmx, ip, rhs, netcx.neq, 1, data.np, data.n, data.mp, data.m); cabc( rhs); for( j = 0; j < nteq; j++ ) { irow1= nteqa[j]-1; cmn[i+j*ndimn] += rhs[irow1]; } } /* for( i = 0; i < nteq; i++ ) */ /* factor network equation matrix */ factr( nteq, cmn, ipnt, ndimn); } /* if( netcx.nonet != 0) */ } /* if( netcx.ntsol != 0) */ if( netcx.nonet > 0) { /* add to network equation right hand side */ /* the terms due to element interactions */ for( i = 0; i < neqt; i++ ) rhs[i]= einc[i]; solves( cmx, ip, rhs, netcx.neq, 1, data.np, data.n, data.mp, data.m); cabc( rhs); for( i = 0; i < nteq; i++ ) { irow1= nteqa[i]-1; rhnt[i]= rhnx[i]+ rhs[irow1]; } /* solve network equations */ solve( nteq, cmn, ipnt, rhnt, ndimn); /* add fields due to network voltages to electric fields */ /* applied to structure and solve for induced current */ for( i = 0; i < nteq; i++ ) { irow1= nteqa[i]-1; einc[irow1] -= rhnt[i]; } solves( cmx, ip, einc, netcx.neq, 1, data.np, data.n, data.mp, data.m); cabc( einc); for( i = 0; i < nteq; i++ ) { irow1= nteqa[i]-1; vlt= rhnt[i]* data.si[irow1]* data.wlam; cux= einc[irow1]* data.wlam; netcx.zped= vlt/ cux; pwr=.5* creal( vlt* conj( cux)); netcx.pnls= netcx.pnls- pwr; } if( ntsc != 0) { for( i = 0; i < ntsc; i++ ) { irow1= ntsca[i]-1; vlt= vsrc[i]; cux= einc[irow1]* data.wlam; netcx.zped= vlt/ cux; pwr=.5* creal( vlt* conj( cux)); netcx.pnls= netcx.pnls- pwr; } /* for( i = 0; i < ntsc; i++ ) */ } /* if( ntsc != 0) */ } /* if( netcx.nonet != 0) */ else { /* solve for currents when no networks are present */ solves( cmx, ip, einc, netcx.neq, 1, data.np, data.n, data.mp, data.m); cabc( einc); ntsc=0; } if( (vsorc.nsant+vsorc.nvqd) == 0) { /* Free network buffers */ free_ptr( (void **)&ipnt ); free_ptr( (void **)&nteqa ); free_ptr( (void **)&ntsca ); free_ptr( (void **)&vsrc ); free_ptr( (void **)&rhs ); free_ptr( (void **)&cmn ); free_ptr( (void **)&rhnt ); free_ptr( (void **)&rhnx ); return; } if( vsorc.nsant != 0) { for( i = 0; i < vsorc.nsant; i++ ) { isc1= vsorc.isant[i]-1; vlt= vsorc.vsant[i]; if( ntsc == 0) { cux= einc[isc1]* data.wlam; irow1=0; } else { for( j = 0; j < ntsc; j++ ) if( ntsca[j] == isc1+1) break; irow1= ndimn- (j+1); cux= rhnx[irow1]; for( j = 0; j < nteq; j++ ) cux -= cmn[j+irow1*ndimn]*rhnt[j]; cux=(einc[isc1]+ cux)* data.wlam; irow1++; } /* if( ntsc == 0) */ netcx.zped= vlt/ cux; pwr=.5* creal( vlt* conj( cux)); netcx.pin= netcx.pin+ pwr; if( irow1 != 0) netcx.pnls= netcx.pnls+ pwr; } /* for( i = 0; i < vsorc.nsant; i++ ) */ } /* if( vsorc.nsant != 0) */ if( vsorc.nvqd != 0) for( i = 0; i < vsorc.nvqd; i++ ) { isc1= vsorc.ivqd[i]-1; vlt= vsorc.vqd[i]; cux= cmplx( crnt.air[isc1], crnt.aii[isc1]); ymit= cmplx( crnt.bir[isc1], crnt.bii[isc1]); netcx.zped= cmplx( crnt.cir[isc1], crnt.cii[isc1]); pwr= data.si[isc1]* TP*.5; cux=( cux- ymit* sin( pwr) + netcx.zped* cos( pwr))* data.wlam; netcx.zped= vlt/ cux; pwr=.5* creal( vlt* conj( cux)); netcx.pin= netcx.pin+ pwr; } /* for( i = 0; i < vsorc.nvqd; i++ ) */ /* Free network buffers */ free_ptr( (void **)&ipnt ); free_ptr( (void **)&nteqa ); free_ptr( (void **)&ntsca ); free_ptr( (void **)&vsrc ); free_ptr( (void **)&rhs ); free_ptr( (void **)&cmn ); free_ptr( (void **)&rhnt ); free_ptr( (void **)&rhnx ); return; } /*-----------------------------------------------------------------------*/ /* load calculates the impedance of specified */ /* segments for various types of loading */ void load( int *ldtyp, int *ldtag, int *ldtagf, int *ldtagt, double *zlr, double *zli, double *zlc ) { int i, istep, istepx, l1, l2, ldtags, jump, ichk; complex double zt=CPLX_00, tpcj; tpcj = (0.0+I*1.883698955e+9); /* initialize d array, used for temporary */ /* storage of loading information. */ for( i = 0; i < data.n; i++ ) zload.zarray[i]=CPLX_00; istep=0; /* cycle over loading cards */ while( TRUE ) { istepx = istep; istep++; if( istep > zload.nload) { smat.nop = data.n/data.np; if( smat.nop == 1) return; for( i = 0; i < data.np; i++ ) { zt = zload.zarray[i]; l1 = i; for( l2 = 1; l2 < smat.nop; l2++ ) { l1 += data.np; zload.zarray[l1]= zt; } } return; } /* if( istep > zload.nload) */ if( ldtyp[istepx] > 5 ) { fprintf( stderr, "xnec2c: load(): improper load type chosen," " requested type is %d\n", ldtyp[istepx] ); stop( _("load(): Improper load type chose"), ERR_STOP ); } /* search segments for proper itags */ ldtags= ldtag[istepx]; jump= ldtyp[istepx]+1; ichk=0; l1= 1; l2= data.n; if( ldtags == 0) { if( (ldtagf[istepx] != 0) || (ldtagt[istepx] != 0) ) { l1= ldtagf[istepx]; l2= ldtagt[istepx]; } /* if( (ldtagf[istepx] != 0) || (ldtagt[istepx] != 0) ) */ } /* if( ldtags == 0) */ for( i = l1-1; i < l2; i++ ) { if( ldtags != 0) { if( ldtags != data.itag[i]) continue; if( ldtagf[istepx] != 0) { ichk++; if( (ichk < ldtagf[istepx]) || (ichk > ldtagt[istepx]) ) continue; } else ichk=1; } /* if( ldtags != 0) */ else ichk=1; /* calculation of lamda*imped. per unit length, */ /* jump to appropriate section for loading type */ switch( jump ) { case 1: zt= zlr[istepx]/ data.si[i] + tpcj* zli[istepx]/( data.si[i]* data.wlam); if( fabs( zlc[istepx]) > 1.0e-20) zt += data.wlam/( tpcj* data.si[i]* zlc[istepx]); break; case 2: zt= tpcj* data.si[i]* zlc[istepx]/ data.wlam; if( fabs( zli[istepx]) > 1.0e-20) zt += data.si[i]* data.wlam/( tpcj* zli[istepx]); if( fabs( zlr[istepx]) > 1.0e-20) zt += data.si[i]/ zlr[istepx]; zt=1.0/ zt; break; case 3: zt= zlr[istepx]* data.wlam+ tpcj* zli[istepx]; if( fabs( zlc[istepx]) > 1.0e-20) zt += 1.0/( tpcj* data.si[i]* data.si[i]* zlc[istepx]); break; case 4: zt= tpcj* data.si[i]* data.si[i]* zlc[istepx]; if( fabs( zli[istepx]) > 1.0e-20) zt += 1.0/( tpcj* zli[istepx]); if( fabs( zlr[istepx]) > 1.0e-20) zt += 1.0/( zlr[istepx]* data.wlam); zt=1.0/ zt; break; case 5: zt= cmplx( zlr[istepx], zli[istepx])/ data.si[i]; break; case 6: zint( zlr[istepx]* data.wlam, data.bi[i], &zt ); } /* switch( jump ) */ zload.zarray[i] += zt; } /* for( i = l1-1; i < l2; i++ ) */ if( ichk == 0 ) { fprintf( stderr, "xnec2c: load(): loading data card error," " no segment has an itag = %d\n", ldtags ); stop( _("load(): Loading data card\n"\ "Tag number mismatch error"), ERR_STOP ); } } /* while( TRUE ) */ } /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/network.h000066400000000000000000000016061257141547200152060ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef NETWORK_H #define NETWORK_H 1 #include "common.h" #include "support.h" #endif xnec2c-3.4/src/plot_freqdata.c000066400000000000000000001046001257141547200163330ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* plot_freqdata.c * * Code for plotting graphs of structure * data (VSWR, impedance, gain etc) */ /* * Net gain added by Mark Whitis http://www.freelabs.com/~whitis/ * References: * http://www.digitalhome.ca/forum/showpost.php?p=744018&postcount=47 * NetGain = RawGain+10*log(Feed-pointGain) * where Feed-point Gain = 4*Zr*Zo/((Zr+Zo)^2+Zi^2) * http://www.avsforum.com/avs-vb/showthread.php?p=14086104#post14086104 * NetGain = RawGain+10*log(4*Zr*Zo/((Zr+Zo)^2+Zi^2) * Where log is log10. */ #include "plot_freqdata.h" #include "shared.h" /* Graph plot bounding rectangle */ static GdkRectangle plot_rect; /* Frequency scale max, min, num of values */ static double max_fscale, min_fscale; static int nval_fscale; /*-----------------------------------------------------------------------*/ /* Plot_Frequency_Data() * */ void Plot_Frequency_Data( void ) { /* Abort plotting if main window is to be closed * or when plots drawing area not available */ if( isFlagSet(MAIN_QUIT) || isFlagClear(PLOT_ENABLED) || isFlagClear(ENABLE_EXCITN) ) return; /* Titles for plots */ char *titles[3]; int idx, posn, /* Position num of plot in drawingarea */ fstep; /* Freq step number */ static double *gmax = NULL, /* Max gain buffer */ *vgain = NULL, /* Viewer direction gain buffer */ *netgain = NULL, /* Viewer direction net gain buffer */ *gdir_tht = NULL, /* Direction in theta of gain */ *gdir_phi = NULL, /* Direction in phi of gain */ *fbratio = NULL; /* Front to back ratio */ /* Used to calculate net gain */ double Zr, Zo, Zi; /* Cairo context */ cairo_t *cr = gdk_cairo_create( freqplots_pixmap ); /* Clear pixmap */ cairo_set_source_rgb( cr, BLACK ); cairo_rectangle( cr, 0.0, 0.0, (double)freqplots_pixmap_width, (double)freqplots_pixmap_height ); cairo_fill( cr ); /* Abort if plotting is not possible */ if( (calc_data.fstep < 1) || (isFlagClear(FREQ_LOOP_RUNNING) && isFlagClear(FREQ_LOOP_DONE)) || (isFlagClear(PLOT_GMAX) && isFlagClear(PLOT_GVIEWER) && isFlagClear(PLOT_VSWR) && isFlagClear(PLOT_ZREAL_ZIMAG) && isFlagClear(PLOT_ZMAG_ZPHASE)) ) { /* Render pixmap to screen */ gdk_window_set_back_pixmap( freqplots_drawingarea->window, freqplots_pixmap, FALSE ); gdk_window_clear( freqplots_drawingarea->window ); cairo_destroy( cr ); return; } /* Fit frequency range to scale */ min_fscale = (double)save.freq[0]; if( isFlagSet(FREQ_LOOP_RUNNING) ) max_fscale = (double)save.freq[calc_data.fstep]; else max_fscale = (double)save.freq[calc_data.lastf]; nval_fscale = freqplots_pixmap_width / 75; Fit_to_Scale( &max_fscale, &min_fscale, &nval_fscale ); /* Graph position */ posn = 0; /* Limit freq stepping to last freq step */ fstep = calc_data.lastf + 1; /* Plot max gain vs frequency, if possible */ if( isFlagSet(PLOT_GMAX) && isFlagSet(ENABLE_RDPAT) ) { int nth, nph, pol; gboolean no_fbr; /* Allocate max gmax and directions */ size_t mreq = (size_t)fstep * sizeof(double); mem_realloc( (void **)&gmax, mreq, "in plot_freqdata.c" ); mem_realloc( (void **)&gdir_tht, mreq, "in plot_freqdata.c" ); mem_realloc( (void **)&gdir_phi, mreq, "in plot_freqdata.c" ); mem_realloc( (void **)&fbratio, mreq, "in plot_freqdata.c" ); if( isFlagSet(PLOT_NETGAIN) ) mem_realloc( (void **)&netgain, mreq, "in plot_freqdata.c" ); /* Find max gain and direction, F/B ratio */ no_fbr = FALSE; /* Polarization type and impedance */ pol = calc_data.pol_type; Zo = calc_data.zo; /* When freq loop is done, calcs are done for all freq steps */ for( idx = 0; idx < fstep; idx++ ) { double fbdir; int fbidx, mgidx; /* Index to gtot buffer where max gain * occurs for given polarization type */ mgidx = rad_pattern[idx].max_gain_idx[pol]; /* Max gain for given polarization type */ gmax[idx] = rad_pattern[idx].gtot[mgidx] + Polarization_Factor(pol, idx, mgidx); /* Net gain if selected */ if( isFlagSet(PLOT_NETGAIN) ) { Zr = impedance_data.zreal[idx]; Zi = impedance_data.zimag[idx]; netgain[idx] = gmax[idx] + 10*log10(4*Zr*Zo/(pow(Zr+Zo,2)+pow(Zi,2))); } /* Radiation angle/phi where max gain occurs */ gdir_tht[idx] = 90.0 - rad_pattern[idx].max_gain_tht[pol]; gdir_phi[idx] = rad_pattern[idx].max_gain_phi[pol]; /* Find F/B ratio if possible or net gain not required */ if( no_fbr || isFlagSet(PLOT_NETGAIN) ) continue; /* Find F/B direction in theta */ fbdir = 180.0 - rad_pattern[idx].max_gain_tht[pol]; if( fpat.dth == 0.0 ) nth = 0; else nth = (int)( fbdir/fpat.dth + 0.5 ); /* If the antenna is modelled over ground, then use the same * theta as the max gain direction, relying on phi alone to * take us to the back. Patch supplied by Rik van Riel AB1KW */ if( (nth >= fpat.nth) || (nth < 0) ) { fbdir = rad_pattern[idx].max_gain_tht[pol]; if( fpat.dth == 0.0 ) nth = 0; else nth = (int)( fbdir/fpat.dth + 0.5 ); } /* Find F/B direction in phi */ fbdir = gdir_phi[idx] + 180.0; if( fbdir >= 360.0 ) fbdir -= 360.0; nph = (int)( fbdir/fpat.dph + 0.5 ); /* No F/B calc. possible if no phi step at +180 from max gain */ if( (nph >= fpat.nph) || (nph < 0) ) { no_fbr = TRUE; continue; } /* Index to gtot buffer for gain in back direction */ fbidx = nth + nph*fpat.nth; /* Front to back ratio */ fbratio[idx] = pow( 10.0, gmax[idx] / 10.0 ); fbratio[idx] /= pow( 10.0, (rad_pattern[idx].gtot[fbidx] + Polarization_Factor(pol, idx, fbidx)) / 10.0 ); fbratio[idx] = 10.0 * log10( fbratio[idx] ); } /* for( idx = 0; idx < fstep; idx++ ) */ /*** Plot gain and f/b ratio (if possible) graph(s) */ if( no_fbr || isFlagSet(PLOT_NETGAIN) ) { /* Plotting frame titles */ titles[0] = _("Raw Gain dbi"); if( isFlagSet(PLOT_NETGAIN) ) { titles[1] = _("Max Gain & Net Gain vs Frequency"); titles[2] = _("Net Gain dbi"); if( fstep > 1 ) Plot_Graph2( gmax, netgain, save.freq, fstep, titles, calc_data.ngraph, ++posn ); } else { titles[1] = _("Max Gain & F/B Ratio vs Frequency"); titles[2] = " "; if( fstep > 1 ) Plot_Graph( gmax, save.freq, fstep, titles, calc_data.ngraph, ++posn ); } } else { /* Plotting frame titles */ titles[0] = _("Raw Gain dbi"); titles[1] = _("Max Gain & F/B Ratio vs Frequency"); titles[2] = _("F/B Ratio db"); if( fstep > 1 ) Plot_Graph2( gmax, fbratio, save.freq, fstep, titles, calc_data.ngraph, ++posn ); } /* Plot max gain direction if enabled */ if( isFlagSet(PLOT_GAIN_DIR) ) { /* Plotting frame titles */ titles[0] = _("Rad Angle - deg"); titles[1] = _("Max Gain Direction vs Frequency"); titles[2] = _("Phi - deg"); if( fstep > 1 ) Plot_Graph2( gdir_tht, gdir_phi, save.freq, fstep, titles, calc_data.ngraph, ++posn ); } } /* if( isFlagSet(PLOT_GMAX) && isFlagSet(ENABLE_RDPAT) ) */ /* Plot gain in direction of viewer vs freq, if possible */ if( isFlagSet(PLOT_GVIEWER) && isFlagSet(ENABLE_RDPAT) ) { /* Plotting frame titles */ titles[0] = _("Raw Gain dbi"); titles[1] = _("Gain in Viewer Direction vs Frequency"); /* Allocate viewer gain buffer */ size_t mreq = (size_t)fstep * sizeof(double); mem_realloc( (void **)&vgain, mreq, "in plot_freqdata.c" ); /* Calcs are done for all freq steps */ for( idx = 0; idx < fstep; idx++ ) vgain[idx] = Viewer_Gain( structure_proj_params, idx ); /* Plot net gain if selected */ if( isFlagSet(PLOT_NETGAIN) ) { mreq = (size_t)fstep * sizeof(double); mem_realloc( (void **)&netgain, mreq, "in plot_freqdata.c" ); Zo = calc_data.zo; for( idx = 0; idx < fstep; idx++ ) { Zr = impedance_data.zreal[idx]; Zi = impedance_data.zimag[idx]; netgain[idx] = vgain[idx] + 10*log10(4*Zr*Zo/(pow(Zr+Zo,2)+pow(Zi,2))); } /* Plot net gain if selected */ titles[2] = _("Net gain dbi"); if( fstep > 1 ) Plot_Graph2( vgain, netgain, save.freq, fstep, titles, calc_data.ngraph, ++posn ); } /* if( isFlagSet(PLOT_NETGAIN) ) */ else { titles[2] = " "; if( fstep > 1 ) Plot_Graph( vgain, save.freq, fstep, titles, calc_data.ngraph, ++posn ); } } /* isFlagSet(PLOT_GVIEWER) && isFlagSet(ENABLE_RDPAT) */ /* Plot VSWR vs freq */ if( isFlagSet(PLOT_VSWR) ) { double *vswr = NULL, gamma; double zrpro2, zrmro2, zimag2; /* Plotting frame titles */ titles[0] = _("VSWR"); titles[1] = _("VSWR vs Frequency"); /* Calculate VSWR */ mem_alloc( (void **)&vswr, (size_t)calc_data.nfrq * sizeof(double), "in Plot_Frequency_Data()" ); if( vswr == NULL ) { fprintf( stderr, "xnec2c: Plot_Frequency_Data():" "memory allocation for vswr failed\n" ); stop( _("Plot_Frequency_Data():" "Memory allocation for vswr failed"), ERR_OK ); return; } for(idx = 0; idx < fstep; idx++ ) { zrpro2 = impedance_data.zreal[idx] + calc_data.zo; zrpro2 *= zrpro2; zrmro2 = impedance_data.zreal[idx] - calc_data.zo; zrmro2 *= zrmro2; zimag2 = impedance_data.zimag[idx] * impedance_data.zimag[idx]; gamma = sqrt( (zrmro2 + zimag2)/(zrpro2 + zimag2) ); vswr[idx] = (1+gamma)/(1-gamma); if( vswr[idx] > 10.0 ) vswr[idx] = 10.0; } titles[2] = " "; if( fstep > 1 ) Plot_Graph( vswr, save.freq, fstep, titles, calc_data.ngraph, ++posn ); free_ptr( (void **)&vswr ); } /* if( isFlagSet(PLOT_VSWR) ) */ /* Plot z-real and z-imag */ if( isFlagSet(PLOT_ZREAL_ZIMAG) ) { /* Plotting frame titles */ titles[0] = _("Z-real"); titles[1] = _("Impedance vs Frequency"); titles[2] = _("Z-imag"); if( fstep > 1 ) Plot_Graph2( impedance_data.zreal, impedance_data.zimag, save.freq, fstep, titles, calc_data.ngraph, ++posn ); } /* if( isFlagSet(PLOT_ZREAL_ZIMAG) ) */ /* Plot z-magn and z-phase */ if( isFlagSet(PLOT_ZMAG_ZPHASE) ) { /* Plotting frame titles */ titles[0] = _("Z-magn"); titles[1] = _("Impedance vs Frequency"); titles[2] = _("Z-phase"); if( fstep > 1 ) Plot_Graph2( impedance_data.zmagn, impedance_data.zphase, save.freq, fstep, titles, calc_data.ngraph, ++posn ); } /* if( isFlagSet(PLOT_ZREAL_ZIMAG) ) */ /* Render pixmap to screen */ gdk_window_set_back_pixmap( freqplots_drawingarea->window, freqplots_pixmap, FALSE ); gdk_window_clear( freqplots_drawingarea->window ); /* Display freq data in entry widgets */ Display_Frequency_Data(); /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); cairo_destroy( cr ); } /* Plot_Frequency_Data() */ /*-----------------------------------------------------------------------*/ /* Display_Frequency_Data() * * Displays freq dependent data (gain, impedance etc) * in the entry widgets in the freq plots window */ void Display_Frequency_Data( void ) { int pol, fstep; double vswr, gamma; double zrpro2, zrmro2, zimag2; char txt[11]; if( isFlagClear(PLOT_ENABLED) ) return; /* Limit freq stepping to nfrq */ fstep = calc_data.fstep; if( fstep >= calc_data.nfrq ) fstep = calc_data.nfrq; /* Polarization type */ pol = calc_data.pol_type; /* Index to gtot buffer where max gain * occurs for given polarization type */ if( isFlagSet(ENABLE_RDPAT) ) { /* Max gain for given polarization type */ int mgidx = rad_pattern[fstep].max_gain_idx[pol]; double gmax = rad_pattern[fstep].gtot[mgidx] + Polarization_Factor(pol, fstep, mgidx); /* Display max gain */ snprintf( txt, 6, "%5f", gmax ); gtk_entry_set_text( GTK_ENTRY(lookup_widget( freqplots_window, "freqplots_maxgain_entry")), txt ); } /* isFlagSet(ENABLE_RDPAT) */ /* Display frequency */ snprintf( txt, 11, "%10.3f", (double)calc_data.fmhz ); gtk_entry_set_text( GTK_ENTRY(lookup_widget( freqplots_window, "freqplots_fmhz_entry")), txt ); /* Calculate VSWR */ zrpro2 = (double)creal( netcx.zped ) + calc_data.zo; zrpro2 *= zrpro2; zrmro2 = (double)creal( netcx.zped ) - calc_data.zo; zrmro2 *= zrmro2; zimag2 = (double)cimag( netcx.zped ); zimag2 *= zimag2; gamma = sqrt( (zrmro2 + zimag2)/(zrpro2 + zimag2) ); vswr = (1+gamma)/(1-gamma); if( vswr > 999.0 ) vswr = 999.0; /* Display VSWR */ snprintf( txt, 6, "%5f", vswr ); gtk_entry_set_text( GTK_ENTRY(lookup_widget( freqplots_window, "freqplots_vswr_entry")), txt ); /* Display Z real */ snprintf( txt, 6, "%5f", (double)creal( netcx.zped ) ); gtk_entry_set_text( GTK_ENTRY(lookup_widget( freqplots_window, "freqplots_zreal_entry")), txt ); /* Display Z imaginary */ snprintf( txt, 6, "%5f", (double)cimag( netcx.zped ) ); gtk_entry_set_text( GTK_ENTRY(lookup_widget( freqplots_window, "freqplots_zimag_entry")), txt ); } /* Display_Frequency_Data() */ /*-----------------------------------------------------------------------*/ /* Draw_Plotting_Frame() * * Draws a graph plotting frame, including * horizontal and vertical divisions */ void Draw_Plotting_Frame( gchar **title, GdkRectangle *rect, int nhor, int nvert ) { int idx, xpw, xps, yph, yps; PangoLayout *layout; int width0, width1, width2, height; /* Layout size */ /* Cairo context */ cairo_t *cr = gdk_cairo_create( freqplots_pixmap ); /* Draw titles (left scale, center and right scale) */ cairo_set_source_rgb( cr, MAGENTA ); layout = gtk_widget_create_pango_layout( freqplots_drawingarea, title[0] ); pango_layout_get_pixel_size( layout, &width0, &height); cairo_move_to( cr, rect->x, rect->y ); pango_cairo_show_layout( cr, layout ); cairo_set_source_rgb( cr, CYAN ); pango_layout_set_text( layout, title[2], -1 ); pango_layout_get_pixel_size( layout, &width2, &height); xpw = rect->x + rect->width - width2; cairo_move_to( cr, xpw, rect->y ); pango_cairo_show_layout( cr, layout ); cairo_set_source_rgb( cr, YELLOW ); pango_layout_set_text( layout, title[1], -1 ); pango_layout_get_pixel_size( layout, &width1, &height); xpw = rect->x + width0/2 + (rect->width-width1-width2)/2; cairo_move_to( cr, xpw, rect->y ); pango_cairo_show_layout( cr, layout ); /* Move to plot box and divisions */ rect->y += height; xpw = rect->x + rect->width; yph = rect->y + rect->height; /* Draw vertical divisions */ cairo_set_source_rgb( cr, GREY ); nvert--; for( idx = 1; idx <= nvert; idx++ ) { xps = rect->x + (idx * rect->width) / nvert; Cairo_Draw_Line( cr, xps, rect->y, xps, yph ); } /* Draw horizontal divisions */ nhor--; for( idx = 1; idx <= nhor; idx++ ) { yps = rect->y + (idx * rect->height) / nhor; Cairo_Draw_Line( cr, rect->x, yps, xpw, yps ); } /* Draw outer box */ cairo_rectangle( cr, rect->x, rect->y, rect->width, rect->height ); cairo_stroke( cr ); /* Draw a vertical line to show current freq if it was * changed by a user click on the plots drawingarea */ if( isFlagSet(FREQ_LOOP_DONE) && isFlagSet(PLOT_FREQ_LINE) ) { double fr; fr = ((double)calc_data.fmhz - min_fscale) / (max_fscale - min_fscale); fr = fr * (double)rect->width + 0.5; cairo_set_source_rgb( cr, GREEN ); Cairo_Draw_Line( cr, rect->x+(int)fr, rect->y, rect->x+(int)fr, yph ); } g_object_unref( layout ); cairo_destroy( cr ); } /* Draw_Plotting_Frame() */ /*-----------------------------------------------------------------------*/ /* Plot_Vertical_Scale() * * Draws out a vertical scale, between the min * and max value of the variable to be plotted */ void Plot_Vertical_Scale( double red, double grn, double blu, int x, int y, int height, double max, double min, int nval ) { int idx, yps; int min_order, max_order, order; double vstep = 1.0; char value[16], format[6]; PangoLayout *layout; int pl_width, pl_height; /* Layout size */ /* Abort if not enough values to plot */ if( nval <= 1 ) return; /* Cairo context */ cairo_t *cr = gdk_cairo_create( freqplots_pixmap ); cairo_set_source_rgb( cr, red, grn, blu ); /* Calculate step between scale values */ vstep = (max-min) / (double)(nval-1); /* Determine format for scale values */ /* Find order of magnitude of min and max values */ if( min != 0.0 ) { double mo = log10( fabs(min) ); min_order = (int)mo; } else min_order = 0; if( max != 0.0 ) { double mo = log10( fabs(max) ); max_order = (int)mo; } else max_order = 0; /* Use highest order for format */ order = ( max_order > min_order ? max_order : min_order ); if( order > 3 ) order = 3; if( order < 0 ) order = 0; snprintf( format, 6, "%%6.%df", (3-order) ); /* Create a pango layout */ layout = gtk_widget_create_pango_layout( freqplots_drawingarea, "X" ); pango_layout_get_pixel_size( layout, &pl_width, &pl_height); /* Draw vertical scale values */ /* Align with plot box */ y += pl_height/4; for( idx = 0; idx < nval; idx++ ) { yps = y + (idx * height) / (nval-1); snprintf( value, 16, (const char *)format, max ); pango_layout_set_text( layout, value, -1 ); cairo_move_to( cr, x, yps ); pango_cairo_show_layout( cr, layout ); max -= vstep; } g_object_unref( layout ); cairo_destroy( cr ); } /* Plot_Vertical_Scale() */ /*-----------------------------------------------------------------------*/ /* Plot_Horizontal_Scale() * * Draws out a horizontal scale, between the min * and max value of the variable to be plotted */ void Plot_Horizontal_Scale( double red, double grn, double blu, int x, int y, int width, double max, double min, int nval ) { int idx, xps, order; double hstep = 1.0; char value[16], format[6]; PangoLayout *layout; int pl_width, pl_height; /* Layout size */ /* Abort if not enough values to plot */ if( nval <= 1 ) return; /* Cairo context */ cairo_t *cr = gdk_cairo_create( freqplots_pixmap ); cairo_set_source_rgb( cr, red, grn, blu ); /* Calculate step between scale values */ hstep = (max-min) / (nval-1); /* Determine format for scale values */ /* Use order of horizontal step to determine format of print */ double ord = log10( fabs(hstep + 0.0000001) ); order = (int)ord; if( order > 0 ) order = 0; if( order < -9 ) order = -9; snprintf( format, 6, "%%6.%df", 1-order ); /* Create a pango layout */ layout = gtk_widget_create_pango_layout( freqplots_drawingarea, "1234.5" ); pango_layout_get_pixel_size( layout, &pl_width, &pl_height); /* Draw horizontal scale values */ /* Align with plot box */ x -= pl_width/2; for( idx = 0; idx < nval; idx++ ) { xps = x + (idx * width) / (nval-1); snprintf( value, sizeof(value), (const char *)format, min ); pango_layout_set_text( layout, value, -1 ); cairo_move_to( cr, xps, y ); pango_cairo_show_layout( cr, layout ); min += hstep; } g_object_unref( layout ); cairo_destroy( cr ); } /* Plot_Horizontal_Scale() */ /*-----------------------------------------------------------------------*/ /* Draw_Graph() * * Plots a graph of a vs b */ void Draw_Graph( double red, double grn, double blu, GdkRectangle *rect, double *a, double *b, double amax, double amin, double bmax, double bmin, int nval, int side ) { double ra, rb; int idx; GdkPoint *points = NULL, polygn[4]; /* Cairo context */ cairo_t *cr = gdk_cairo_create( freqplots_pixmap ); cairo_set_source_rgb( cr, red, grn, blu ); /* Range of values to plot */ ra = amax - amin; rb = bmax - bmin; /* Calculate points to plot */ mem_alloc( (void **)&points, (size_t)calc_data.nfrq * sizeof(GdkPoint), "in Plot_Frequency_Data()" ); if( points == NULL ) { fprintf( stderr, "xnec2c: Draw_Graph():" "memory allocation for points failed\n" ); stop( _("Draw_Graph():" "Memory allocation for points failed"), ERR_OK ); return; } for( idx = 0; idx < nval; idx++ ) { points[idx].x = rect->x + (int)( (double)rect->width * (b[idx]-bmin) / rb + 0.5 ); points[idx].y = rect->y + (int)( (double)rect->height * (amax-a[idx]) / ra + 0.5 ); /* Plot a small rectangle (left scale) or polygon (right scale) at point */ if( side == LEFT ) { cairo_rectangle( cr, (double)(points[idx].x-3), (double)(points[idx].y-3), 6.0, 6.0 ); cairo_fill( cr ); } else { polygn[0].x = points[idx].x-4; polygn[0].y = points[idx].y; polygn[1].x = points[idx].x; polygn[1].y = points[idx].y+4; polygn[2].x = points[idx].x+4; polygn[2].y = points[idx].y; polygn[3].x = points[idx].x; polygn[3].y = points[idx].y-4; Cairo_Draw_Polygon( cr, polygn, 4 ); cairo_fill( cr ); } } /* Draw the graph */ Cairo_Draw_Lines( cr, points, nval ); free_ptr( (void **)&points ); cairo_destroy( cr ); } /* Draw_Graph() */ /*-----------------------------------------------------------------------*/ /* Set_Rectangle() * * Sets the parameters of a GdkRectangle */ void Set_Rectangle( GdkRectangle *rect, int x, int y, int w, int h ) { rect->x = x; rect->y = y; rect->width = w; rect->height = h; } /*-----------------------------------------------------------------------*/ /* Fit_to_Scale() * * Adjust the max and min value of data to be plotted, * as well as the number of scale sub-divisions, so that * sub-division values are easier to interpolate between. * The chosen scale values are 10, 10/2, 10/4, 10/5 and 1. */ void Fit_to_Scale( double *max, double *min, int *nval ) { /* Acceptable scale values (10/10, 10/5, 10/4, 10/2) */ /* Intermediate values are geometric mean of pairs */ double scale_val[] = { 1.0, 1.4142, 2.0, 2.2360, 2.5, 3.5355, 5.0, 7.0710, 10.0, 14.142 }; double subdiv_val, subdiv_order; int idx; /* Fix input */ if( *max == *min ) { if( *max == 0.0 ) { *max = 1.0; *min = -1.0; } else if( *max > 0.0 ) { *max *= 1.5; *min /= 2.0; } else { *max /= 2.0; *min *= 1.5; } } /* Find subdivision's lower order of magnitude */ subdiv_val = (*max - *min) / (double)(*nval-1); subdiv_order = 1.0; while( subdiv_order < subdiv_val ) subdiv_order *= 10.0; while( subdiv_order > subdiv_val ) subdiv_order /= 10.0; /* Scale subdivision 1 < subd < 10 */ subdiv_val /= subdiv_order; /* Find nearest prefered subdiv value */ for( idx = 1; idx <= 9; idx += 2 ) if( scale_val[idx] >= subdiv_val ) break; /* Scale prefered subdiv value */ if( idx > 9 ) idx = 9; subdiv_val = scale_val[idx-1] * subdiv_order; /* Recalculate new max and min value */ New_Max_Min( max, min, subdiv_val, nval ); } /* Fit_to_Scale() */ /*-----------------------------------------------------------------------*/ /* Fit_to_Scale2() * * Adjust the max and min value of data to be plotted, * as well as the number of scale sub-divisions, so that * sub-division values are easier to interpolate between. * This is done for two scales (left & right) simultaneously. * The chosen scale values are 10, 10/2, 10/4, 10/5 and 1. */ void Fit_to_Scale2( double *max1, double *min1, double *max2, double *min2, int *nval ) { /* Acceptable scale values (10/10, 10/5, 10/4, 10/2) */ /* Intermediate values are geometric mean of pairs */ double scale_val[] = { 10.0, 5.0, 2.5, 2.0, 1.0, 0.5 }; double subdiv_val1, subdiv_order1, subdiv_val2, subdiv_order2; double max_1, min_1, max_2, min_2, range1, range2, min_stretch; double max1sv=0.0, min1sv=0.0, max2sv=0.0, min2sv=0.0; int idx1, idx2, nval1, nval2, nvalsv=0, mx, i1, i2; /* Fix input for both scales */ if( *max1 == *min1 ) { if( *max1 == 0.0 ) { *max1 = 1.0; *min1 = -1.0; } else if( *max1 > 0.0 ) { *max1 *= 1.5; *min1 /= 2.0; } else { *max1 /= 2.0; *min1 *= 1.5; } } if( *max2 == *min2 ) { if( *max2 == 0.0 ) { *max2 = 1.0; *min2 = -1.0; } else if( *max2 > 0.0 ) { *max2 *= 1.5; *min2 /= 2.0; } else { *max2 /= 2.0; *min2 *= 1.5; } } /* For each scale */ /* Find subdivision's lower order of magnitude */ subdiv_val1 = (*max1 - *min1) / (double)(*nval-1); subdiv_order1 = 1.0; while( subdiv_order1 < subdiv_val1 ) subdiv_order1 *= 10.0; while( subdiv_order1 > subdiv_val1 ) subdiv_order1 /= 10.0; /* Scale subdivision 1 < subd < 10 */ subdiv_val1 /= subdiv_order1; /* Find nearest prefered subdiv value */ idx1 = 1; while( (scale_val[idx1] > subdiv_val1) && (idx1 <= 4) ) idx1++; /* Find subdivision's lower order of magnitude */ subdiv_val2 = (*max2 - *min2) / (double)(*nval-1); subdiv_order2 = 1.0; while( subdiv_order2 < subdiv_val2 ) subdiv_order2 *= 10.0; while( subdiv_order2 > subdiv_val2 ) subdiv_order2 /= 10.0; /* Scale subdivision 1 < subd < 10 */ subdiv_val2 /= subdiv_order2; /* Find nearest prefered subdiv value */ idx2 = 1; while( (scale_val[idx2] > subdiv_val2) && (idx2 <= 4) ) idx2++; /* Search for a compromize in scale stretching */ range1 = *max1 - *min1; range2 = *max2 - *min2; min_stretch = 10.0; /* Scale prefered subdiv values */ subdiv_val1 = scale_val[idx1] * subdiv_order1; subdiv_val2 = scale_val[idx2] * subdiv_order2; /* Recalculate new max and min values */ max_1 = *max1; min_1 = *min1; nval1 = *nval; max_2 = *max2; min_2 = *min2; nval2 = *nval; New_Max_Min( &max_1, &min_1, subdiv_val1, &nval1 ); New_Max_Min( &max_2, &min_2, subdiv_val2, &nval2 ); /* This is a lucky case */ if( (nval1 == nval2) && (nval1 >= *nval) ) { *max1 = max_1; *min1 = min_1; *max2 = max_2; *min2 = min_2; *nval = nval1; return; } /* More likely look for a compromise */ for( i1 = 0; i1 < 2; i1++ ) for( i2 = 0; i2 < 2; i2++ ) { double stretch; /* Scale prefered subdiv values */ subdiv_val1 = scale_val[idx1-i1] * subdiv_order1; subdiv_val2 = scale_val[idx2-i2] * subdiv_order2; /* Recalculate new max and min values */ max_1 = *max1; min_1 = *min1; nval1 = *nval; max_2 = *max2; min_2 = *min2; nval2 = *nval; New_Max_Min( &max_1, &min_1, subdiv_val1, &nval1 ); New_Max_Min( &max_2, &min_2, subdiv_val2, &nval2 ); /* This is a lucky case */ if( nval1 == nval2 ) { *max1 = max_1; *min1 = min_1; *max2 = max_2; *min2 = min_2; *nval = nval1; return; } /* Stretch scale with the fewer steps */ if( nval1 > nval2 ) { mx = nval1 - nval2; max_2 += ((mx+1)/2) * subdiv_val2; min_2 -= (mx/2) * subdiv_val2; stretch = (max_2-min_2)/range2; if( (stretch < min_stretch) ) { min_stretch = stretch; max2sv = max_2; min2sv = min_2; max1sv = max_1; min1sv = min_1; nvalsv = nval1; } } else { mx = nval2 - nval1; max_1 += ((mx+1)/2) * subdiv_val1; min_1 -= (mx/2) * subdiv_val1; stretch = (max_1-min_1)/range1; if( (stretch < min_stretch) ) { min_stretch = stretch; max1sv = max_1; min1sv = min_1; max2sv = max_2; min2sv = min_2; nvalsv = nval2; } } } /* for( i1 = 0; i1 < 3; i1++ ) */ *max1 = max1sv; *min1 = min1sv; *max2 = max2sv; *min2 = min2sv; *nval = nvalsv; } /* Fit_to_Scale2() */ /*-----------------------------------------------------------------------*/ /* New_Max_Min() * * Calculates new max and min scale * values and the number of steps */ void New_Max_Min( double *max, double *min, double sval, int *nval ) { int ix; double i; i = ceil(*max / sval - 0.000001); ix = (int)i; *max = (double)ix * sval; i = floor(*min / sval + 0.000001); ix = (int)i; *min = (double)ix * sval; *nval = (int)((*max - *min) / sval + 0.5) + 1; } /* New_Max_Min() */ /*-----------------------------------------------------------------------*/ /* Plot_Graph2() * * Plots graphs of two functions against a common variable */ void Plot_Graph2( double *fa, double *fb, double *fc, int nc, char *titles[], int nplt, int posn ) { double max_fa, min_fa, max_fb, min_fb; static int first_call = TRUE; int idx, nval_ab, plot_height, plot_posn; /* Pango layout size */ static int layout_width, layout_height; if( first_call ) { /* Create a pango layout to get scale size */ PangoLayout *layout; layout = gtk_widget_create_pango_layout( freqplots_drawingarea, "000000" ); pango_layout_get_pixel_size( layout, &layout_width, &layout_height); first_call = FALSE; g_object_unref( layout ); } /* Available height for each graph. * (np=number of graphs to be plotted) */ plot_height = freqplots_pixmap_height/nplt; plot_posn = (freqplots_pixmap_height * (posn-1))/nplt; /* Plot box rectangle */ Set_Rectangle( &plot_rect, layout_width+4, plot_posn+2, freqplots_pixmap_width-8 - 2*layout_width, plot_height-8 - 2*layout_height ); /*** Draw horizontal (freq) scale ***/ Plot_Horizontal_Scale( YELLOW, layout_width+2, plot_posn+plot_height-2 - layout_height, plot_rect.width, max_fscale, min_fscale, nval_fscale ); /*** Draw left and right scale ***/ /* Find max and min of fa */ max_fa = min_fa = fa[0]; for( idx = 1; idx < nc; idx++ ) { if( max_fa < fa[idx] ) max_fa = fa[idx]; if( min_fa > fa[idx] ) min_fa = fa[idx]; } /* Find max and min of fb */ max_fb = min_fb = fb[0]; for( idx = 1; idx < nc; idx++ ) { if( max_fb < fb[idx] ) max_fb = fb[idx]; if( min_fb > fb[idx] ) min_fb = fb[idx]; } /* Fit ranges to common scale */ nval_ab = plot_height / 50; Fit_to_Scale2( &max_fa, &min_fa, &max_fb, &min_fb, &nval_ab ); /* Draw left scale */ Plot_Vertical_Scale( MAGENTA, 2, plot_posn+2, plot_rect.height, max_fa, min_fa, nval_ab ); /* Draw right scale */ Plot_Vertical_Scale( CYAN, freqplots_pixmap_width-2 - layout_width, plot_posn+2, plot_rect.height, max_fb, min_fb, nval_ab ); /* Draw plotting frame */ Draw_Plotting_Frame( titles, &plot_rect, nval_ab, nval_fscale ); /* Draw graph */ Draw_Graph( MAGENTA, &plot_rect, fa, fc, max_fa, min_fa, max_fscale, min_fscale, nc, LEFT ); /* Draw graph */ Draw_Graph( CYAN, &plot_rect, fb, fc, max_fb, min_fb, max_fscale, min_fscale, nc, RIGHT ); } /* Plot_Graph2() */ /*-----------------------------------------------------------------------*/ /* Plot_Graph() * * Plots graph of a functions against a variable */ void Plot_Graph( double *fa, double *fb, int nb, char *titles[], int nplt, int posn ) { double max_fa, min_fa; static int first_call = TRUE; int idx, nval_fa, plot_height, plot_posn; /* Pango layout size */ static int layout_width, layout_height; if( first_call ) { /* Create a pango layout to get scale size */ PangoLayout *layout; layout = gtk_widget_create_pango_layout( freqplots_drawingarea, "000000" ); pango_layout_get_pixel_size( layout, &layout_width, &layout_height); first_call = FALSE; g_object_unref( layout ); } /* Available height for each graph. * (np=number of graphs to be plotted) */ plot_height = freqplots_pixmap_height/nplt; plot_posn = (freqplots_pixmap_height * (posn-1))/nplt; /* Plot box rectangle */ Set_Rectangle( &plot_rect, layout_width + 4, plot_posn+2, freqplots_pixmap_width-8 - 2*layout_width, plot_height-8 - 2*layout_height ); /*** Draw horizontal (freq) scale ***/ Plot_Horizontal_Scale( YELLOW, layout_width+2, plot_posn+plot_height-2 - layout_height, plot_rect.width, max_fscale, min_fscale, nval_fscale ); /*** Draw left scale ***/ /* Find max and min of fa */ max_fa = min_fa = fa[0]; for( idx = 1; idx < nb; idx++ ) { if( max_fa < fa[idx] ) max_fa = fa[idx]; if( min_fa > fa[idx] ) min_fa = fa[idx]; } /* Fit fa range to scale */ nval_fa = plot_height / 50; Fit_to_Scale( &max_fa, &min_fa, &nval_fa ); /* Draw left scale */ Plot_Vertical_Scale( MAGENTA, 2, plot_posn+2, plot_rect.height, max_fa, min_fa, nval_fa ); /* Draw plotting frame */ Draw_Plotting_Frame( titles, &plot_rect, nval_fa, nval_fscale ); /* Draw graph */ Draw_Graph( MAGENTA, &plot_rect, fa, fb, max_fa, min_fa, max_fscale, min_fscale, nb, LEFT ); } /* Plot_Graph() */ /*-----------------------------------------------------------------------*/ /* Plots_Window_Killed() * * Cleans up after the plots window is closed */ void Plots_Window_Killed(void) { if( isFlagSet(PLOT_ENABLED) ) { ClearFlag( PLOT_FLAGS ); freqplots_drawingarea = NULL; freqplots_window = NULL; gtk_check_menu_item_set_active( GTK_CHECK_MENU_ITEM(lookup_widget( main_window, "main_freqplots")), FALSE ); } } /* Plots_Window_Killed() */ /*-----------------------------------------------------------------------*/ /* Set_Frequecy_On_Click() * * Sets the current freq after click by user on plots drawingarea */ void Set_Frequency_On_Click( GdkEventButton *event ) { gdouble fmhz = 0.0; gdouble x, w; int idx; if( isFlagClear(FREQ_LOOP_DONE) ) return; /* Width of plot bounding rectangle */ w = (double)plot_rect.width; /* 'x' posn of click refered to plot bounding rectangle's 'x' */ x = event->x - (double)plot_rect.x; if( x < 0.0 ) x = 0.0; else if( x > w ) x = w; /* Set freq corresponding to click 'x', to freq spinbuttons */ idx = calc_data.lastf; switch( event->button ) { case 1: /* Calculate frequency corresponding to mouse position in plot */ /* Enable drawing of freq line */ SetFlag( PLOT_FREQ_LINE ); fmhz = max_fscale - min_fscale; fmhz = min_fscale + fmhz * x/w; break; case 2: /* Disable drawing of freq line */ ClearFlag( PLOT_FREQ_LINE ); Plot_Frequency_Data(); return; case 3: /* Calculate frequency corresponding to mouse position in plot */ /* Enable drawing of freq line */ SetFlag( PLOT_FREQ_LINE ); fmhz = max_fscale - min_fscale; fmhz = min_fscale + fmhz * x/w; /* Find nearest freq step */ idx = (int)( (double)idx * (fmhz - save.freq[0]) / (save.freq[idx] - save.freq[0]) + 0.5 ); if( idx > calc_data.lastf ) idx = calc_data.lastf; else if( idx < 0 ) idx = 0; fmhz = save.freq[idx]; } /* switch( event->button ) */ /* Set frequency spinbuttons on new freq */ if( fmhz != gtk_spin_button_get_value(mainwin_frequency) ) { gtk_spin_button_set_value( mainwin_frequency, fmhz ); if( isFlagSet(DRAW_ENABLED) ) gtk_spin_button_set_value( rdpattern_frequency, fmhz ); } else /* Replot data */ { calc_data.fmhz = (double)fmhz; g_idle_add( Redo_Currents, NULL ); } } /* Set_Freq_On_Click() */ /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/plot_freqdata.h000066400000000000000000000017141257141547200163420ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef PLOT_FREQDATA_H #define PLOT_FREQDATA_H 1 #include "common.h" #include "support.h" /* For plotting graphs */ #define LEFT 1 #define RIGHT 2 #endif xnec2c-3.4/src/radiation.c000066400000000000000000000444141257141547200154660ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /******* Translated to the C language by N. Kyriazis 20 Aug 2003 ****** Program NEC(input,tape5=input,output,tape11,tape12,tape13,tape14, tape15,tape16,tape20,tape21) Numerical Electromagnetics Code (NEC2) developed at Lawrence Livermore lab., Livermore, CA. (contact G. Burke at 415-422-8414 for problems with the NEC code. For problems with the vax implem- entation, contact J. Breakall at 415-422-8196 or E. Domning at 415 422-5936) file created 4/11/80. ***********Notice********** This computer code material was prepared as an account of work sponsored by the United States government. Neither the United States nor the United States Department Of Energy, nor any of their employees, nor any of their contractors, subcontractors, or their employees, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness or usefulness of any information, apparatus, product or process disclosed, or represents that its use would not infringe privately-owned rights. ***********************************************************************/ #include "radiation.h" #include "shared.h" /* Radiation pattern data */ /*-----------------------------------------------------------------------*/ /* ffld calculates the far zone radiated electric fields, */ /* the factor exp(j*k*r)/(r/lamda) not included */ void ffld( double thet, double phi, complex double *eth, complex double *eph ) { int k, i, ip, jump; double phx, phy, roz, rozs, thx, thy, thz, rox, roy; double tthet=0.0, darg=0.0, omega, el, sill, top, bot, a; double too, boo, b, c, d, rr, ri, arg, dr, rfl, rrz; complex double cix=CPLX_00, ciy=CPLX_00, ciz=CPLX_00, ccx=CPLX_00; complex double ccy=CPLX_00, ccz=CPLX_00, exa, cdp; complex double zrsin, rrv=CPLX_00, rrh=CPLX_00, rrv1=CPLX_00; complex double rrh1=CPLX_00, rrv2=CPLX_00, rrh2=CPLX_00; complex double tix, tiy, tiz, zscrn, ex=CPLX_00; complex double ey=CPLX_00, ez=CPLX_00, gx, gy, gz; phx= -sin( phi); phy= cos( phi); roz= cos( thet); rozs= roz; thx= roz* phy; thy= -roz* phx; thz= -sin( thet); rox= -thz* phy; roy= thz* phx; jump = FALSE; if( data.n != 0) { /* loop for structure image if any */ /* calculation of reflection coeffecients */ for( k = 0; k < gnd.ksymp; k++ ) { if( k != 0 ) { /* for perfect ground */ if( gnd.iperf == 1) { rrv=-CPLX_10; rrh=-CPLX_10; } else { /* for infinite planar ground */ zrsin= csqrt(1.0- gnd.zrati* gnd.zrati* thz* thz); rrv=-( roz- gnd.zrati* zrsin)/( roz+ gnd.zrati* zrsin); rrh=( gnd.zrati* roz- zrsin)/( gnd.zrati* roz+ zrsin); } /* if( gnd.iperf == 1) */ /* for the cliff problem, two reflection coefficients calculated */ if( gnd.ifar > 1) { rrv1= rrv; rrh1= rrh; tthet= tan( thet); if( gnd.ifar != 4) { zrsin= csqrt(1.0- gnd.zrati2* gnd.zrati2* thz* thz); rrv2=-( roz- gnd.zrati2* zrsin)/( roz+ gnd.zrati2* zrsin); rrh2=( gnd.zrati2* roz- zrsin)/( gnd.zrati2* roz+ zrsin); darg= -TP*2.0* gnd.ch* roz; } } /* if( gnd.ifar > 1) */ roz= -roz; ccx= cix; ccy= ciy; ccz= ciz; } /* if( k != 0 ) */ cix=CPLX_00; ciy=CPLX_00; ciz=CPLX_00; /* loop over structure segments */ for( i = 0; i < data.n; i++ ) { omega=-( rox* data.cab[i] + roy* data.sab[i]+ roz* data.salp[i]); el= PI* data.si[i]; sill= omega* el; top= el+ sill; bot= el- sill; if( fabs( omega) >= 1.0e-7) a=2.0* sin( sill)/ omega; else a=(2.0- omega* omega* el* el/3.0)* el; if( fabs( top) >= 1.0e-7) too= sin( top)/ top; else too=1.0- top* top/6.0; if( fabs( bot) >= 1.0e-7) boo= sin( bot)/ bot; else boo=1.0- bot* bot/6.0; b= el*( boo- too); c= el*( boo+ too); rr= a* crnt.air[i]+ b* crnt.bii[i]+ c* crnt.cir[i]; ri= a* crnt.aii[i]- b* crnt.bir[i]+ c* crnt.cii[i]; arg= TP*( data.x[i]* rox+ data.y[i]* roy+ data.z[i]* roz); if( (k != 1) || (gnd.ifar < 2) ) { /* summation for far field integral */ exa= cmplx( cos( arg), sin( arg))* cmplx( rr, ri); cix= cix+ exa* data.cab[i]; ciy= ciy+ exa* data.sab[i]; ciz= ciz+ exa* data.salp[i]; continue; } /* calculation of image contribution */ /* in cliff and ground screen problems */ /* specular point distance */ dr= data.z[i]* tthet; d= dr* phy+ data.x[i]; if( gnd.ifar == 2) { if(( gnd.cl- d) > 0.0) { rrv= rrv1; rrh= rrh1; } else { rrv= rrv2; rrh= rrh2; arg= arg+ darg; } } /* if( gnd.ifar == 2) */ else { d= sqrt( d*d + (data.y[i]-dr*phx)*(data.y[i]-dr*phx) ); if( gnd.ifar == 3) { if(( gnd.cl- d) > 0.0) { rrv= rrv1; rrh= rrh1; } else { rrv= rrv2; rrh= rrh2; arg= arg+ darg; } } /* if( gnd.ifar == 3) */ else { if(( gnd.scrwl- d) >= 0.0) { /* radial wire ground screen reflection coefficient */ d= d+ gnd.t2; zscrn= gnd.t1* d* log( d/ gnd.t2); zscrn=( zscrn* gnd.zrati)/( ETA* gnd.zrati+ zscrn); zrsin= csqrt(1.0- zscrn* zscrn* thz* thz); rrv=( roz+ zscrn* zrsin)/(- roz+ zscrn* zrsin); rrh=( zscrn* roz+ zrsin)/( zscrn* roz- zrsin); } /* if(( gnd.scrwl- d) < 0.0) */ else { if( gnd.ifar == 4) { rrv= rrv1; rrh= rrh1; } /* if( gnd.ifar == 4) */ else { if( gnd.ifar == 5) d= dr* phy+ data.x[i]; if(( gnd.cl- d) > 0.0) { rrv= rrv1; rrh= rrh1; } else { rrv= rrv2; rrh= rrh2; arg= arg+ darg; } /* if(( gnd.cl- d) > 0.0) */ } /* if( gnd.ifar == 4) */ } /* if(( gnd.scrwl- d) < 0.0) */ } /* if( gnd.ifar == 3) */ } /* if( gnd.ifar == 2) */ /* contribution of each image segment modified by */ /* reflection coef, for cliff and ground screen problems */ exa= cmplx( cos( arg), sin( arg))* cmplx( rr, ri); tix= exa* data.cab[i]; tiy= exa* data.sab[i]; tiz= exa* data.salp[i]; cdp=( tix* phx+ tiy* phy)*( rrh- rrv); cix= cix+ tix* rrv+ cdp* phx; ciy= ciy+ tiy* rrv+ cdp* phy; ciz= ciz- tiz* rrv; } /* for( i = 0; i < n; i++ ) */ if( k == 0 ) continue; /* calculation of contribution of * structure image for infinite ground */ if( gnd.ifar < 2) { cdp=( cix* phx+ ciy* phy)*( rrh- rrv); cix= ccx+ cix* rrv+ cdp* phx; ciy= ccy+ ciy* rrv+ cdp* phy; ciz= ccz- ciz* rrv; } else { cix= cix+ ccx; ciy= ciy+ ccy; ciz= ciz+ ccz; } } /* for( k=0; k < gnd.ksymp; k++ ) */ if( data.m > 0) jump = TRUE; else { *eth = ( cix * thx + ciy * thy + ciz * thz ) * CONST3; *eph = ( cix * phx + ciy * phy ) * CONST3; return; } } /* if( n != 0) */ if( ! jump ) { cix=CPLX_00; ciy=CPLX_00; ciz=CPLX_00; } /* electric field components */ roz= rozs; rfl=-1.0; for( ip = 0; ip < gnd.ksymp; ip++ ) { rfl= -rfl; rrz= roz* rfl; fflds( rox, roy, rrz, &crnt.cur[data.n], &gx, &gy, &gz); if( ip != 1 ) { ex= gx; ey= gy; ez= gz; continue; } if( gnd.iperf == 1) { gx= -gx; gy= -gy; gz= -gz; } else { rrv= csqrt(1.0- gnd.zrati* gnd.zrati* thz* thz); rrh= gnd.zrati* roz; rrh=( rrh- rrv)/( rrh+ rrv); rrv= gnd.zrati* rrv; rrv=-( roz- rrv)/( roz+ rrv); *eth=( gx* phx+ gy* phy)*( rrh- rrv); gx= gx* rrv+ *eth* phx; gy= gy* rrv+ *eth* phy; gz= gz* rrv; } /* if( gnd.iperf == 1) */ ex= ex+ gx; ey= ey+ gy; ez= ez- gz; } /* for( ip = 0; ip < gnd.ksymp; ip++ ) */ ex = ex + cix * CONST3; ey = ey + ciy * CONST3; ez = ez + ciz * CONST3; *eth = ex * thx + ey * thy + ez * thz; *eph = ex * phx + ey * phy; return; } /*-----------------------------------------------------------------------*/ /* calculates the xyz components of the electric */ /* field due to surface currents */ void fflds( double rox, double roy, double roz, complex double *scur, complex double *ex, complex double *ey, complex double *ez ) { double *xs, *ys, *zs, *s; int j, i, k; double arg; complex double ct; xs = data.px; ys = data.py; zs = data.pz; s = data.pbi; *ex=CPLX_00; *ey=CPLX_00; *ez=CPLX_00; i= -1; for( j = 0; j < data.m; j++ ) { i++; arg= TP*( rox* xs[i]+ roy* ys[i]+ roz* zs[i]); ct= cmplx( cos( arg)* s[i], sin( arg)* s[i]); k=3*j; *ex += scur[k ]* ct; *ey += scur[k+1]* ct; *ez += scur[k+2]* ct; } ct= rox* *ex+ roy* *ey+ roz* *ez; *ex= CONST4*( ct* rox- *ex); *ey= CONST4*( ct* roy- *ey); *ez= CONST4*( ct* roz- *ez); return; } /*-----------------------------------------------------------------------*/ /* gfld computes the radiated field including ground wave. */ void gfld( double rho, double phi, double rz, complex double *eth, complex double *epi, complex double *erd, complex double ux, int ksymp ) { int i, k; double b, r, thet, arg, phx, phy, rx, ry; double dx, dy, dz, rix, riy, rhs, rhp; double rhx, rhy, calp, cbet, sbet, cph; double sph, el, rfl, riz, thx, thy, thz; double rxyz, rnx, rny, rnz, omega, sill; double top, bot, a, too, boo, c, rr, ri; complex double cix, ciy, ciz, exa, erv; complex double ezv, erh, eph, ezh, ex, ey; r= sqrt( rho*rho+ rz*rz ); if( (ksymp == 1) || (cabs(ux) > .5) || (r > 1.0e5) ) { /* computation of space wave only */ if( rz >= 1.0e-20) thet= atan( rho/ rz); else thet= PI*.5; ffld( thet, phi, eth, epi); arg= -TP* r; exa= cmplx( cos( arg), sin( arg))/ r; *eth= *eth* exa; *epi= *epi* exa; *erd=CPLX_00; return; } /* if( (ksymp == 1) && (cabs(ux) > .5) && (r > 1.0e5) ) */ /* computation of space and ground waves. */ gwav.u= ux; gwav.u2= gwav.u* gwav.u; phx= -sin( phi); phy= cos( phi); rx= rho* phy; ry= -rho* phx; cix=CPLX_00; ciy=CPLX_00; ciz=CPLX_00; /* summation of field from individual segments */ for( i = 0; i < data.n; i++ ) { dx= data.cab[i]; dy= data.sab[i]; dz= data.salp[i]; rix= rx- data.x[i]; riy= ry- data.y[i]; rhs= rix* rix+ riy* riy; rhp= sqrt( rhs); if( rhp >= 1.0e-6) { rhx= rix/ rhp; rhy= riy/ rhp; } else { rhx=1.0; rhy=0.0; } calp=1.0- dz* dz; if( calp >= 1.0e-6) { calp= sqrt( calp); cbet= dx/ calp; sbet= dy/ calp; cph= rhx* cbet+ rhy* sbet; sph= rhy* cbet- rhx* sbet; } else { cph= rhx; sph= rhy; } el= PI* data.si[i]; rfl=-1.0; /* integration of (current)*(phase factor) * over segment and image for constant, * sine, and cosine current distributions */ for( k = 0; k < 2; k++ ) { rfl= -rfl; riz= rz- data.z[i]* rfl; rxyz= sqrt( rix* rix+ riy* riy+ riz* riz); rnx= rix/ rxyz; rny= riy/ rxyz; rnz= riz/ rxyz; omega=-( rnx* dx+ rny* dy+ rnz* dz* rfl); sill= omega* el; top= el+ sill; bot= el- sill; if( fabs( omega) >= 1.0e-7) a=2.0* sin( sill)/ omega; else a=(2.0- omega* omega* el* el/3.0)* el; if( fabs( top) >= 1.0e-7) too= sin( top)/ top; else too=1.0- top* top/6.0; if( fabs( bot) >= 1.0e-7) boo= sin( bot)/ bot; else boo=1.0- bot* bot/6.0; b= el*( boo- too); c= el*( boo+ too); rr= a* crnt.air[i] + b* crnt.bii[i]+ c* crnt.cir[i]; ri= a* crnt.aii[i] - b* crnt.bir[i]+ c* crnt.cii[i]; arg= TP*( data.x[i] * rnx+ data.y[i]* rny+ data.z[i]* rnz* rfl); exa= cmplx( cos( arg), sin( arg))* cmplx( rr, ri)/ TP; if( k != 1 ) { gwav.xx1= exa; gwav.r1= rxyz; gwav.zmh= riz; continue; } gwav.xx2= exa; gwav.r2= rxyz; gwav.zph= riz; } /* for( k = 0; k < 2; k++ ) */ /* call subroutine to compute the field */ /* of segment including ground wave. */ gwave( &erv, &ezv, &erh, &ezh, &eph); erh= erh* cph* calp+ erv* dz; eph= eph* sph* calp; ezh= ezh* cph* calp+ ezv* dz; ex= erh* rhx- eph* rhy; ey= erh* rhy+ eph* rhx; cix= cix+ ex; ciy= ciy+ ey; ciz= ciz+ ezh; } /* for( i = 0; i < n; i++ ) */ arg= -TP* r; exa= cmplx( cos( arg), sin( arg)); cix= cix* exa; ciy= ciy* exa; ciz= ciz* exa; rnx= rx/ r; rny= ry/ r; rnz= rz/ r; thx= rnz* phy; thy= -rnz* phx; thz= -rho/ r; *eth= cix* thx+ ciy* thy+ ciz* thz; *epi= cix* phx+ ciy* phy; *erd= cix* rnx+ ciy* rny+ ciz* rnz; return; } /*-----------------------------------------------------------------------*/ /* compute radiation pattern, gain, normalized gain */ void rdpat(void) { int kth, kph, isens; double prad, gcon, gcop; double phi, pha, thet; double tha, ethm2, ethm; double etha, ephm2, ephm, epha, tilta, emajr2, eminr2; double dfaz, axrat, dfaz2, cdfaz, tstor1=0.0, tstor2; double gnmn, stilta, gnmj, gnv, gnh, gtot; complex double eth, eph, erd; int idx, pol; /* Gain buffer and pol type index */ double gain; if( gnd.ifar != 4 ) { gnd.cl= fpat.clt/ data.wlam; gnd.ch= fpat.cht/ data.wlam; gnd.zrati2= csqrt(1.0/ cmplx( fpat.epsr2,- fpat.sig2* data.wlam*59.96)); } /* Calculate radiation pattern data */ /*** For applied voltage excitation ***/ if( (fpat.ixtyp == 0) || (fpat.ixtyp == 5) ) { gcop= data.wlam* data.wlam* 2.0* PI/(376.73* fpat.pinr); prad= fpat.pinr- fpat.ploss- fpat.pnlr; gcon= gcop; if( fpat.ipd != 0) gcon *= fpat.pinr/ prad; } /*** For elementary current source ***/ else if( fpat.ixtyp == 4) { fpat.pinr=394.510* calc_data.xpr6* calc_data.xpr6* data.wlam* data.wlam; gcop= data.wlam* data.wlam*2.0* PI/(376.73* fpat.pinr); prad= fpat.pinr- fpat.ploss- fpat.pnlr; gcon= gcop; if( fpat.ipd != 0) gcon= gcon* fpat.pinr/ prad; } /*** Incident field source ***/ else gcon=4.0* PI/(1.0+ calc_data.xpr6* calc_data.xpr6); phi = fpat.phis - fpat.dph; /*** Save radiation pattern data ***/ /* Prime max and min gains and index */ for( pol = 0; pol < NUM_POL; pol++ ) { rad_pattern[calc_data.fstep].max_gain[pol] = -10000.0; rad_pattern[calc_data.fstep].min_gain[pol] = 10000.0; rad_pattern[calc_data.fstep].max_gain_idx[pol] = 0; rad_pattern[calc_data.fstep].min_gain_idx[pol] = 0; rad_pattern[calc_data.fstep].max_gain_tht[pol] = 0; rad_pattern[calc_data.fstep].max_gain_phi[pol] = 0; } /* Signal new rad pattern data */ SetFlag( DRAW_NEW_RDPAT ); /* Step over theta and phi angles */ idx = 0; for( kph = 1; kph <= fpat.nph; kph++ ) { phi += fpat.dph; pha= phi* TA; thet= fpat.thets - fpat.dth; for( kth = 1; kth <= fpat.nth; kth++ ) { thet += fpat.dth; if( (gnd.ksymp == 2) && (thet > 90.01) && (gnd.ifar != 1) ) { if( rdpattern_window != NULL ) gtk_widget_destroy( rdpattern_window ); fprintf( stderr, "xnec2c: rdpat(): Theta > 90 deg with ground specified\n" "Please check RP card data and correct\n" ); stop( _("rdpat(): Theta > 90 deg with ground specified\n"\ "Please check RP card data and correct"), ERR_STOP ); } tha= thet* TA; if( gnd.ifar != 1) ffld( tha, pha, ð, &eph); else { gfld( fpat.rfld/data.wlam, pha, thet/data.wlam, ð, &eph, &erd, gnd.zrati, gnd.ksymp); } ethm2= creal( eth* conj( eth)); ethm= sqrt( ethm2); etha= cang( eth); ephm2= creal( eph* conj( eph)); ephm= sqrt( ephm2); epha= cang( eph); /* elliptical polarization calc. */ if( gnd.ifar != 1) { if( (ethm2 <= 1.0e-20) && (ephm2 <= 1.0e-20) ) { tilta=0.0; emajr2=0.0; eminr2=0.0; axrat=0.0; isens= 0; } else { dfaz= epha- etha; if( epha >= 0.0) dfaz2= dfaz-360.0; else dfaz2= dfaz+360.0; if( fabs(dfaz) > fabs(dfaz2) ) dfaz= dfaz2; cdfaz= cos( dfaz* TA); tstor1= ethm2- ephm2; tstor2=2.0* ephm* ethm* cdfaz; tilta=atan2( tstor2, tstor1)/2.0; stilta= sin( tilta); tstor1= tstor1* stilta* stilta; tstor2= tstor2* stilta* cos( tilta); emajr2= -tstor1+ tstor2+ ethm2; eminr2= tstor1- tstor2+ ephm2; if( eminr2 < 0.0) eminr2=0.0; axrat= sqrt( eminr2/ emajr2); if( axrat <= 1.0e-5) isens= 1; else if( dfaz <= 0.0) isens= 2; else isens= 3; } /* if( (ethm2 <= 1.0e-20) && (ephm2 <= 1.0e-20) ) */ gnmj= db10( gcon* emajr2); gnmn= db10( gcon* eminr2); gnv = db10( gcon* ethm2); gnh = db10( gcon* ephm2); gtot= db10( gcon* (ethm2+ ephm2) ); switch( fpat.inor ) { case 0: tstor1= gtot; break; case 1: tstor1= gnmj; break; case 2: tstor1= gnmn; break; case 3: tstor1= gnv; break; case 4: tstor1= gnh; break; case 5: tstor1= gtot; } /* Save rad pattern gains */ rad_pattern[calc_data.fstep].gtot[idx] = tstor1; /* Save axial ratio, tilt and pol sense */ if( isens == 2 ) rad_pattern[calc_data.fstep].axrt[idx] = -axrat; else rad_pattern[calc_data.fstep].axrt[idx] = axrat; rad_pattern[calc_data.fstep].tilt[idx] = tilta; rad_pattern[calc_data.fstep].sens[idx] = isens; /* Find and save max value of gain and direction */ for( pol = 0; pol < NUM_POL; pol++ ) { gain = rad_pattern[calc_data.fstep].gtot[idx] + Polarization_Factor( pol, calc_data.fstep, idx); if( gain < -999.99 ) gain = -999.99; /* Find and save max value of gain and direction */ if( rad_pattern[calc_data.fstep].max_gain[pol] < gain ) { rad_pattern[calc_data.fstep].max_gain[pol] = gain; rad_pattern[calc_data.fstep].max_gain_tht[pol] = thet; rad_pattern[calc_data.fstep].max_gain_phi[pol] = phi; rad_pattern[calc_data.fstep].max_gain_idx[pol] = idx; } /* Find and save min value of gain and buffer idx */ if( rad_pattern[calc_data.fstep].min_gain[pol] > gain ) { rad_pattern[calc_data.fstep].min_gain[pol] = gain; rad_pattern[calc_data.fstep].min_gain_idx[pol] = idx; } } /* for( pol = 0; pol < NUM_POL; pol++ ) */ idx++; continue; } /* if( gnd.ifar != 1) */ } /* for( kth = 1; kth <= fpat.nth; kth++ ) */ } /* for( kph = 1; kph <= fpat.nph; kph++ ) */ return; } /* void rdpat() */ /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/radiation.h000066400000000000000000000016561257141547200154740ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef RADIATION_H #define RADIATION_H 1 #include "common.h" #include "support.h" #define CONST3 (0.0-I*29.97922085) #endif xnec2c-3.4/src/shared.c000066400000000000000000000114601257141547200147550ustar00rootroot00000000000000/* * Shared global variables for nec2c.c */ #include "shared.h" /*------------------------------------------------------------------------*/ /* Editor windows */ GtkWidget *wire_editor = NULL, /* Wire designer window */ *arc_editor = NULL, /* Arc designer window */ *helix_editor = NULL, /* Helix designer window */ *patch_editor = NULL, /* Patch designer window */ *reflect_editor = NULL, /* Reflect design window */ *scale_editor = NULL, /* Scale designer window */ *cylinder_editor = NULL, /* Cylinder designer window */ *transform_editor = NULL, /* Transform designer window */ *gend_editor = NULL; /* Geom End designer window */ /* Command windows */ GtkWidget *excitation_command= NULL, /* Ecitation command editor */ *frequency_command = NULL, /* Frequency command editor */ *ground_command = NULL, /* Ground command editor (GN) */ *ground2_command = NULL, /* Ground command editor (GD) */ *loading_command = NULL, /* Loading command editor */ *network_command = NULL, /* Network command editor */ *txline_command = NULL, /* Tran Line command editor */ *radiation_command = NULL, /* Rad Pattern command editor */ *nearfield_command = NULL, /* Near Fields command editor */ *kernel_command = NULL, /* Thin-wire Kernel command editor */ *intrange_command = NULL, /* Interaction Range command editor */ *execute_command = NULL; /* Execute (EX card) command editor */ /* Frequency step entry */ GtkEntry *rdpattern_fstep_entry = NULL; /* Radiation pattern rotation, freq and zoom spin buttons */ GtkSpinButton *rotate_rdpattern = NULL, *incline_rdpattern = NULL, *rotate_structure = NULL, *incline_structure = NULL, *rdpattern_zoom = NULL, *structure_zoom = NULL, *rdpattern_frequency = NULL, *mainwin_frequency = NULL; projection_parameters_t rdpattern_proj_params, structure_proj_params; /* Scroll adjustments of geometry * and command treeview windows */ GtkAdjustment *geom_adjustment = NULL, *cmnd_adjustment = NULL; GtkTreeView *geom_treeview = NULL, *cmnd_treeview = NULL; /* Main, frequency plots and radation pattern windows */ GtkWidget *main_window = NULL, *freqplots_window = NULL, *rdpattern_window = NULL, *nec2_edit_window = NULL; /* Drawing area widgets */ GtkWidget *structure_drawingarea = NULL; GtkWidget *freqplots_drawingarea = NULL; GtkWidget *rdpattern_drawingarea = NULL; /* Motion event handler id */ gulong rdpattern_motion_handler; /* Dialog widgets */ GtkWidget *quit_dialog = NULL; GtkWidget *animate_dialog = NULL; /* Frequency step entry widget */ GtkEntry *structure_fstep_entry = NULL; /* Motion event handler id */ gulong structure_motion_handler; /* Commands between parent and child processes */ char *fork_commands[] = FORK_CMNDS; /* Forked process data */ forked_proc_data_t **forked_proc_data = NULL; /* Number of forked child processes */ int num_child_procs = 0; /* Program forked flag */ gboolean FORKED = FALSE; /* Used to kill window deleted by user */ GtkWidget *kill_window = NULL; /* Animation timeout callback tag */ guint anim_tag = 0; /* Pixmap for drawing structures */ GdkPixmap *structure_pixmap = NULL; int structure_pixmap_width, structure_pixmap_height; /* Pixmap for drawing plots */ GdkPixmap *freqplots_pixmap = NULL; int freqplots_pixmap_width, freqplots_pixmap_height; /* Pixmap for drawing radiation patterns */ GdkPixmap *rdpattern_pixmap = NULL; int rdpattern_pixmap_width, rdpattern_pixmap_height; /* Frequency loop idle function tag */ guint floop_tag = 0; /* Radiation pattern data */ rad_pattern_t *rad_pattern = NULL; /* Near E/H field data */ near_field_t near_field; /* Segments for drawing structure */ GdkSegment *structure_segs = NULL; /* Global tag number for geometry editors */ gint gbl_tag_num = 0; GtkWidget *error_dialog = NULL; /* Tree list stores */ GtkListStore *cmnt_store = NULL, *geom_store = NULL, *cmnd_store = NULL; complex double *cm = NULL; /* Needed data */ impedance_data_t impedance_data; /* Data for various calculations */ calc_data_t calc_data; data_t data; /* Magnitude of seg/patch current/charge */ double *cmag = NULL, *ct1m = NULL, *ct2m = NULL; /* common /crnt/ */ crnt_t crnt; /* common /dataj/ */ dataj_t dataj; /* pointers to input/output files */ FILE *input_fp = NULL; /* Input file name */ char infile[81] = ""; /* common /fpat/ */ fpat_t fpat; /*common /ggrid/ */ ggrid_t ggrid; /* common /gnd/ */ gnd_t gnd; /* common /gwav/ */ gwav_t gwav; /* common /incom/ */ incom_t incom; /* common /matpar/ */ matpar_t matpar; /* common /netcx/ */ netcx_t netcx; /* common /save/ */ save_t save; /* common /segj/ */ segj_t segj; /* common /smat/ */ smat_t smat; /* common /vsorc/ */ vsorc_t vsorc; /* common /zload/ */ zload_t zload; /*------------------------------------------------------------------------*/ xnec2c-3.4/src/shared.h000066400000000000000000000115761257141547200147720ustar00rootroot00000000000000#ifndef SHARED_H #define SHARED_H 1 #include "common.h" #include "fork.h" /*------------------------------------------------------------------------*/ /* Editor windows */ extern GtkWidget *wire_editor, /* Wire designer window */ *arc_editor, /* Arc designer window */ *helix_editor, /* Helix designer window */ *patch_editor, /* Patch designer window */ *reflect_editor, /* Reflect design window */ *scale_editor, /* Scale designer window */ *cylinder_editor, /* Cylinder designer window */ *transform_editor, /* Transform designer window */ *gend_editor; /* Geom End designer window */ /* Command windows */ extern GtkWidget *excitation_command, /* Ecitation command editor */ *frequency_command, /* Frequency command editor */ *ground_command, /* Ground command editor (GN) */ *ground2_command, /* Ground command editor (GD) */ *loading_command, /* Loading command editor */ *network_command, /* Network command editor */ *txline_command, /* Tran Line command editor */ *radiation_command, /* Rad Pattern command editor */ *nearfield_command, /* Near Fields command editor */ *kernel_command, /* Thin-wire Kernel command editor */ *intrange_command, /* Interaction Range command editor */ *execute_command ; /* Execute (EX card) command editor */ /* Frequency step entry */ extern GtkEntry *rdpattern_fstep_entry ; /* Radiation pattern rotation, freq and zoom spin buttons */ extern GtkSpinButton *rotate_rdpattern, *incline_rdpattern, *rotate_structure, *incline_structure, *rdpattern_frequency, *rdpattern_zoom, *structure_zoom; /* Motion event handler id */ extern gulong structure_motion_handler; /* Commands between parent and child processes */ extern char *fork_commands[]; /* Forked process data */ extern forked_proc_data_t **forked_proc_data; extern projection_parameters_t rdpattern_proj_params, structure_proj_params; /* Number of forked child processes */ extern int num_child_procs; /* Program forked flag */ extern gboolean FORKED; /* Main window freq spinbutton */ extern GtkSpinButton *mainwin_frequency; /* Scroll adjustments of geometry * and command treeview windows */ extern GtkAdjustment *geom_adjustment, *cmnd_adjustment ; extern GtkTreeView *geom_treeview, *cmnd_treeview ; /* Main, frequency plots and radation pattern windows */ extern GtkWidget *main_window, *freqplots_window, *rdpattern_window, *nec2_edit_window ; /* Drawing area widgets */ extern GtkWidget *structure_drawingarea ; extern GtkWidget *freqplots_drawingarea ; extern GtkWidget *rdpattern_drawingarea ; /* Motion event handler id */ extern gulong rdpattern_motion_handler; /* Dialog widgets */ extern GtkWidget *quit_dialog ; extern GtkWidget *animate_dialog ; /* Used to kill window deleted by user */ extern GtkWidget *kill_window ; /* Animation timeout callback tag */ extern guint anim_tag; /* Pixmap for drawing structures */ extern GdkPixmap *structure_pixmap ; extern int structure_pixmap_width, structure_pixmap_height; /* Pixmap for drawing plots */ extern GdkPixmap *freqplots_pixmap ; extern int freqplots_pixmap_width, freqplots_pixmap_height; /* Pixmap for drawing radiation patterns */ extern GdkPixmap *rdpattern_pixmap ; extern int rdpattern_pixmap_width, rdpattern_pixmap_height; /* Frequency loop idle function tag */ extern guint floop_tag; /* Radiation pattern data */ extern rad_pattern_t *rad_pattern ; /* Near E/H field data */ extern near_field_t near_field; /* Segments for drawing structure */ extern GdkSegment *structure_segs ; /* Global tag number for geometry editors */ extern gint gbl_tag_num; extern GtkWidget *error_dialog ; /* Tree list stores */ extern GtkListStore *cmnt_store, *geom_store, *cmnd_store ; extern data_t data; extern complex double *cm; /* Frequency step entry widget */ extern GtkEntry *structure_fstep_entry; /* Needed data */ extern impedance_data_t impedance_data; /* Data for various calculations */ extern calc_data_t calc_data; /* Magnitude of seg/patch current/charge */ extern double *cmag, *ct1m, *ct2m; /* common /crnt/ */ extern crnt_t crnt; /* common /dataj/ */ extern dataj_t dataj; /* common /data/ */ extern data_t data; /* pointers to input/output files */ extern FILE *input_fp, *output_fp, *plot_fp; /* Input file name */ extern char infile[81]; /* common /fpat/ */ extern fpat_t fpat; /*common /ggrid/ */ extern ggrid_t ggrid; /* common /gnd/ */ extern gnd_t gnd; /* common /gwav/ */ extern gwav_t gwav; /* common /incom/ */ extern incom_t incom; /* common /matpar/ */ extern matpar_t matpar; /* common /netcx/ */ extern netcx_t netcx; /* common /save/ */ extern save_t save; /* common /segj/ */ extern segj_t segj; /* common /smat/ */ extern smat_t smat; /* common /vsorc/ */ extern vsorc_t vsorc; /* common /zload/ */ extern zload_t zload; #define MOTION_EVENTS_COUNT 8 /*------------------------------------------------------------------------*/ #endif xnec2c-3.4/src/somnec.c000066400000000000000000000560001257141547200147720ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* last change: pgm 8 nov 2000 1:04 pm program somnec(input,output,tape21) program to generate nec interpolation grids for fields due to ground. field components are computed by numerical evaluation of modified sommerfeld integrals. somnec2d is a double precision version of somnec for use with nec2d. an alternate version (somnec2sd) is also provided in which computation is in single precision but the output file is written in double precision for use with nec2d. somnec2sd runs about twic as fast as the full double precision somnec2d. the difference between nec2d results using a for021 file from this code rather than from somnec2sd was insignficant in the cases tested. changes made by j bergervoet, 31-5-95: parameter 0.0 --> 0.0d0 in calling of routine test status of output files set to 'unknown' */ #include "somnec.h" #include "shared.h" /* common /evlcom/ */ static int jh; static double ck2, ck2sq, tkmag, tsmag, ck1r, zph, rho; static complex double ct1, ct2, ct3, ck1, ck1sq, cksm; /* common /cntour/ */ static complex double a, b; /*-----------------------------------------------------------------------*/ /* This is the "main" of somnec */ void somnec( double epr, double sig, double fmhz ) { int k, nth, ith, irs, ir, nr; double wlam, dr, dth=0.0, r, rk, thet, tfac1, tfac2; complex double erv, ezv, erh, eph, cl1, cl2, con; static gboolean first_call = TRUE; if( first_call ) { first_call = FALSE; /* Allocate some buffers */ size_t mreq = sizeof(complex double) * 11 * 10 * 4; mem_alloc( (void **)&ggrid.ar1, mreq, "in somnec.c"); mreq = sizeof(complex double) * 17 * 5 * 4; mem_alloc( (void **)&ggrid.ar2, mreq, "in somnec.c"); mreq = sizeof(complex double) * 9 * 8 * 4; mem_alloc( (void **)&ggrid.ar3, mreq, "in somnec.c"); mreq = sizeof(int) * 3; mem_alloc( (void **)&ggrid.nxa, mreq, "in somnec.c"); mem_alloc( (void **)&ggrid.nya, mreq, "in somnec.c"); mreq = sizeof(double) * 3; mem_alloc( (void **)&ggrid.dxa, mreq, "in somnec.c"); mem_alloc( (void **)&ggrid.dya, mreq, "in somnec.c"); mem_alloc( (void **)&ggrid.xsa, mreq, "in somnec.c"); mem_alloc( (void **)&ggrid.ysa, mreq, "in somnec.c"); /* Initialize ground grid parameters for somnec */ ggrid.nxa[0] = 11; ggrid.nxa[1] = 17; ggrid.nxa[2] = 9; ggrid.nya[0] = 10; ggrid.nya[1] = 5; ggrid.nya[2] = 8; ggrid.dxa[0] = .02; ggrid.dxa[1] = .05; ggrid.dxa[2] = .1; ggrid.dya[0] = .1745329252; ggrid.dya[1] = .0872664626; ggrid.dya[2] = .1745329252; ggrid.xsa[0] = 0.0; ggrid.xsa[1] = .2; ggrid.xsa[2] = .2; ggrid.ysa[0] = 0.0; ggrid.ysa[1] = 0.0; ggrid.ysa[2] = .3490658504; } /* if( first_call ) */ if(sig >= 0.0) { wlam=CVEL/fmhz; ggrid.epscf=cmplx(epr,-sig*wlam*59.96); } else ggrid.epscf=cmplx(epr,sig); ck2=TP; ck2sq=ck2*ck2; /* sommerfeld integral evaluation uses exp(-jwt), * nec uses exp(+jwt), hence need conjg(ggrid.epscf). * conjugate of fields occurs in subroutine evlua. */ ck1sq=ck2sq*conj(ggrid.epscf); ck1=csqrt(ck1sq); ck1r=creal(ck1); tkmag=100.0*cabs(ck1); tsmag=100.0*creal( ck1*conj(ck1) ); cksm=ck2sq/(ck1sq+ck2sq); ct1=.5*(ck1sq-ck2sq); erv=ck1sq*ck1sq; ezv=ck2sq*ck2sq; ct2=.125*(erv-ezv); erv *= ck1sq; ezv *= ck2sq; ct3=.0625*(erv-ezv); /* loop over 3 grid regions */ for( k = 0; k < 3; k++ ) { nr=ggrid.nxa[k]; nth=ggrid.nya[k]; dr=ggrid.dxa[k]; dth=ggrid.dya[k]; r=ggrid.xsa[k]-dr; irs=1; if(k == 0) { r=ggrid.xsa[k]; irs=2; } /* loop over r. (r=sqrt(rho**2 + (z+h)**2)) */ for( ir = irs-1; ir < nr; ir++ ) { r += dr; thet = ggrid.ysa[k]-dth; /* loop over theta. (theta=atan((z+h)/rho)) */ for( ith = 0; ith < nth; ith++ ) { thet += dth; rho=r*cos(thet); zph=r*sin(thet); if(rho < 1.0e-7) rho=1.0e-8; if(zph < 1.0e-7) zph=0.0; evlua( &erv, &ezv, &erh, &eph ); rk=ck2*r; con=-CONST1*r/cmplx(cos(rk),-sin(rk)); switch( k ) { case 0: ggrid.ar1[ir+ith*11+ 0]=erv*con; ggrid.ar1[ir+ith*11+110]=ezv*con; ggrid.ar1[ir+ith*11+220]=erh*con; ggrid.ar1[ir+ith*11+330]=eph*con; break; case 1: ggrid.ar2[ir+ith*17+ 0]=erv*con; ggrid.ar2[ir+ith*17+ 85]=ezv*con; ggrid.ar2[ir+ith*17+170]=erh*con; ggrid.ar2[ir+ith*17+255]=eph*con; break; case 2: ggrid.ar3[ir+ith*9+ 0]=erv*con; ggrid.ar3[ir+ith*9+ 72]=ezv*con; ggrid.ar3[ir+ith*9+144]=erh*con; ggrid.ar3[ir+ith*9+216]=eph*con; } /* switch( k ) */ } /* for( ith = 0; ith < nth; ith++ ) */ } /* for( ir = irs-1; ir < nr; ir++; ) */ } /* for( k = 0; k < 3; k++; ) */ /* fill grid 1 for r equal to zero. */ cl2=-CONST4*(ggrid.epscf-1.0)/(ggrid.epscf+1.0); cl1=cl2/(ggrid.epscf+1.0); ezv=ggrid.epscf*cl1; thet=-dth; nth=ggrid.nya[0]; for( ith = 0; ith < nth; ith++ ) { thet += dth; if( (ith+1) != nth ) { tfac2=cos(thet); tfac1=(1.0-sin(thet))/tfac2; tfac2=tfac1/tfac2; erv=ggrid.epscf*cl1*tfac1; erh=cl1*(tfac2-1.0)+cl2; eph=cl1*tfac2-cl2; } else { erv=0.0; erh=cl2-.5*cl1; eph=-erh; } ggrid.ar1[0+ith*11+ 0]=erv; ggrid.ar1[0+ith*11+110]=ezv; ggrid.ar1[0+ith*11+220]=erh; ggrid.ar1[0+ith*11+330]=eph; } return; } /*-----------------------------------------------------------------------*/ /* bessel evaluates the zero-order bessel function */ /* and its derivative for complex argument z. */ void bessel( complex double z, complex double *j0, complex double *j0p ) { int k, ib; static int *m = NULL, init = FALSE; static double *a1 = NULL, *a2 = NULL; double zms; complex double p0z, p1z, q0z, q1z, zi, zi2, zk, cz, sz; complex double j0x=CPLX_00, j0px=CPLX_00; /* initialization of constants */ if( !init ) { int i; size_t mreq = 101 * sizeof(double); mem_alloc( (void **)&m, mreq, "in somnec.c"); mem_alloc( (void **)&a1, mreq, "in somnec.c"); mem_alloc( (void **)&a2, mreq, "in somnec.c"); for( k = 1; k <= 25; k++ ) { i = k-1; a1[i]=-.25/(k*k); a2[i]=1.0/(k+1.0); } for( i = 1; i <= 101; i++ ) { double tst=1.0; for( k = 0; k < 24; k++ ) { init = k; tst *= -i*a1[k]; if( tst < 1.0e-6 ) break; } m[i-1] = init+1; } /* for( i = 1; i<= 101; i++ ) */ init = TRUE; } /* if(init == 0) */ zms=creal( z*conj(z) ); if(zms <= 1.0e-12) { *j0=CPLX_10; *j0p=-.5*z; return; } ib=0; if(zms <= 37.21) { int iz, miz; if(zms > 36.0) ib=1; /* series expansion */ iz=(int)zms; miz=m[iz]; *j0=CPLX_10; *j0p=*j0; zk=*j0; zi=z*z; for( k = 0; k < miz; k++ ) { zk *= a1[k]*zi; *j0 += zk; *j0p += a2[k]*zk; } *j0p *= -.5*z; if(ib == 0) return; j0x=*j0; j0px=*j0p; } /* asymptotic expansion */ zi=1.0/z; zi2=zi*zi; p0z=1.0+(P20*zi2-P10)*zi2; p1z=1.0+(P11-P21*zi2)*zi2; q0z=(Q20*zi2-Q10)*zi; q1z=(Q11-Q21*zi2)*zi; zk=cexp(CPLX_01*(z-POF)); zi2=1.9/zk; cz=.5*(zk+zi2); sz=CPLX_01*.5*(zi2-zk); zk=C3*csqrt(zi); *j0=zk*(p0z*cz-q0z*sz); *j0p=-zk*(p1z*sz+q1z*cz); if(ib == 0) return; zms=cos((sqrt(zms)-6.0)*PI10); *j0=.5*(j0x*(1.0+zms)+ *j0*(1.0-zms)); *j0p=.5*(j0px*(1.0+zms)+ *j0p*(1.0-zms)); return; } /*-----------------------------------------------------------------------*/ /* evlua controls the integration contour in the complex */ /* lambda plane for evaluation of the sommerfeld integrals */ void evlua( complex double *erv, complex double *ezv, complex double *erh, complex double *eph ) { int i, jump; static double del, slope, rmis; static complex double cp1, cp2, cp3, bk, delta, delta2; static complex double *sum = NULL, *ans = NULL; static gboolean first_call = TRUE; if( first_call ) { first_call = FALSE; size_t mreq = 6 * sizeof(complex double); mem_alloc( (void **)&sum, mreq, "in somnec.c"); mem_alloc( (void **)&ans, mreq, "in somnec.c"); } del=zph; if( rho > del ) del=rho; if(zph >= 2.0*rho) { /* bessel function form of sommerfeld integrals */ jh=0; a=CPLX_00; del=1.0/del; if( del > tkmag) { b=cmplx(0.1*tkmag,-0.1*tkmag); rom1(6,sum,2); a=b; b=cmplx(del,-del); rom1 (6,ans,2); for( i = 0; i < 6; i++ ) sum[i] += ans[i]; } else { b=cmplx(del,-del); rom1(6,sum,2); } delta=PTP*del; gshank(b,delta,ans,6,sum,0,b,b); ans[5] *= ck1; /* conjugate since nec uses exp(+jwt) */ *erv=conj(ck1sq*ans[2]); *ezv=conj(ck1sq*(ans[1]+ck2sq*ans[4])); *erh=conj(ck2sq*(ans[0]+ans[5])); *eph=-conj(ck2sq*(ans[3]+ans[5])); return; } /* if(zph >= 2.0*rho) */ /* hankel function form of sommerfeld integrals */ jh=1; cp1=cmplx(0.0, 0.4*ck2); cp2=cmplx(0.6*ck2, -0.2*ck2); cp3=cmplx(1.02*ck2,-0.2*ck2); a=cp1; b=cp2; rom1(6,sum,2); a=cp2; b=cp3; rom1(6,ans,2); for( i = 0; i < 6; i++ ) sum[i]=-(sum[i]+ans[i]); /* path from imaginary axis to -infinity */ if(zph > .001*rho) slope=rho/zph; else slope=1000.0; del=PTP/del; delta=cmplx(-1.0,slope)*del/sqrt(1.0+slope*slope); delta2=-conj(delta); gshank(cp1,delta,ans,6,sum,0,bk,bk); rmis=rho*(creal(ck1)-ck2); jump = FALSE; if( (rmis >= 2.0*ck2) && (rho >= 1.0e-10) ) { if(zph >= 1.0e-10) { bk=cmplx(-zph,rho)*(ck1-cp3); rmis=-creal(bk)/fabs(cimag(bk)); if(rmis > 4.0*rho/zph) jump = TRUE; } if( ! jump ) { /* integrate up between branch cuts, then to + infinity */ cp1=ck1-(0.1+I*0.2); cp2=cp1+0.2; bk=cmplx(0.0,del); gshank(cp1,bk,sum,6,ans,0,bk,bk); a=cp1; b=cp2; rom1(6,ans,1); for( i = 0; i < 6; i++ ) ans[i] -= sum[i]; gshank(cp3,bk,sum,6,ans,0,bk,bk); gshank(cp2,delta2,ans,6,sum,0,bk,bk); } jump = TRUE; } /* if( (rmis >= 2.0*ck2) || (rho >= 1.0e-10) ) */ else jump = FALSE; if( ! jump ) { /* integrate below branch points, then to + infinity */ for( i = 0; i < 6; i++ ) sum[i]=-ans[i]; rmis=creal(ck1)*1.01; if( (ck2+1.0) > rmis ) rmis=ck2+1.0; bk=cmplx(rmis,0.99*cimag(ck1)); delta=bk-cp3; delta *= del/cabs(delta); gshank(cp3,delta,ans,6,sum,1,bk,delta2); } /* if( ! jump ) */ ans[5] *= ck1; /* conjugate since nec uses exp(+jwt) */ *erv=conj(ck1sq*ans[2]); *ezv=conj(ck1sq*(ans[1]+ck2sq*ans[4])); *erh=conj(ck2sq*(ans[0]+ans[5])); *eph=-conj(ck2sq*(ans[3]+ans[5])); return; } /*-----------------------------------------------------------------------*/ /* fbar is sommerfeld attenuation function for numerical distance p */ void fbar( complex double p, complex double *fbar ) { int i, minus; double tms, sms; complex double z, zs, sum, pow, term; z= CPLX_01* csqrt( p); if( cabs( z) <= 3.0) { /* series expansion */ zs= z* z; sum= z; pow= z; for( i = 1; i <= 100; i++ ) { pow= -pow* zs/ (double)i; term= pow/(2.0* i+1.0); sum= sum+ term; tms= creal( term* conj( term)); sms= creal( sum* conj( sum)); if( tms/sms < ACCS) break; } *fbar=1.0-(1.0- sum* TOSP)* z* cexp( zs)* SP; } /* if( cabs( z) <= 3.0) */ /* asymptotic expansion */ if( creal( z) < 0.0) { minus=1; z= -z; } else minus=0; zs=0.5/( z* z); sum=CPLX_00; term=CPLX_10; for( i = 1; i <= 6; i++ ) { term = -term*(2.0*i -1.0)* zs; sum += term; } if( minus == 1) sum -= 2.0* SP* z* cexp( z* z); *fbar= -sum; } /*-----------------------------------------------------------------------*/ /* gshank integrates the 6 sommerfeld integrals from start to */ /* infinity (until convergence) in lambda. at the break point, bk, */ /* the step increment may be changed from dela to delb. shank's */ /* algorithm to accelerate convergence of a slowly converging series */ /* is used */ void gshank( complex double start, complex double dela, complex double *sum, int nans, complex double *seed, int ibk, complex double bk, complex double delb ) { int ibx, j, i, jm, intx, inx, brk=0, idx; static double rbk, amg, den, denm; complex double a1, a2, as1, as2, del, aa; static complex double *q1 = NULL, *q2 = NULL; static complex double *ans1 = NULL, *ans2 = NULL; static gboolean first_call = TRUE; if( first_call ) { first_call = FALSE; size_t mreq = 6 * 20 * sizeof(complex double); mem_alloc( (void **)&q1, mreq, "in somnec.c"); mem_alloc( (void **)&q2, mreq, "in somnec.c"); mreq = 6 * sizeof(complex double); mem_alloc( (void **)&ans1, mreq, "in somnec.c"); mem_alloc( (void **)&ans2, mreq, "in somnec.c"); } rbk=creal(bk); del=dela; if(ibk == 0) ibx=1; else ibx=0; for( i = 0; i < nans; i++ ) ans2[i]=seed[i]; b=start; for( intx = 1; intx <= MAXH; intx++ ) { inx=intx-1; a=b; b += del; if( (ibx == 0) && (creal(b) >= rbk) ) { /* hit break point. reset seed and start over. */ ibx=1; b=bk; del=delb; rom1(nans,sum,2); for( i = 0; i < nans; i++ ) ans2[i] += sum[i]; intx = 0; continue; } /* if( (ibx == 0) && (creal(b) >= rbk) ) */ rom1(nans,sum,2); for( i = 0; i < nans; i++ ) ans1[i] = ans2[i]+sum[i]; a=b; b += del; if( (ibx == 0) && (creal(b) >= rbk) ) { /* hit break point. reset seed and start over. */ ibx=2; b=bk; del=delb; rom1(nans,sum,2); for( i = 0; i < nans; i++ ) ans2[i] = ans1[i]+sum[i]; intx = 0; continue; } /* if( (ibx == 0) && (creal(b) >= rbk) ) */ rom1(nans,sum,2); for( i = 0; i < nans; i++ ) ans2[i]=ans1[i]+sum[i]; den=0.0; for( i = 0; i < nans; i++ ) { as1=ans1[i]; as2=ans2[i]; if(intx >= 2) { for( j = 1; j < intx; j++ ) { jm=j-1; idx = i + 6*jm; aa=q2[idx]; a1=q1[idx]+as1-2.0*aa; if( (creal(a1) != 0.0) || (cimag(a1) != 0.0) ) { a2=aa-q1[idx]; a1=q1[idx]-a2*a2/a1; } else a1=q1[idx]; a2=aa+as2-2.0*as1; if( (creal(a2) != 0.0) || (cimag(a2) != 0.0) ) a2=aa-(as1-aa)*(as1-aa)/a2; else a2=aa; q1[idx]=as1; q2[idx]=as2; as1=a1; as2=a2; } /* for( j = 1; i < intx; i++ ) */ } /* if(intx >= 2) */ idx = i + 6*(intx-1); q1[idx]=as1; q2[idx]=as2; amg=fabs(creal(as2))+fabs(cimag(as2)); if(amg > den) den=amg; } /* for( i = 0; i < nans; i++ ) */ denm=1.0e-3*den*CRIT; jm=intx-3; if(jm < 1) jm=1; for( j = jm-1; j < intx; j++ ) { brk = FALSE; for( i = 0; i < nans; i++ ) { idx = i +6*j; a1=q2[idx]; den=(fabs(creal(a1))+fabs(cimag(a1)))*CRIT; if(den < denm) den=denm; a1=q1[idx]-a1; amg=fabs(creal(a1)+fabs(cimag(a1))); if(amg > den) { brk = TRUE; break; } } /* for( i = 0; i < nans; i++ ) */ if( brk ) break; } /* for( j = jm-1; j < intx; j++ ) */ if( ! brk ) { for( i = 0; i < nans; i++ ) { idx = i + 6*inx; sum[i]=0.5*(q1[idx]+q2[idx]); } return; } } /* for( intx = 1; intx <= maxh; intx++ ) */ /* No convergence */ fprintf( stderr, "xnec2c: gshank(): No convergence\n" ); stop( _("gshank(): No convergencn"), ERR_STOP ); return; } /*-----------------------------------------------------------------------*/ /* hankel evaluates hankel function of the first kind, */ /* order zero, and its derivative for complex argument z */ void hankel( complex double z, complex double *h0, complex double *h0p ) { int k, ib; static int *m = NULL, init = FALSE; static double *a1 = NULL, *a2 = NULL, *a3 = NULL; static double *a4, psi, tst, zms; complex double clogz, j0, j0p, p0z, p1z, q0z, q1z; complex double y0 = CPLX_00, y0p = CPLX_00, zi, zi2, zk; static gboolean first_call = TRUE; if( first_call ) { first_call = FALSE; size_t mreq = 101 * sizeof(int); mem_alloc( (void **)&m, mreq, "in somnec.c"); mreq = 25 * sizeof(double); mem_alloc( (void **)&a1, mreq, "in somnec.c"); mem_alloc( (void **)&a2, mreq, "in somnec.c"); mem_alloc( (void **)&a3, mreq, "in somnec.c"); mem_alloc( (void **)&a4, mreq, "in somnec.c"); } /* initialization of constants */ if( ! init ) { int i; psi=-GAMMA; for( k = 1; k <= 25; k++ ) { i = k-1; a1[i]=-0.25/(k*k); a2[i]=1.0/(k+1.0); psi += 1.0/k; a3[i]=psi+psi; a4[i]=(psi+psi+1.0/(k+1.0))/(k+1.0); } for( i = 1; i <= 101; i++ ) { tst=1.0; for( k = 0; k < 24; k++ ) { init = k; tst *= -i*a1[k]; if(tst*a3[k] < 1.0e-6) break; } m[i-1]=init+1; } init = TRUE; } /* if( ! init ) */ zms=creal( z*conj(z) ); if(zms == 0.0) { fprintf( stderr, "xnec2c: hankel(): Hankel not valid for z = 0\n" ); stop( _("hankel(): Hankel not valid for z = 0"), ERR_STOP ); } ib=0; if(zms <= 16.81) { int iz, miz; if(zms > 16.0) ib=1; /* series expansion */ iz=(int)zms; miz=m[iz]; j0=CPLX_10; j0p=j0; y0=CPLX_00; y0p=y0; zk=j0; zi=z*z; for( k = 0; k < miz; k++ ) { zk *= a1[k]*zi; j0 += zk; j0p += a2[k]*zk; y0 += a3[k]*zk; y0p += a4[k]*zk; } j0p *= -0.5*z; clogz=clog(0.5*z); y0=(2.0*j0*clogz-y0)/PI+C2; y0p=(2.0/z+2.0*j0p*clogz+0.5*y0p*z)/PI+C1*z; *h0=j0+CPLX_01*y0; *h0p=j0p+CPLX_01*y0p; if(ib == 0) return; y0=*h0; y0p=*h0p; } /* if(zms <= 16.81) */ /* asymptotic expansion */ zi=1.0/z; zi2=zi*zi; p0z=1.0+(P20*zi2-P10)*zi2; p1z=1.0+(P11-P21*zi2)*zi2; q0z=(Q20*zi2-Q10)*zi; q1z=(Q11-Q21*zi2)*zi; zk=cexp(CPLX_01*(z-POF))*csqrt(zi)*C3; *h0=zk*(p0z+CPLX_01*q0z); *h0p=CPLX_01*zk*(p1z+CPLX_01*q1z); if(ib == 0) return; zms=cos((sqrt(zms)-4.0)*31.41592654); *h0=0.5*(y0*(1.0+zms)+ *h0*(1.0-zms)); *h0p=0.5*(y0p*(1.0+zms)+ *h0p*(1.0-zms)); return; } /*-----------------------------------------------------------------------*/ /* compute integration parameter xlam=lambda from parameter t. */ void lambda( double t, complex double *xlam, complex double *dxlam ) { *dxlam=b-a; *xlam=a+*dxlam*t; return; } /*-----------------------------------------------------------------------*/ /* rom1 integrates the 6 sommerfeld integrals from a to b in lambda. */ /* the method of variable interval width romberg integration is used. */ void rom1( int n, complex double *sum, int nx ) { int jump, lstep, nogo, i, ns, nt; static double z, ze, s, ep, zend, dz=0.0, dzot=0.0, tr, ti; static complex double t00, t11, t02; static complex double *g1 = NULL, *g2 = NULL; static complex double *g3 = NULL, *g4 = NULL; static complex double *g5 = NULL, *t01 = NULL; static complex double *t10 = NULL, *t20 = NULL; static gboolean first_call = TRUE; if( first_call ) { first_call = FALSE; size_t mreq = 6 * sizeof(complex double); mem_alloc( (void **)&g1, mreq, "in somnec.c"); mem_alloc( (void **)&g2, mreq, "in somnec.c"); mem_alloc( (void **)&g3, mreq, "in somnec.c"); mem_alloc( (void **)&g4, mreq, "in somnec.c"); mem_alloc( (void **)&g5, mreq, "in somnec.c"); mem_alloc( (void **)&t01, mreq, "in somnec.c"); mem_alloc( (void **)&t10, mreq, "in somnec.c"); mem_alloc( (void **)&t20, mreq, "in somnec.c"); } lstep=0; z=0.0; ze=1.0; s=1.0; ep=s/(1.0e4*NM); zend=ze-ep; for( i = 0; i < n; i++ ) sum[i]=CPLX_00; ns=nx; nt=0; saoa(z,g1); jump = FALSE; while( TRUE ) { if( ! jump ) { dz=s/ns; if( (z+dz) > ze ) { dz=ze-z; if( dz <= ep ) return; } dzot=dz*.5; saoa(z+dzot,g3); saoa(z+dz,g5); } /* if( ! jump ) */ nogo=FALSE; for( i = 0; i < n; i++ ) { t00=(g1[i]+g5[i])*dzot; t01[i]=(t00+dz*g3[i])*.5; t10[i]=(4.0*t01[i]-t00)/3.0; /* test convergence of 3 point romberg result */ test( creal(t01[i]), creal(t10[i]), &tr, cimag(t01[i]), cimag(t10[i]), &ti, 0.0 ); if( (tr > CRIT) || (ti > CRIT) ) nogo = TRUE; } if( ! nogo ) { for( i = 0; i < n; i++ ) sum[i] += t10[i]; nt += 2; z += dz; if(z > zend) return; for( i = 0; i < n; i++ ) g1[i]=g5[i]; if( (nt >= NTS) && (ns > nx) ) { ns=ns/2; nt=1; } jump = FALSE; continue; } /* if( ! nogo ) */ saoa(z+dz*.250,g2); saoa(z+dz*.75,g4); nogo=FALSE; for( i = 0; i < n; i++ ) { t02=(t01[i]+dzot*(g2[i]+g4[i]))*0.50; t11=(4.0*t02-t01[i])/3.0; t20[i]=(16.0*t11-t10[i])/15.0; /* test convergence of 5 point romberg result */ test( creal(t11), creal(t20[i]), &tr, cimag(t11), cimag(t20[i]), &ti, 0.0 ); if( (tr > CRIT) || (ti > CRIT) ) nogo = TRUE; } if( ! nogo ) { for( i = 0; i < n; i++ ) sum[i] += t20[i]; nt++; z += dz; if(z > zend) return; for( i = 0; i < n; i++ ) g1[i]=g5[i]; if( (nt >= NTS) && (ns > nx) ) { ns=ns/2; nt=1; } jump = FALSE; continue; } /* if( ! nogo ) */ nt=0; if(ns < NM) { ns *= 2; dz=s/ns; dzot=dz*0.50; for( i = 0; i < n; i++ ) { g5[i]=g3[i]; g3[i]=g2[i]; } jump = TRUE; continue; } /* if(ns < nm) */ if( ! lstep ) { lstep = TRUE; lambda( z, &t00, &t11 ); } for( i = 0; i < n; i++ ) sum[i] += t20[i]; nt++; z += dz; if(z > zend) return; for( i = 0; i < n; i++ ) g1[i]=g5[i]; jump = FALSE; } /* while( TRUE ) */ } /*-----------------------------------------------------------------------*/ /* saoa computes the integrand for each of the 6 sommerfeld */ /* integrals for source and observer above ground */ void saoa( double t, complex double *ans) { double xlr; static complex double xl, dxl, cgam1, cgam2, b0; static complex double b0p, com, dgam, den1, den2; lambda(t, &xl, &dxl); if( jh == 0 ) { /* bessel function form */ bessel(xl*rho, &b0, &b0p); b0 *=2.0; b0p *=2.0; cgam1=csqrt(xl*xl-ck1sq); cgam2=csqrt(xl*xl-ck2sq); if(creal(cgam1) == 0.0) cgam1=cmplx(0.0,-fabs(cimag(cgam1))); if(creal(cgam2) == 0.0) cgam2=cmplx(0.0,-fabs(cimag(cgam2))); } else { /* hankel function form */ hankel(xl*rho, &b0, &b0p); com=xl-ck1; cgam1=csqrt(xl+ck1)*csqrt(com); if(creal(com) < 0.0 && cimag(com) >= 0.0) cgam1=-cgam1; com=xl-ck2; cgam2=csqrt(xl+ck2)*csqrt(com); if(creal(com) < 0.0 && cimag(com) >= 0.0) cgam2=-cgam2; } xlr=creal( xl*conj(xl) ); if(xlr >= tsmag) { double sign; if(cimag(xl) >= 0.0) { xlr=creal(xl); if(xlr >= ck2) { if(xlr <= ck1r) dgam=cgam2-cgam1; else { sign=1.0; dgam=1.0/(xl*xl); dgam=sign*((ct3*dgam+ct2)*dgam+ct1)/xl; } } else { sign=-1.0; dgam=1.0/(xl*xl); dgam=sign*((ct3*dgam+ct2)*dgam+ct1)/xl; } /* if(xlr >= ck2) */ } /* if(cimag(xl) >= 0.0) */ else { sign=1.0; dgam=1.0/(xl*xl); dgam=sign*((ct3*dgam+ct2)*dgam+ct1)/xl; } } /* if(xlr < tsmag) */ else dgam=cgam2-cgam1; den2=cksm*dgam/(cgam2*(ck1sq*cgam2+ck2sq*cgam1)); den1=1.0/(cgam1+cgam2)-cksm/cgam2; com=dxl*xl*cexp(-cgam2*zph); ans[5]=com*b0*den1/ck1; com *= den2; if(rho != 0.0) { b0p=b0p/rho; ans[0]=-com*xl*(b0p+b0*xl); ans[3]=com*xl*b0p; } else { ans[0]=-com*xl*xl*0.5; ans[3]=ans[0]; } ans[1]=com*cgam2*cgam2*b0; ans[2]=-ans[3]*cgam2*rho; ans[4]=com*b0; return; } /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/somnec.h000066400000000000000000000025631257141547200150040ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef SOMNEC_H #define SOMNEC_H 1 #include "common.h" #include "support.h" #define PTP .6283185308 #define PI10 31.41592654 #define TOSP 1.128379167 #define SP 1.772453851 #define ACCS 1.0E-12 #define GAMMA .5772156649 #define C1 -.02457850915 #define C2 .3674669052 #define C3 .7978845608 #define P10 .0703125 #define P20 .1121520996 #define Q10 .125 #define Q20 .0732421875 #define P11 .1171875 #define P21 .1441955566 #define Q11 .375 #define Q21 .1025390625 #define POF .7853981635 #define MAXH 20 #define CRIT 1.0E-4 #define NM 131072 #define NTS 4 #endif xnec2c-3.4/src/support.c000066400000000000000000000071271257141547200152300ustar00rootroot00000000000000/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include "support.h" GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name) { GtkWidget *parent, *found_widget; for (;;) { if (GTK_IS_MENU (widget)) parent = gtk_menu_get_attach_widget (GTK_MENU (widget)); else parent = widget->parent; if (!parent) parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey"); if (parent == NULL) break; widget = parent; } found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget), widget_name); if (!found_widget) g_warning ("Widget not found: %s", widget_name); return found_widget; } static GList *pixmaps_directories = NULL; /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory) { pixmaps_directories = g_list_prepend (pixmaps_directories, g_strdup (directory)); } /* This is an internally used function to find pixmap files. */ static gchar* find_pixmap_file (const gchar *filename) { GList *elem; /* We step through each of the pixmaps directory to find it. */ elem = pixmaps_directories; while (elem) { gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data, G_DIR_SEPARATOR_S, filename); if (g_file_test (pathname, G_FILE_TEST_EXISTS)) return pathname; g_free (pathname); elem = elem->next; } return NULL; } /* This is an internally used function to create pixmaps. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename) { gchar *pathname = NULL; GtkWidget *pixmap; if (!filename || !filename[0]) return gtk_image_new (); pathname = find_pixmap_file (filename); if (!pathname) { g_warning (_("Couldn't find pixmap file: %s"), filename); return gtk_image_new (); } pixmap = gtk_image_new_from_file (pathname); g_free (pathname); return pixmap; } /* This is an internally used function to create pixmaps. */ GdkPixbuf* create_pixbuf (const gchar *filename) { gchar *pathname = NULL; GdkPixbuf *pixbuf; GError *error = NULL; if (!filename || !filename[0]) return NULL; pathname = find_pixmap_file (filename); if (!pathname) { g_warning (_("Couldn't find pixmap file: %s"), filename); return NULL; } pixbuf = gdk_pixbuf_new_from_file (pathname, &error); if (!pixbuf) { fprintf (stderr, "Failed to load pixbuf file: %s: %s\n", pathname, error->message); g_error_free (error); } g_free (pathname); return pixbuf; } /* This is used to set ATK action descriptions. */ void glade_set_atk_action_description (AtkAction *action, const gchar *action_name, const gchar *description) { gint n_actions, i; n_actions = atk_action_get_n_actions (action); for (i = 0; i < n_actions; i++) { if (!strcmp (atk_action_get_name (action, i), action_name)) atk_action_set_description (action, i, description); } } xnec2c-3.4/src/support.h000066400000000000000000000037221257141547200152320ustar00rootroot00000000000000/* * DO NOT EDIT THIS FILE - it is generated by Glade. */ #ifdef HAVE_CONFIG_H # include #endif #include /* * Standard gettext macros. */ #ifdef ENABLE_NLS # include # undef _ # define _(String) dgettext (PACKAGE, String) # define Q_(String) g_strip_context ((String), gettext (String)) # ifdef gettext_noop # define N_(String) gettext_noop (String) # else # define N_(String) (String) # endif #else # define textdomain(String) (String) # define gettext(String) (String) # define dgettext(Domain,Message) (Message) # define dcgettext(Domain,Message,Type) (Message) # define bindtextdomain(Domain,Directory) (Domain) # define _(String) (String) # define Q_(String) g_strip_context ((String), (String)) # define N_(String) (String) #endif /* * Public Functions. */ /* * This function returns a widget in a component created by Glade. * Call it with the toplevel widget in the component (i.e. a window/dialog), * or alternatively any widget in the component, and the name of the widget * you want returned. */ GtkWidget* lookup_widget (GtkWidget *widget, const gchar *widget_name); /* Use this function to set the directory containing installed pixmaps. */ void add_pixmap_directory (const gchar *directory); /* * Private Functions. */ /* This is used to create the pixmaps used in the interface. */ GtkWidget* create_pixmap (GtkWidget *widget, const gchar *filename); /* This is used to create the pixbufs used in the interface. */ GdkPixbuf* create_pixbuf (const gchar *filename); /* This is used to set ATK action descriptions. */ void glade_set_atk_action_description (AtkAction *action, const gchar *action_name, const gchar *description); xnec2c-3.4/src/utils.c000066400000000000000000000250761257141547200146570ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* misc.c * * Miscellaneous support functions for xnec2c.c */ #include "utils.h" /*------------------------------------------------------------------------*/ /* usage() * * Prints usage information */ void usage(void) { fprintf( stderr, _("Usage: xnec2c \n"\ " [-i ]\n"\ " [-j ]\n"\ " [-h: print this usage information and exit]\n"\ " [-v: print xnec2c version number and exit]\n") ); } /* end of usage() */ /*------------------------------------------------------------------------*/ /* Does the STOP function of fortran but with a warning dialog */ int stop( char *mesg, int err ) { /* For child processes */ if( CHILD ) { fprintf( stderr, "%s\n", mesg ); if( err ) { fprintf( stderr, _("xnec2c: fatal: child process %d exiting\n"), num_child_procs ); _exit(-1); } else return( err ); } /* if( CHILD ) */ /* Stop operation */ Stop_Frequency_Loop(); error_dialog = create_error_dialog(); gtk_label_set_text( GTK_LABEL( lookup_widget(error_dialog, "error_label")), mesg ); /* Hide ok button according to error */ if( err == TRUE ) gtk_widget_hide( lookup_widget( error_dialog, "error_okbutton") ); gtk_widget_show( error_dialog ); /* Loop over usleep till user decides what to do */ /* Could not think of another way to do this :-( */ SetFlag( ERROR_CONDX ); while( isFlagSet(ERROR_CONDX) ) { if( isFlagSet(MAIN_QUIT) ) exit(-1); /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); usleep(100000); } return( err ); } /* stop */ /*------------------------------------------------------------------*/ gboolean Nec2_Save_Warn( const gchar *mesg ) { if( isFlagSet(FREQ_LOOP_RUNNING) ) { error_dialog = create_error_dialog(); gtk_label_set_text( GTK_LABEL( lookup_widget(error_dialog, "error_label")), mesg ); gtk_widget_hide( lookup_widget( error_dialog, "error_stopbutton") ); gtk_widget_show( error_dialog ); /* Loop over usleep till user decides what to do */ /* Could not think of another way to do this :-( */ SetFlag( ERROR_CONDX ); while( isFlagSet(ERROR_CONDX) ) { if( isFlagSet(MAIN_QUIT) ) exit(-1); /* Wait for GTK to complete its tasks */ while( g_main_context_iteration(NULL, FALSE) ); usleep(100000); } return( FALSE ); } return( TRUE ); } /* Nec2_Save_Warn() */ /*------------------------------------------------------------------*/ /* Load_Line() * * loads a line from a file, aborts on failure. lines beginning * with a '#' or ''' are ignored as comments. At the end of file * EOF is returned. */ int Load_Line( char *buff, FILE *pfile ) { int num_chr, /* number of characters read, excluding lf/cr */ eof, /* EOF flag */ chr; /* character read by getc */ num_chr = 0; eof = 0; /* clear buffer at start */ buff[0] = '\0'; /* ignore commented lines, white spaces and eol/cr */ if( (chr = fgetc(pfile)) == EOF ) return( EOF ); while( (chr == '#') || (chr == '\'') || (chr == CR ) || (chr == LF ) ) { /* go to the end of line (look for lf or cr) */ while( (chr != CR) && (chr != LF) ) if( (chr = fgetc(pfile)) == EOF ) return( EOF ); /* dump any cr/lf remaining */ while( (chr == CR) || (chr == LF) ) if( (chr = fgetc(pfile)) == EOF ) return( EOF ); } /* end of while( (chr == '#') || ... */ while( num_chr < LINE_LEN ) { /* if lf/cr reached before filling buffer, return */ if( (chr == CR) || (chr == LF) ) break; /* enter new char to buffer */ buff[num_chr++] = (char)chr; /* terminate buffer as a string on EOF */ if( (chr = fgetc(pfile)) == EOF ) { buff[num_chr] = '\0'; eof = EOF; } } /* end of while( num_chr < max_chr ) */ /* Capitalize first two characters (mnemonics) */ if( (buff[0] > 0x60) && (buff[0] < 0x79) ) buff[0] = (char)toupper( (int)buff[1] ); if( (buff[1] > 0x60) && (buff[1] < 0x79) ) buff[1] = (char)toupper( (int)buff[1] ); /* terminate buffer as a string */ buff[num_chr] = '\0'; return( eof ); } /* end of Load_Line() */ /*------------------------------------------------------------------------*/ /*** Memory allocation/freeing utils ***/ static size_t cnt = 0; /* Total allocation */ void mem_alloc( void **ptr, size_t req, gchar *str ) { gchar mesg[MESG_SIZE]; free_ptr( ptr ); *ptr = malloc( req ); cnt += req; if( *ptr == NULL ) { snprintf( mesg, sizeof(mesg), _("Memory allocation denied %s\n"), str ); fprintf( stderr, "%s: Total memory request %ld\n", mesg, cnt ); stop( mesg, ERR_STOP ); } } /* End of mem_alloc() */ /*------------------------------------------------------------------------*/ void mem_realloc( void **ptr, size_t req, gchar *str ) { gchar mesg[MESG_SIZE]; *ptr = realloc( *ptr, req ); cnt += req; if( *ptr == NULL ) { snprintf( mesg, sizeof(mesg), _("Memory re-allocation denied %s\n"), str ); fprintf( stderr, "%s: Total memory request %ld\n", mesg, cnt ); stop( mesg, ERR_STOP ); } } /* End of mem_realloc() */ /*------------------------------------------------------------------------*/ void free_ptr( void **ptr ) { if( *ptr != NULL ) free( *ptr ); *ptr = NULL; } /* End of free_ptr() */ /*------------------------------------------------------------------------*/ /* Open_File() * * Opens a file path, returns fp */ gboolean Open_File( FILE **fp, char *fname, const char *mode ) { /* Abort if file name is blank */ if( strlen(infile) == 0 ) return( TRUE ); /* Close file path if open */ Close_File( fp ); if( (*fp = fopen(fname, mode)) == NULL ) { char mesg[MESG_SIZE]; snprintf( mesg, sizeof(mesg), _("xnec2c: %s: Failed to open file\n"), fname ); stop( mesg, ERR_STOP ); return( FALSE ); } return(TRUE); } /* Open_File() */ /*------------------------------------------------------------------------*/ /* Close_File() * * Closes a file pointer */ void Close_File( FILE **fp ) { if( *fp != NULL ) fclose( *fp ); *fp = NULL; } /* Close_File() */ /*------------------------------------------------------------------------*/ /* Display_Fstep() * * Displays the current frequency step number */ void Display_Fstep( GtkEntry *entry, int fstep ) { char str[4]; snprintf( str, sizeof(str), "%3d", fstep ); gtk_entry_set_text( entry, str ); } /*------------------------------------------------------------------------*/ /* Functions for testing and setting/clearing flow control flags * * See xnec2c.h for definition of flow control flags */ /* An int variable holding the single-bit flags */ static unsigned long long int Flags = 0; int isFlagSet( unsigned long long int flag ) { return( (Flags & flag) == flag ); } int isFlagClear( unsigned long long int flag ) { return( (~Flags & flag) == flag ); } void SetFlag( unsigned long long int flag ) { Flags |= flag; } void ClearFlag( unsigned long long int flag ) { Flags &= ~flag; } void ToggleFlag( unsigned long long int flag ) { Flags ^= flag; } void SaveFlag( unsigned long long int *flag, unsigned long long int mask ) { *flag |= (Flags & mask); } /*------------------------------------------------------------------------*/ /* Strlcpy() * * Copies n-1 chars from src string into dest string. Unlike other * such library fuctions, this makes sure that the dest string is * null terminated by copying only n-1 chars to leave room for the * terminating char. n would normally be the sizeof(dest) string but * copying will not go beyond the terminating null of src string */ void Strlcpy( char *dest, const char *src, size_t n ) { char ch = src[0]; int idx = 0; /* Leave room for terminating null in dest */ n--; /* Copy till terminating null of src or to n-1 */ while( (ch != '\0') && (n > 0) ) { dest[idx] = src[idx]; idx++; ch = src[idx]; n--; } /* Terminate dest string */ dest[idx] = '\0'; } /* Strlcpy() */ /*------------------------------------------------------------------*/ /* Strlcat() * * Concatenates at most n-1 chars from src string into dest string. * Unlike other such library fuctions, this makes sure that the dest * string is null terminated by copying only n-1 chars to leave room * for the terminating char. n would normally be the sizeof(dest) * string but copying will not go beyond the terminating null of src */ void Strlcat( char *dest, const char *src, size_t n ) { char ch = dest[0]; int idd = 0; /* dest index */ int ids = 0; /* src index */ /* Find terminating null of dest */ while( (n > 0) && (ch != '\0') ) { idd++; ch = dest[idd]; n--; /* Count remaining char's in dest */ } /* Copy n-1 chars to leave room for terminating null */ n--; ch = src[ids]; while( (n > 0) && (ch != '\0') ) { dest[idd] = src[ids]; ids++; ch = src[ids]; idd++; n--; } /* Terminate dest string */ dest[idd] = '\0'; } /* Strlcat() */ /*------------------------------------------------------------------*/ /* Strtod() * * Replaces strtod() to take into account the * locale-dependent decimal point character */ double Strtod( char *nptr, char **endptr ) { int idx; size_t len; double d = 0.0; static gboolean first_call = TRUE; static char dp = '.'; /* Find locale-dependent decimal point character */ if( first_call ) { struct lconv *lcnv; lcnv = localeconv(); dp = *lcnv->decimal_point; first_call = FALSE; } /* Look for a . or , decimal point character * in the supplied number buffer (string) */ len = strlen( nptr ); for( idx = 0; idx < (int)len; idx++ ) if( (nptr[idx] == ',') || (nptr[idx] == '.') ) break; /* If a decimal point character is found, replace */ if( idx < (int)len ) nptr[idx] = dp; d = strtod( (const char *)nptr, endptr ); return( d ); } /* End of Strtod() */ /*------------------------------------------------------------------*/ xnec2c-3.4/src/utils.h000066400000000000000000000020311257141547200146460ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef UTILS_H #define UTILS_H 1 #include "common.h" #include "interface.h" #include "support.h" #include "shared.h" #include #include /* Carriage return and line feed */ #define CR 0x0d #define LF 0x0a #endif xnec2c-3.4/src/xnec2c.c000066400000000000000000000436371257141547200147040ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ /* xnec2c.c * * Contains functions that carry out various * operations that were packed spaggetti-fashion * in the original NEC2 main() function */ #include "xnec2c.h" #include "shared.h" /* Left-overs from fortran code :-( */ static double tmp1, tmp2, tmp3, tmp4, tmp5, tmp6; /*-----------------------------------------------------------------------*/ /* Frequency_Scale_Geometry() * * Scales geometric parameters to frequency */ void Frequency_Scale_Geometry() { double fr; int idx; /* Calculate wavelength */ data.wlam= CVEL/ calc_data.fmhz; /* frequency scaling of geometric parameters */ fr= calc_data.fmhz / CVEL; if( data.n != 0) { for( idx = 0; idx < data.n; idx++ ) { data.x[idx] = save.xtemp[idx] * fr; data.y[idx] = save.ytemp[idx] * fr; data.z[idx] = save.ztemp[idx] * fr; data.si[idx]= save.sitemp[idx]* fr; data.bi[idx]= save.bitemp[idx]* fr; } } if( data.m != 0) { double fr2= fr* fr; for( idx = 0; idx < data.m; idx++ ) { int j; j = idx + data.n; data.px[idx] = save.xtemp[j] * fr; data.py[idx] = save.ytemp[j] * fr; data.pz[idx] = save.ztemp[j] * fr; data.pbi[idx]= save.bitemp[j]* fr2; } } } /* Frequency_Scale_Geometry() */ /*-----------------------------------------------------------------------*/ /* Struct_Impedance_Loading() * * Calculates structure (segment) impedance loading */ void Structure_Impedance_Loading( void ) { /* Calculate some loading parameters */ if( zload.nload != 0) load( calc_data.ldtyp, calc_data.ldtag, calc_data.ldtagf, calc_data.ldtagt, calc_data.zlr, calc_data.zli, calc_data.zlc ); } /* Struct_Impedance_Loading() */ /*-----------------------------------------------------------------------*/ /* Ground_Parameters() * * Calculates ground parameters (antenna environment) */ void Ground_Parameters( void ) { complex double epsc; if( gnd.ksymp != 1) { gnd.frati = CPLX_10; if( gnd.iperf != 1) { if( save.sig < 0.0 ) save.sig = -save.sig / (59.96 * data.wlam); epsc = cmplx( save.epsr, -save.sig * data.wlam * 59.96 ); gnd.zrati = 1.0 / csqrt( epsc); gwav.u = gnd.zrati; gwav.u2 = gwav.u * gwav.u; if( gnd.nradl > 0 ) { gnd.scrwl = save.scrwlt / data.wlam; gnd.scrwr = save.scrwrt / data.wlam; gnd.t1 = CPLX_01 * 2367.067/ (double)gnd.nradl; gnd.t2 = gnd.scrwr * (double)gnd.nradl; } /* if( gnd.nradl > 0 ) */ if( gnd.iperf == 2) { somnec( save.epsr, save.sig, calc_data.fmhz ); gnd.frati =( epsc - 1.0) / ( epsc + 1.0); if( cabs(( ggrid.epscf - epsc) / epsc) >= 1.0e-3 ) { fprintf( stderr, "xnec2c: Ground_Parameters(): error in ground parameters\n" "complex dielectric constant from file: %12.5E%+12.5Ej\n" " requested: %12.5E%+12.5Ej\n", creal(ggrid.epscf), cimag(ggrid.epscf), creal(epsc), cimag(epsc) ); stop( _("Ground_Parameters():"\ "Error in ground parameters"), ERR_STOP ); } } /* if( gnd.iperf != 2) */ } /* if( gnd.iperf != 1) */ else { gnd.scrwl = 0.0; gnd.scrwr = 0.0; gnd.t1 = 0.0; gnd.t2 = 0.0; } } /* if( gnd.ksymp != 1) */ return; } /* Ground_Parameters() */ /*-----------------------------------------------------------------------*/ /* Set_Interaction_Matrix() * * Sets and factors the interaction matrix */ void Set_Interaction_Matrix( void ) { /* Memory allocation for symmetry array */ smat.nop = netcx.neq/netcx.npeq; size_t mreq = (size_t)(smat.nop * smat.nop) * sizeof( complex double); mem_realloc( (void **)&smat.ssx, mreq, "in xnec2c.c" ); /* irngf is not used (NGF function not implemented) */ int iresrv = data.np2m * (data.np + 2 * data.mp); if( matpar.imat == 0) fblock( netcx.npeq, netcx.neq, iresrv, data.ipsym); cmset( netcx.neq, cm, calc_data.rkh, calc_data.iexk ); factrs( netcx.npeq, netcx.neq, cm, save.ip ); netcx.ntsol = 0; } /* Set_Interaction_Matrix() */ /*-----------------------------------------------------------------------*/ /* Set_Excitation() * * Sets the excitation part of the matrix */ void Set_Excitation( void ) { if( (fpat.ixtyp >= 1) && (fpat.ixtyp <= 4) ) { tmp4= TA* calc_data.xpr4; tmp5= TA* calc_data.xpr5; if( fpat.ixtyp == 4) { tmp1= calc_data.xpr1/ data.wlam; tmp2= calc_data.xpr2/ data.wlam; tmp3= calc_data.xpr3/ data.wlam; tmp6= calc_data.xpr6/( data.wlam* data.wlam); } else { tmp1= TA* calc_data.xpr1; tmp2= TA* calc_data.xpr2; tmp3= TA* calc_data.xpr3; tmp6= calc_data.xpr6; } /* if( fpat.ixtyp == 4) */ } /* if( (fpat.ixtyp >= 1) && (fpat.ixtyp <= 4) ) */ /* fills e field right-hand matrix */ etmns( tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, fpat.ixtyp, crnt.cur ); } /* Set_Excitation() */ /*-----------------------------------------------------------------------*/ /* Set_Network_Data() * * Sets up network data and solves for currents */ void Set_Network_Data( void ) { if( netcx.nonet != 0 ) { int i, j, itmp1, itmp2, itmp3; itmp3=0; itmp1= netcx.ntyp[0]; for( i = 0; i < 2; i++ ) { if( itmp1 == 3) itmp1=2; for( j = 0; j < netcx.nonet; j++) { itmp2= netcx.ntyp[j]; if( (itmp2/itmp1) != 1 ) itmp3 = itmp2; else if( (itmp2 >= 2) && (netcx.x11i[j] <= 0.0) ) { double xx, yy, zz; int idx4, idx5; idx4 = netcx.iseg1[j]-1; idx5 = netcx.iseg2[j]-1; xx = data.x[idx5]- data.x[idx4]; yy = data.y[idx5]- data.y[idx4]; zz = data.z[idx5]- data.z[idx4]; netcx.x11i[j] = data.wlam* sqrt( xx*xx + yy*yy + zz*zz ); } } /* for( j = 0; j < netcx.nonet; j++) */ if( itmp3 == 0) break; itmp1= itmp3; } /* for( i = 0; i < 2; i++ ) */ } /* if( netcx.nonet != 0 ) */ /* Set network data */ netwk( cm, save.ip, crnt.cur ); netcx.ntsol = 1; /* Save impedance data for normalization */ if( ((calc_data.nfrq > 1) && isFlagSet(FREQ_LOOP_RUNNING)) || CHILD ) { impedance_data.zreal[calc_data.fstep] = (double)creal( netcx.zped); impedance_data.zimag[calc_data.fstep] = (double)cimag( netcx.zped); impedance_data.zmagn[calc_data.fstep] = (double)cabs( netcx.zped); impedance_data.zphase[calc_data.fstep]= (double)cang( netcx.zped); if( (calc_data.iped == 1) && ((double)impedance_data.zmagn[calc_data.fstep] > calc_data.zpnorm) ) calc_data.zpnorm = (double)impedance_data.zmagn[calc_data.fstep]; } } /* Set_Network_Data() */ /*-----------------------------------------------------------------------*/ /* Power_Loss() * * Calculate power loss due to segment loading */ void Power_Loss( void ) { int i; double cmg; complex double curi; /* No wire/segments in structure */ if( data.n == 0) return; fpat.ploss = 0.0; /* Loop over all wire segs */ for( i = 0; i < data.n; i++ ) { /* Calculate segment current (mag/phase) */ curi= crnt.cur[i]* data.wlam; cmg= cabs( curi); /* Calculate power loss in segment */ if( (zload.nload != 0) && (fabs(creal(zload.zarray[i])) >= 1.0e-20) ) fpat.ploss += 0.5* cmg* cmg* creal( zload.zarray[i])* data.si[i]; } /* for( i = 0; i < n; i++ ) */ } /* Power_Loss() */ /*-----------------------------------------------------------------------*/ /* Radiation_Pattern() * * Calculates far field (radiation) pattern */ void Radiation_Pattern( void ) { if( (gnd.ifar != 1) && isFlagSet(ENABLE_RDPAT) ) { fpat.pinr= netcx.pin; fpat.pnlr= netcx.pnls; rdpat(); } } /* Radiation_Pattern() */ /*-----------------------------------------------------------------------*/ /* Near_Field_Pattern() * * Calculates near field pattern if enabled/needed */ void Near_Field_Pattern( void ) { if( near_field.valid || isFlagClear(DRAW_EHFIELD) || isFlagClear(ENABLE_NEAREH) ) return; if( isFlagSet(DRAW_EFIELD) ) nfpat(0); if( isFlagSet(DRAW_HFIELD) ) nfpat(1); } /* Near_Field_Pattern() */ /*-----------------------------------------------------------------------*/ /* New_Frequency() * * (Re)calculates all frequency-dependent parameters */ void New_Frequency( void ) { /* Abort if freq has not really changed, as when changing * between current or charge density structure coloring */ if( (save.last_freq == calc_data.fmhz) || isFlagClear(ENABLE_EXCITN) ) return; save.last_freq = calc_data.fmhz; /* Frequency scaling of geometric parameters */ Frequency_Scale_Geometry(); /* Structure segment loading */ Structure_Impedance_Loading(); /* Calculate ground parameters */ Ground_Parameters(); /* Fill and factor primary interaction matrix */ Set_Interaction_Matrix(); /* Fill excitation part of matrix */ Set_Excitation(); /* Matrix solving (netwk calls solves) */ crnt.valid = 0; Set_Network_Data(); /* Calculate power loss */ Power_Loss(); /* Calculate radiation pattern */ Radiation_Pattern(); /* Near field calculation */ near_field.valid = 0; Near_Field_Pattern(); } /* New_Frequency() */ /*-----------------------------------------------------------------------*/ static gboolean retval; /* Function's return value */ /* Frequency_Loop() * * Loops over frequency if calculations over a frequency range is * requested, dividing the job between child processes if forked */ gboolean Frequency_Loop( gpointer udata ) { /* Value of frequency and step num in the loop */ static double freq; /* Current freq step, saved steps * index, num of busy processes */ static int fstep, num_busy_procs; int idx, job_num = 0; size_t len; char *buff; /* Used to pass on structure poiners */ fd_set read_fds; /* Read file descriptors for select() */ /* (Re) initialize freq loop */ if( isFlagSet(FREQ_LOOP_INIT) ) { /* Clear global flags */ ClearFlag( FREQ_LOOP_INIT | FREQ_LOOP_DONE ); /* (Re)-enable freq loop (back to start freq) */ freq = save.fmhz; /* Step back frequency and step count since incrementing * is done at start of frequency loop calculations */ fstep = -1; if( calc_data.ifrq == 1) freq /= calc_data.delfrq; else freq -= calc_data.delfrq; /* Clear list of "valid" (processed) loop steps */ for( idx = 0; idx < calc_data.nfrq; idx++ ) save.fstep[idx] = 0; /* Clear "last-used-frequency" buffer */ save.last_freq = 0.0; /* Zero num of busy processes */ num_busy_procs = 0; /* Signal global freq step "illegal" */ calc_data.fstep = -1; /* Inherited from NEC2 */ if( calc_data.zpnorm > 0.0 ) calc_data.iped = 2; /* Continue gtk_main idle callbacks */ retval = TRUE; return ( retval ); } /* isFlagSet(INIT_FREQ_LOOP) */ /* Repeat freq stepping over number of child processes * if forked. calc_data.num_jobs = 1 for non-forked runs. * If not forked (no multi-threading), following block will * execute only once, since only one instance is running */ for( idx = 0; idx < calc_data.num_jobs; idx++ ) { /* Up frequency step count */ fstep++; /* Frequency loop is completed or was paused by user */ if( (fstep >= calc_data.nfrq) || isFlagSet(FREQ_LOOP_STOP) ) { /* Re-initialize if loop completed all steps */ if( fstep >= calc_data.nfrq ) SetFlag( FREQ_LOOP_INIT ); /* Points to last buffer in rad_pattern filled by loop */ fstep--; /* Last freq step that was processed by children */ calc_data.lastf = fstep; /* Re-enable pausing of freq loop */ ClearFlag( FREQ_LOOP_STOP ); /* Cancel idle callbacks on exit */ retval = FALSE; break; } /* if( (fstep >= calc_data.nfrq) || isFlagSet(FREQ_LOOP_STOP) ) */ /* Increment frequency */ if( calc_data.ifrq == 1) freq *= calc_data.delfrq; /* Multiplicative stepping */ else freq += calc_data.delfrq; /* Additive stepping */ /* Save frequencies for plotting */ save.freq[fstep] = (double)freq; /* Delegate calculations to child processes if forked */ if( FORKED ) { /* Look for an idle process */ for( job_num = 0; job_num < calc_data.num_jobs; job_num++ ) { /* If an idle process is found, give it a job and * then step the frequency loop by breaking out */ if( ! forked_proc_data[job_num]->busy ) { /* Signal and count busy processes */ forked_proc_data[job_num]->busy = TRUE; forked_proc_data[job_num]->fstep = fstep; num_busy_procs++; /* Tell process to calculate freq dependent data */ len = strlen( fork_commands[FRQDATA] ); Write_Pipe( job_num, fork_commands[FRQDATA], (ssize_t)len, TRUE ); /* When it responds, give it next frequency */ buff = (char *)&freq; len = sizeof( double ); Write_Pipe( job_num, buff, (ssize_t)len, TRUE ); break; } } /* for( job_num = 0; job_num < calc_data.num_jobs; job_num++ ) */ } /* if( FORKED ) */ else /* Calculate freq dependent data (no fork) */ { calc_data.fmhz = freq; calc_data.fstep = fstep; calc_data.lastf = fstep; New_Frequency(); break; } /* All idle processes are given a job */ if( num_busy_procs >= calc_data.num_jobs ) break; } /* for( idx = 0; idx < calc_data.num_jobs; idx++ ) */ /* Receive results from forked children */ if( FORKED && num_busy_procs ) do { int n = 0; /* Set read fd's to watch for child writes */ FD_ZERO( &read_fds ); for( idx = 0; idx < calc_data.num_jobs; idx++ ) { FD_SET( forked_proc_data[idx]->child2pnt_pipe[READ], &read_fds ); if( n < forked_proc_data[idx]->child2pnt_pipe[READ] ) n = forked_proc_data[idx]->child2pnt_pipe[READ]; } /* Wait for data from finished child processes */ if( select( n+1, &read_fds, NULL, NULL, NULL ) == -1 ) { perror( "xnec2c: select()" ); _exit(0); } /* Check for finished child processes */ for( idx = 0; idx < num_child_procs; idx++ ) { if( FD_ISSET(forked_proc_data[idx]->child2pnt_pipe[READ], &read_fds) ) { /* Read data from finished child process */ Get_Freq_Data( idx, forked_proc_data[idx]->fstep ); /* Mark freq step in list of processed steps */ save.fstep[forked_proc_data[idx]->fstep] = 1; /* Mark finished child process as ready for next job */ forked_proc_data[idx]->busy = FALSE; /* Count down number of busy processes */ num_busy_procs--; } } /* for( idx = 0; idx < num_child_procs; idx++ ) */ /* Find highest freq step that has no steps below it * that have not been processed by a child process */ for( idx = 0; idx < calc_data.nfrq; idx++ ) if( save.fstep[idx] ) calc_data.fstep = idx; else break; } /* do */ /* Loop terminated and busy children */ while( !retval && num_busy_procs ); /* Return if freq step 0 not ready yet */ if( calc_data.fstep < 0 ) return( retval ); /* Set frequency and step to global variables */ calc_data.lastf = calc_data.fstep; calc_data.fmhz = (double)save.freq[calc_data.fstep]; /* Trigger a redraw of plots drawingarea */ Plot_Frequency_Data(); /* Set frequency spinbuttons */ gtk_spin_button_set_value( mainwin_frequency, (gdouble)calc_data.fmhz ); if( isFlagSet(DRAW_ENABLED) ) gtk_spin_button_set_value( rdpattern_frequency, (gdouble)calc_data.fmhz ); if( isFlagSet(PLOT_ENABLED) ) { char txt[10]; snprintf( txt, sizeof(txt), "%10.3f", (gdouble)calc_data.fmhz ); gtk_entry_set_text( GTK_ENTRY( lookup_widget(freqplots_window, "freqplots_fmhz_entry")), txt ); } /* Change flags at exit if loop is done */ if( !retval && !num_busy_procs ) { ClearFlag( FREQ_LOOP_RUNNING ); SetFlag( FREQ_LOOP_DONE ); } return( retval ); } /* Frequency_Loop() */ /*-----------------------------------------------------------------------*/ /* Start_Frequency_Loop() * * Starts frequency loop */ gboolean Start_Frequency_Loop( void ) { if( isFlagClear(FREQ_LOOP_RUNNING) && (calc_data.nfrq > 1) ) { retval = TRUE; SetFlag(FREQ_LOOP_RUNNING); floop_tag = g_idle_add( Frequency_Loop, NULL ); return( TRUE ); } else return( FALSE ); } /* Start_Frequency_Loop() */ /*-----------------------------------------------------------------------*/ /* Stop_Frequency_Loop() * * Stops and resets freq loop */ void Stop_Frequency_Loop( void ) { if( floop_tag > 0 ) { g_source_remove( floop_tag ); floop_tag = 0; } ClearFlag( FREQ_LOOP_RUNNING ); } /* Stop_Frequency_Loop() */ /*-----------------------------------------------------------------------*/ /* Incident_Field_Loop() * * Loops over incident field directions if * receiving pattern calculations are requested */ void Incident_Field_Loop( void ) { int phi_step, theta_step; /* Frequency scaling of geometric parameters */ Frequency_Scale_Geometry(); /* Structure segment loading */ Structure_Impedance_Loading(); /* Calculate ground parameters */ Ground_Parameters(); /* Fill and factor primary interaction matrix */ Set_Interaction_Matrix(); /* Loop over incident field angles */ netcx.nprint=0; /* Loop over phi */ for( phi_step = 0; phi_step < calc_data.nphi; phi_step++ ) { /* Loop over theta */ for( theta_step = 0; theta_step < calc_data.nthi; theta_step++ ) { /* Fill excitation part of matrix */ Set_Excitation(); /* Matrix solving (netwk calls solves) */ Set_Network_Data(); /* Calculate power loss */ Power_Loss(); calc_data.xpr1 += calc_data.xpr4; } /* for( theta_step = 0; theta_step < calc_data.nthi.. */ calc_data.xpr1= calc_data.thetis; calc_data.xpr2= calc_data.xpr2+ calc_data.xpr5; } /* for( phi_step = 0; phi_step < calc_data.nphi.. */ calc_data.xpr2 = calc_data.phiss; } /* Incident_Field_Loop() */ /*-----------------------------------------------------------------------*/ xnec2c-3.4/src/xnec2c.h000066400000000000000000000016021257141547200146730ustar00rootroot00000000000000/* * xnec2c - GTK2-based version of nec2c, the C translation of NEC2 * * 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 Library 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. */ #ifndef XNEC2C_H #define XNEC2C_H 1 #include "fork.h" #include "support.h" #endif xnec2c-3.4/xnec2c.glade000066400000000000000000031060431257141547200147410ustar00rootroot00000000000000 4 True Xnec2c: Structure Display GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_EAST True False True False 0 True False 0 True GTK_PACK_DIRECTION_LTR GTK_PACK_DIRECTION_LTR True _File True True gtk-new True True gtk-open True True Edit NEC2 Input File gtk-edit True True gtk-save True True gtk-save-as True True Save As gnuplot True True gtk-save-as 1 0.5 0.5 0 0 True True gtk-quit True True _View True True Open radiation pattern window Radiation Pattern True False True Open frequency data plots window Frequency Plots True False True Display gain data relevant to polarization Polarization True True Total gain Total True True True Gain in horizontal polarization Horizontal True False rdpattern_total True Gain in vertical polarization Vertical True False rdpattern_total True Gain in rhcp Right Hand True False rdpattern_total True Gain in lhcp Left Hand True False rdpattern_total True Synchronize projection parameters in different windows Common Projection True True True Synchronize frequency selection in different windows Common Frequency True True True _Help True True About True True gtk-about 1 0.5 0.5 0 0 0 False False True False 0 True 4 False False True Calculate and Display Structure Currents True Currents True GTK_RELIEF_NORMAL True False False 0 False False True Calculate and Display Charge Densities True Charges True GTK_RELIEF_NORMAL True False False 0 False False True 4 True True True Frequency Loop False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 True 0 0 False False True Start Frequency Loop True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-media-play 4 0.5 0.5 0 0 0 False False True True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 False False True Pause Frequency Loop True GTK_RELIEF_NORMAL True True gtk-media-pause 4 0.5 0.5 0 0 0 False False True Reset Frequency Loop True GTK_RELIEF_NORMAL True True gtk-media-rewind 4 0.5 0.5 0 0 0 False False True Step False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 True 0 0 False False True Current Frequency Step True False True 3 1 True â— False 3 0 False False 0 False False 0 False False True 4 False False 30 True False 0 True 0 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE 1 False 0 2 False False 160 True Color Code for Structure's Current or Charge Values 0 False False True 0.00 False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE 11 False 0 0 False False True Gain in Direction of Viewer (Perpenticular to Screen) True True True 0 - - - - - True * False 6 2 False False True dB False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 True 0 0 False False True Enter Frequency in MHz True 0.0010000000475 3 True GTK_UPDATE_ALWAYS False False 0.00999999977648 0.00999999977648 9999 0.00999999977648 10 0 2 False False True MHz False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 True 0 0 False False True Enable Data Calculation on Frequency Change True Apply True GTK_RELIEF_NORMAL False True False True 2 False False True Calculate Data for New Frequency True GTK_RELIEF_NORMAL True True gtk-apply 4 0.5 0.5 0 0 0 False False 0 False False True 4 False False 4 True 0 0.5 GTK_SHADOW_ETCHED_IN 2 True 0.5 0.5 1 1 0 0 0 0 681 481 True True True False 0 True View Geometry False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE 14 True 0 0 False False True View Structure along X-axis True X True GTK_RELIEF_NORMAL True 0 False False True View Structure along Y-axis True Y True GTK_RELIEF_NORMAL True 0 False False True View Strucure along Z-axis True Z True GTK_RELIEF_NORMAL True 0 False False True View Strucure in Default Projection True GTK_RELIEF_NORMAL True True gtk-redo 4 0.5 0.5 0 0 0 False False True 0 True True True gtk-refresh 4 0.5 0.5 0 0 0 True True True Rotate Structure around Z-axis True 1 0 True GTK_UPDATE_ALWAYS False True 45 -360 360 1 10 0 0 False False True gtk-go-down 4 0.5 0.5 0 0 0 True True True Incline Structure to Plane of Screen True 1 0 True GTK_UPDATE_ALWAYS False True 45 -180 180 1 10 0 0 False False True Zoom % False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 True 0 0 False False True Zoom Structure Display True 1 0 False GTK_UPDATE_ALWAYS False False 100 10 999 1 10 0 0 False False True Zoom In True GTK_RELIEF_NORMAL True True gtk-zoom-in 4 0.5 0.5 0 0 0 False False True Zoom Out True GTK_RELIEF_NORMAL True True gtk-zoom-out 4 0.5 0.5 0 0 0 False False True Zoom to Default 1:1 True GTK_RELIEF_NORMAL True True gtk-zoom-100 4 0.5 0.5 0 0 0 False False label_item 0 True True 5 True GTK_FILE_CHOOSER_ACTION_OPEN True False True False xnec2c GTK_WINDOW_TOPLEVEL GTK_WIN_POS_MOUSE False True False GtkFileChooserDialog True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True False 24 True GTK_BUTTONBOX_END 2 True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 2 True True True True gtk-open True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END 10 True Select File GTK_WINDOW_TOPLEVEL GTK_WIN_POS_MOUSE False True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True True True True GTK_RELIEF_NORMAL True True True True GTK_RELIEF_NORMAL True 4 True Xnec2c: Frequency Data Plots GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_EAST True False True False 0 True False 0 True GTK_PACK_DIRECTION_LTR GTK_PACK_DIRECTION_LTR True _File True True gtk-new True True gtk-open True True gtk-save True True gtk-save-as True True Save As gnuplot True True True gtk-quit True True _View True True Disply gain data relevant to polarization Polarization True True Total gain Total True True True Gain in horizontal polarization Horizontal True False rdpattern_total True Plot gain in vertical polarization Vertical True False rdpattern_total True Plot gain in rhcp Right Hand True False rdpattern_total True Plot gain in lhcp Left Hand True False rdpattern_total True Display Net Gain towards Viewer Net Gain True False 0 False False True False 0 True Plot maximum gain over frequency range True Max Gain True GTK_RELIEF_NORMAL True False False 0 False False True Plot direction of maximum gain True Direct. True GTK_RELIEF_NORMAL True False False 0 False False True Plot gain in direction of viewer (perpenticular to screen) True Viewer True GTK_RELIEF_NORMAL True False False 0 False False True Plot VSWR over frequency True VSWR True GTK_RELIEF_NORMAL True False False 0 False False True Plot real and imaginary input impedances True Zr/Zi True GTK_RELIEF_NORMAL True False False 0 False False True Plot magnitude and phase of input impedance True Zm/Zph True GTK_RELIEF_NORMAL True False False 0 False False True Freq Loop False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 False False True Start Frequency Loop True GTK_RELIEF_NORMAL True True gtk-media-play 4 0.5 0.5 0 0 0 False False True Pause Frequency Loop True GTK_RELIEF_NORMAL True True gtk-media-pause 4 0.5 0.5 0 0 0 False False True Reset Frequency Loop True GTK_RELIEF_NORMAL True True gtk-media-rewind 4 0.5 0.5 0 0 0 False False 0 False False True 4 False False 30 True False 0 True F MHz False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True True True 0 - - - - - - - True * False 8 0 False False True Max Gain False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True True True 0 - - - - - True * False 6 0 False False True VSWR False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 False False True True True True 0 - - - - True * False 5 0 False False True Zreal False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 False False True True True True 0 - - - - True * False 5 0 False False True Zim False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 False False True True True True 0 - - - - True * False 5 0 False False True Zo False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True Specify Zo of transmission line True 0.20000000298 1 True GTK_UPDATE_ALWAYS False False 50 1 999 0.10000000149 10 0 4 False False 0 False False 4 True 0 0.5 GTK_SHADOW_ETCHED_IN 2 True 0.5 0.5 1 1 0 0 0 0 681 481 True True GDK_BUTTON_PRESS_MASK True Structure Data Plots False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 True Xnec2c: Radiation Patterns GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_WEST True False True False 0 True False 0 True GTK_PACK_DIRECTION_LTR GTK_PACK_DIRECTION_LTR True _File True True gtk-new True True gtk-open True True gtk-save True True gtk-save-as True True Save As gnuplot True True gtk-save-as 1 0.5 0.5 0 0 True True gtk-quit True True _View True True Display gain data relevant to polarization Polarization True True Total gain Total True True True Gain in horizontal polarization Horizontal True False rdpattern_total True Gain in vertical polarization Vertical True False rdpattern_total True Gain in rhcp Right Hand True False rdpattern_total True Gain in lhcp Left Hand True False rdpattern_total True Select a style of gain scaling Gain Scaling True True Linear power scaling Linear Power True True True Linear field voltage scaling Linear Voltage True False rdpattern_linear_power True Scale gain in ARRL style ARRL Style True False rdpattern_linear_power True Logarithmic gain scaling Logarithmic True False rdpattern_linear_power True Near Field True True Display near E field Near E Field True True True Display near H field Near H Field True True True Display Poynting vector Poynting Vector True True True Animate Dialog True True Total Field True True Peak Value True True True Snapshot True False near_peak_value True Synchronize projection parametrs in different windows Common Projection True True True Synchronize frequency selection in different windows Common Frequency True True True Overlay Structure True False 0 False False True 4 False False True False 0 True Calculate and display radiation pattern True Gain Pattern True GTK_RELIEF_NORMAL True False False 0 False False True Calculate and display the near E/H fields True E/H Fields True GTK_RELIEF_NORMAL True False False 0 False False True 4 False False True Frequency Loop False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 True 0 0 False False True Start Frequency Loop True GTK_RELIEF_NORMAL True True gtk-media-play 4 0.5 0.5 0 0 0 False False True Pause Frequency Loop True GTK_RELIEF_NORMAL True True gtk-media-pause 4 0.5 0.5 0 0 0 False False True Reset Frequency Loop True GTK_RELIEF_NORMAL True True gtk-media-rewind 4 0.5 0.5 0 0 0 False False True Step False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 True 0 0 False False True Current Frequency Step True False True 3 1 True â— False 3 0 True True 0 False False 0 False False True 4 False False 30 True False 0 True 0.0 False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE 5 False 0 1 False False 160 True Color code for Gain or E/H field values 1 False False True 0.00 False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE 9 False 0 1 False False True Gain in direction of viewer (perpenticular to screen) True True True 0 - - - - - True * False 6 1 False False True dB False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 True 0 1 False False True Enter frequency in MHz True 0.0010000000475 3 True GTK_UPDATE_ALWAYS False False 0.00999999977648 0.00999999977648 9999 0.00999999977648 10 0 1 False False True MHz False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 0 PANGO_ELLIPSIZE_NONE -1 True 0 1 False False True Enable data calculation on frequency change True Apply True GTK_RELIEF_NORMAL True True False True 2 False False True Calculate data for new frequency True GTK_RELIEF_NORMAL True True gtk-apply 4 0.5 0.5 0 0 2 False False 0 False False True 4 False False True Radiation Patterns False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE 14 True 0 0 False False 4 True 0 0.5 GTK_SHADOW_ETCHED_IN 2 True 0.5 0.5 1 1 0 0 0 0 681 481 True True True False 0 True View Radiation False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE 14 False 0 0 False False True View radiation pattern along X-axis True X True GTK_RELIEF_NORMAL True 0 False False True View radiation pattern along Y-axis True Y True GTK_RELIEF_NORMAL True 0 False False True View radiation pattern along Z-axis True Z True GTK_RELIEF_NORMAL True 0 False False True View radiation pattern in default projection True GTK_RELIEF_NORMAL True True gtk-redo 4 0.5 0.5 0 0 0 False False True gtk-refresh 4 0.5 0.5 0 0 0 True True True Rotate radiation pattern around Z-axis True 1 0 True GTK_UPDATE_ALWAYS False True 45 -360 360 1 10 0 0 True True True gtk-go-down 4 0.5 0.5 0 0 0 True True True Incline radiation pattern to plane of screen True 1 0 True GTK_UPDATE_ALWAYS False True 45 -180 180 1 10 0 0 True True True Zoom % False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 True 0 0 False False True Zoom Structure Display True 1 0 False GTK_UPDATE_ALWAYS False False 100 10 999 1 10 0 0 True True True Zoom In True GTK_RELIEF_NORMAL True True gtk-zoom-in 4 0.5 0.5 0 0 0 False False True Zoom Out True GTK_RELIEF_NORMAL True True gtk-zoom-out 4 0.5 0.5 0 0 0 False False True Zoom to Default 1:1 True GTK_RELIEF_NORMAL True True gtk-zoom-100 4 0.5 0.5 0 0 0 False False label_item 0 True True 2 True Confirmation GTK_WINDOW_TOPLEVEL GTK_WIN_POS_MOUSE True True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True True False 0 True GTK_BUTTONBOX_END 2 True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 2 True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END True False 0 True gtk-dialog-question 6 0.5 0.5 4 4 0 True True True Quit xnec2c? False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True True Error GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER True True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True True False 0 True GTK_BUTTONBOX_END 2 True True True gtk-quit True GTK_RELIEF_NORMAL True -5 2 True True True gtk-ok True GTK_RELIEF_NORMAL True -5 2 True True True gtk-stop True GTK_RELIEF_NORMAL True 0 0 False True GTK_PACK_END True False 0 True gtk-dialog-error 6 0.5 0.5 4 4 0 True True True Error False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True True Near Field Animation GTK_WINDOW_TOPLEVEL GTK_WIN_POS_MOUSE False True False True False False GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True False True True False 0 True GTK_BUTTONBOX_END 2 True True True gtk-apply True GTK_RELIEF_NORMAL True -10 2 True True True gtk-cancel True GTK_RELIEF_NORMAL True -6 2 True True True True gtk-ok True GTK_RELIEF_NORMAL True -5 0 False True GTK_PACK_END True 2 2 False 0 0 True Steps/Cycle False False GTK_JUSTIFY_LEFT False False 0 0.5 2 2 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 2 fill True Animate Frequency (Hz) False False GTK_JUSTIFY_LEFT False False 0 0.5 2 2 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 2 fill True Steps per Cycle of Excitation True 1 0 True GTK_UPDATE_ALWAYS False False 36 12 360 1 10 0 0 1 1 2 4 True Frequency of Excitaion Animation True 1 1 True GTK_UPDATE_ALWAYS False False 1 0.10000000149 10 0.10000000149 10 0 1 2 1 2 4 0 True True 4 True Xnec2c: NEC2 Input File Editor GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_WEST True False True False 0 True False 0 2 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True False 0 2 True True gtk-add True GTK_RELIEF_NORMAL True 0 False False 2 True True gtk-remove True GTK_RELIEF_NORMAL True 0 False False 2 True True gtk-clear True GTK_RELIEF_NORMAL True 0 False False True Edit Tree View Rows False False GTK_JUSTIFY_LEFT False False 0.5 0.5 2 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 False True 2 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True False 0 2 True True gtk-save-as True GTK_RELIEF_NORMAL True 0 False False 2 True True gtk-save True GTK_RELIEF_NORMAL True 0 False False 2 True True gtk-apply True GTK_RELIEF_NORMAL True True False True 0 False False 2 True True gtk-revert-to-saved True GTK_RELIEF_NORMAL False 0 False False True NEC2 Input File False False GTK_JUSTIFY_LEFT False False 0.5 0.5 2 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 False True 0 False True 2 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True True GTK_POLICY_ALWAYS GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT 70 True True True True True True False False False True Comments False False GTK_JUSTIFY_LEFT False False 0.5 0.5 2 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 2 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 2 8 False 0 0 2 True True Wire True GTK_RELIEF_NORMAL True 0 1 0 1 2 True True Arc True GTK_RELIEF_NORMAL True 1 2 0 1 2 True True Helix True GTK_RELIEF_NORMAL True 2 3 0 1 2 True True Patch True GTK_RELIEF_NORMAL True 3 4 0 1 2 True True Cylinder True GTK_RELIEF_NORMAL True 4 5 0 1 2 True True Move True GTK_RELIEF_NORMAL True 5 6 0 1 2 True True Reflect True GTK_RELIEF_NORMAL True 6 7 0 1 2 True True Scale True GTK_RELIEF_NORMAL True 7 8 0 1 True Edit Geometry Data False False GTK_JUSTIFY_LEFT False False 0.5 0.5 2 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 False True 2 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True True GTK_POLICY_ALWAYS GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT 70 True True True True True True False False False True Geometry False False GTK_JUSTIFY_LEFT False False 0.5 0.5 2 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 2 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 2 6 False 0 0 2 True True Excitation True GTK_RELIEF_NORMAL True 0 1 0 1 2 True True Frequency True GTK_RELIEF_NORMAL True 1 2 0 1 2 True True Ground (GN) True GTK_RELIEF_NORMAL True 2 3 0 1 2 True True Radiation True GTK_RELIEF_NORMAL True 0 1 1 2 2 True True Loading True GTK_RELIEF_NORMAL True 3 4 0 1 2 True True Network True GTK_RELIEF_NORMAL True 4 5 0 1 2 True True Trans. Line True GTK_RELIEF_NORMAL True 5 6 0 1 2 True True Near Fields True GTK_RELIEF_NORMAL True 1 2 1 2 2 True True Execute True GTK_RELIEF_NORMAL True 5 6 1 2 2 True True Interaction True GTK_RELIEF_NORMAL True 4 5 1 2 2 True True Kernel True GTK_RELIEF_NORMAL True 3 4 1 2 2 True True Ground (GD) True GTK_RELIEF_NORMAL True 2 3 1 2 True Edit Control Commands False False GTK_JUSTIFY_LEFT False False 0.5 0.5 2 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 False True 2 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True True GTK_POLICY_ALWAYS GTK_POLICY_ALWAYS GTK_SHADOW_IN GTK_CORNER_TOP_LEFT 70 True True True True True True False False False True Commands False False GTK_JUSTIFY_LEFT False False 0.5 0.5 2 0 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 True Wire Element (GW & GC cards) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 2 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 6 4 False 2 2 True No. Segments False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Segs % lambda False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 0 1 fill True False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 0 1 fill True Wire X1 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True True Wire Y1 False False GTK_JUSTIFY_LEFT False True 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True Wire Z1 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 2 3 fill True Wire X2 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True Wire Y2 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 4 5 fill True Wire Z2 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 4 5 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 1 1 100000 1 10 0 0 1 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 15 1 100000 1 10 0 1 2 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 5 0.0010000000475 30 9.99999974738e-06 10 0 2 3 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 0 1 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 1 2 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False -1 -10000 10000 9.99999974738e-06 10 0 2 3 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 2 3 5 6 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 1 2 5 6 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 0 1 5 6 2 4 True Tag Number False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.00300000002608 0 100 9.99999974738e-06 10 0 3 4 1 2 2 4 True Wire Diameter False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 0 1 fill True Wire Length False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 2 3 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 2 9.99999974738e-06 10000 9.99999974738e-06 10 0 3 4 3 4 2 4 True Conductivity S/m False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 4 5 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 0 1000000000 9.99999974738e-06 10 0 3 4 5 6 2 4 2 True True Tapered Wire True GTK_RELIEF_NORMAL True False False True label_item 2 True True 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 2 4 False 2 2 True Length Taper False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Diameter Seg 1 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Diameter Seg N False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 0 1 fill True Diam. Taper False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 0 1 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.920000016689 0.5 2 9.99999974738e-06 10 0 3 4 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.0179999992251 9.99999974738e-06 100 9.99999974738e-06 10 0 2 3 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.0309999994934 9.99999974738e-06 100 9.99999974738e-06 10 0 1 2 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.920000016689 0.5 2 9.99999974738e-06 10 0 0 1 1 2 2 4 True Wire Taper Data False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 2 2 True True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Patch Element (SP & SC Cards) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 2 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True False 0 2 True True Arbitary True GTK_RELIEF_NORMAL True True False True 0 True True 2 True True Rectangle True GTK_RELIEF_NORMAL True False False True patch_arbitrary_radiobutton 0 True True 2 True True Triangle True GTK_RELIEF_NORMAL True False False True patch_arbitrary_radiobutton 0 True True 2 True True Quadrilateral True GTK_RELIEF_NORMAL True False False True patch_arbitrary_radiobutton 0 True True 2 True True Surface True GTK_RELIEF_NORMAL True False False True patch_arbitrary_radiobutton 0 True True True Patch Type False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 2 2 False 0 0 True Corners 1-2 sub-division (NX) False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Corners 2-3 sub-division (NY) False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 8 1 10000 1 10 0 0 1 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 8 1 10000 1 10 0 1 2 1 2 2 4 True Surface Sub-division False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 4 3 False 2 2 True Center - X False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Center - Y False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Center - Z False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 0 1 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 0 1 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 1 2 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 2 3 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 45 -10000 10000 9.99999974738e-06 10 0 0 1 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 45 -10000 10000 9.99999974738e-06 10 0 1 2 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.10000000149 -10000 10000 9.99999974738e-06 10 0 2 3 3 4 2 4 True Normal - Elev. False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True Normal - Azim. False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True Patch Area False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 2 3 fill True SP/SM Cards False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True False 2 True 2 3 False 2 2 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 0 1 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 1 2 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 2 3 1 2 2 4 True Corner 3 - X False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Corner 3 - Y False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Corner 3 - Z False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 0 1 fill 0 True True True 2 3 False 2 2 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 0 1 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 1 2 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 2 3 1 2 2 4 True Corner 4 - X False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Corner 4 - Y False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Corner 4 - Z False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 0 1 fill 0 True True True SC Card False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 2 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Arc Element (GA card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True True True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 4 4 False 2 2 True End 1 Angle False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True End 2 Angle False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 2 3 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 45 -360 360 9.99999974738e-06 10 0 1 2 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 135 -360 360 9.99999974738e-06 10 0 2 3 3 4 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 1 1 100000 1 10 0 0 1 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 15 1 100000 1 10 0 1 2 1 2 2 4 True Tag Number False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True No. Segments False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Radius from Y False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 9.99999974738e-06 10000 9.99999974738e-06 10 0 0 1 3 4 2 4 True Segs % lambda False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 0 1 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 5 0.0010000000475 30 9.99999974738e-06 10 0 2 3 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 0 1000000000 9.99999974738e-06 10 0 3 4 3 4 True Conductivity S/m False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 2 3 fill True Wire Diameter False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 0 1 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.00300000002608 9.99999974738e-06 100 9.99999974738e-06 10 0 3 4 1 2 True Wire Arc Data False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 2 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Co-ordinate Transformation (GM card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 6 3 False 2 2 True Tag Increment False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True New Structures False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Start From Tag False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 0 1 fill True Rotate about X False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True Rotate about Y False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True Rotate about Z False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 2 3 fill True Move along X False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True Move along Y False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 4 5 fill True Move along Z False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 4 5 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 1 2 5 6 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 0 1 5 6 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 2 3 5 6 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -360 360 9.99999974738e-06 10 0 0 1 3 4 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 0 0 100000 1 10 0 0 1 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 0 0 100000 1 10 0 1 2 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 0 0 10000 1 10 0 2 3 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -360 360 9.99999974738e-06 10 0 1 2 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -360 360 9.99999974738e-06 10 0 2 3 3 4 2 4 True Co-ordinate Transformation Data False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Helical Element (GA card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 2 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 7 4 False 2 2 True Segments/Turn False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 1 2 fill True Segs % lambda False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 1 2 fill True Turns Spacing False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 3 4 fill True True Helix Length False False GTK_JUSTIFY_LEFT False True 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 3 4 fill True Radius @ X,Z=0 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 3 4 fill True Rad. @ X,Z=HL False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 5 6 fill True Rad. @ Y,Z=HL False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 5 6 fill True Wire Diameter False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 5 6 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 1 1 100000 1 10 0 0 1 2 3 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 8 1 100000 1 10 0 1 2 2 3 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 5 0.0010000000475 30 9.99999974738e-06 10 0 2 3 2 3 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 0 10000 9.99999974738e-06 10 0 0 1 4 5 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 5 9.99999974738e-06 10000 9.99999974738e-06 10 0 1 2 4 5 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 9.99999974738e-06 10000 9.99999974738e-06 10 0 2 3 4 5 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.00300000002608 9.99999974738e-06 100 9.99999974738e-06 10 0 2 3 6 7 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 9.99999974738e-06 10000 9.99999974738e-06 10 0 1 2 6 7 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 9.99999974738e-06 10000 9.99999974738e-06 10 0 0 1 6 7 2 4 True Tag Number False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 8 0.10000000149 10000 9.99999974738e-06 10 0 3 4 2 3 2 4 True Num. of Turns False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 1 2 fill True Radius @ Y,Z=0 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 3 4 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 9.99999974738e-06 10000 9.99999974738e-06 10 0 3 4 4 5 2 4 True Conductivity S/m False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 3 4 5 6 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 0 1000000000 9.99999974738e-06 10 0 3 4 6 7 2 4 2 True True Link @ Z=0 True GTK_RELIEF_NORMAL True False False True 2 3 0 1 fill 2 True True Link @ Z=HL True GTK_RELIEF_NORMAL True False False True helix_linkzo_radiobutton 3 4 0 1 fill 2 True True Link all Radii True GTK_RELIEF_NORMAL True True False True helix_linkzo_radiobutton 1 2 0 1 fill 2 True True Left Hand True GTK_RELIEF_NORMAL True False False True 0 1 0 1 fill True GH Card False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 2 True True True True 2 2 True True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Reflect Structure (GX card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 3 2 False 8 8 2 True True Reflect in XZ plane True GTK_RELIEF_NORMAL True False False True 0 1 2 3 fill True True 1 0 True GTK_UPDATE_ALWAYS False False 0 0 100000 1 10 0 0 1 1 2 fill 2 True True Reflect in XY plane True GTK_RELIEF_NORMAL True False False True 1 2 2 3 fill 2 True True Reflect in YZ plane True GTK_RELIEF_NORMAL True False False True 1 2 1 2 fill True Tag Number Increment False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Reflect Options False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Scale Structure (GS card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 3 2 True 0 0 True Structure Scale Factor False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True From Tag No. False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True To Tag No. False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 1 2 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 0 0 100000 1 10 0 0 1 2 3 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 0 0 100000 1 10 0 1 2 2 3 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 0 100000 9.99999974738e-06 10 0 1 2 0 1 True Scale Strucure False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Cylindrical Structure (GR card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 2 2 False 2 8 True Tag Number Increment False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Number of Structures False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 0 0 100000 1 10 0 0 1 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 4 1 100000 1 10 0 1 2 1 2 2 4 True Cylindrical Structure False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Thin Wire Kernel (EK Card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 8 True True Extended Thin Wire Kernel True GTK_RELIEF_NORMAL True True False True True Thin Wire Kernel False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 False False True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Execute Command (XQ Card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 2 2 False 2 2 2 True True No Pattern Cuts True GTK_RELIEF_NORMAL True True False True 0 1 0 1 2 True True Pattern in XZ Plane True GTK_RELIEF_NORMAL True False False True execute_none_radiobutton 1 2 0 1 fill 2 True True Pattern in YZ Plane True GTK_RELIEF_NORMAL True False False True execute_none_radiobutton 0 1 1 2 fill 2 True True Both XZ/YZ Patterns True GTK_RELIEF_NORMAL True False False True execute_none_radiobutton 1 2 1 2 fill True Execute Command False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 False False True Interaction Approx Range (KH Card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 8 True False 0 True Approximation Range (W/lengths) False False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 9.99999974738e-06 10000 9.99999974738e-06 10 0 4 True True True Interaction Approximation Range False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Ground Parameters (GN & GD Cards) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 3 2 False 2 2 2 True True Perfect Ground True GTK_RELIEF_NORMAL True True False True 0 1 0 1 2 True True Reflection Coeff. Approx True GTK_RELIEF_NORMAL True False False True ground_perf_radiobutton 1 2 0 1 fill 2 True True Sommerfeld/Norton True GTK_RELIEF_NORMAL True False False True ground_perf_radiobutton 0 1 1 2 fill 2 True True Nullify Previous Params True GTK_RELIEF_NORMAL True False False True ground_perf_radiobutton 1 2 1 2 fill 2 True True Radial Ground Screen True GTK_RELIEF_NORMAL True False False True 0 1 2 3 fill 2 True True Second Medium (Cliff) True GTK_RELIEF_NORMAL True False False True 1 2 2 3 fill True Ground Type False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 2 2 False 2 2 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 12 0 10000 9.99999974738e-06 10 0 0 1 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.005 0 10000 9.99999974738e-06 10 0 1 2 1 2 2 4 True Relative Dielectric Const. False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Ground Conductivity S/m False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True 1st Medium Parameters False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 4 2 False 2 2 True Relative Dielectric Const. False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Ground Conductivity S/m False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Distance to 2nd Medium False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True Dist. below 1st Medium False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 12 0 10000 9.99999974738e-06 10 0 0 1 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.005 0 10000 9.99999974738e-06 10 0 1 2 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 9.99999974738e-06 10000 9.99999974738e-06 10 0 1 2 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 9.99999974738e-06 10000 9.99999974738e-06 10 0 0 1 3 4 2 4 True 2nd Medium Parameters False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 3 2 False 2 2 True Number of Radials False False GTK_JUSTIFY_LEFT False False 0.899999976158 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Radial Screen Radius False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 1 2 fill True Radial Wire Diameter False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 1 2 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 4 1 1000 1 10 0 1 2 0 1 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.00499999988824 9.99999974738e-06 10 9.99999974738e-06 10 0 1 2 2 3 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 9.99999974738e-06 10000 9.99999974738e-06 10 0 0 1 2 3 2 4 True Radial Screen Parameters False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Near Fields Command (NE/NH Cards) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 2 2 True 0 0 2 True True Near Magnetic Field True GTK_RELIEF_NORMAL True False False True 1 2 0 1 2 True True Near Electric Field True GTK_RELIEF_NORMAL True True False True 0 1 0 1 2 True True Rectangular Co-ordinates True GTK_RELIEF_NORMAL True True False True 0 1 1 2 2 True True Spherical Co-ordinates True GTK_RELIEF_NORMAL True False False True nearfield_rect_radiobutton 1 2 1 2 True Field Type & Co-ordinates False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 6 3 False 0 0 True NX False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True NY False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True NZ False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 0 1 fill True X False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True Y False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True Z False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 2 3 fill True DX False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True DY False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 4 5 fill True DZ False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 4 5 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 4 1 10000 1 10 0 0 1 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 4 1 10000 1 10 0 1 2 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 4 1 10000 1 10 0 2 3 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 0 1 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 1 2 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 2 3 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -1000 1000 9.99999974738e-06 10 0 0 1 5 6 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -1000 1000 9.99999974738e-06 10 0 1 2 5 6 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -1000 1000 9.99999974738e-06 10 0 2 3 5 6 2 4 True Field Pattern Parameters False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 False False True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Radiation Pattern (RP Card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False gtk-dialog-info True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 4 2 False 0 0 2 True True Normal (Space) Wave True GTK_RELIEF_NORMAL True True False True 0 1 0 1 2 True True Circular Cliff + Radials True GTK_RELIEF_NORMAL True False False True radiation_i10_radiobutton 0 1 3 4 2 True True Radial wire screen True GTK_RELIEF_NORMAL True False False True radiation_i10_radiobutton 0 1 2 3 True True Linear Cliff True GTK_RELIEF_NORMAL True False False True radiation_i10_radiobutton 0 1 1 2 2 True True Space + Ground Wave True GTK_RELIEF_NORMAL True False False True radiation_i10_radiobutton 1 2 0 1 2 True True Circular Cliff True GTK_RELIEF_NORMAL True False False True radiation_i10_radiobutton 1 2 1 2 2 True True Linear Cliff + Radials True GTK_RELIEF_NORMAL True False False True radiation_i10_radiobutton 1 2 2 3 True <b>See GN/GD Card Documentation</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 3 4 fill True Wave Type and Ground (I1) False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 10 2 False 0 0 2 True True Major & Minor Axis & Total Gain True GTK_RELIEF_NORMAL True False False True 0 1 0 1 2 True True Vertical, Horizontal & Total Gain True GTK_RELIEF_NORMAL True True False True radiation_x0_radiobutton 1 2 0 1 2 True True No Normalized Gain True GTK_RELIEF_NORMAL True True False True 0 1 2 3 2 True True Minor Axis Gain Normalized True GTK_RELIEF_NORMAL True False False True radiation_n0_radiobutton 0 1 3 4 2 True True Horizontal Axis Gain Normalized True GTK_RELIEF_NORMAL True False False True radiation_n0_radiobutton 0 1 4 5 2 True True Print/Normalize Power Gain True GTK_RELIEF_NORMAL True True False True 0 1 6 7 2 True True No Gain Averaging True GTK_RELIEF_NORMAL True False False True 0 1 8 9 2 True True Points in Average Not Printed True GTK_RELIEF_NORMAL True False False True radiation_a0_radiobutton 0 1 9 10 2 True True Average Gain Computed True GTK_RELIEF_NORMAL True False False True radiation_a0_radiobutton 1 2 8 9 2 True True Print/Normalize Directive Gain True GTK_RELIEF_NORMAL True False False True radiation_d0_radiobutton 1 2 6 7 2 True True Total Gain Normalized True GTK_RELIEF_NORMAL True False False True radiation_n0_radiobutton 1 2 4 5 2 True True Vertical Axis Gain Normalized True GTK_RELIEF_NORMAL True False False True radiation_n0_radiobutton 1 2 3 4 2 True True Major Axis Gain Normalized True GTK_RELIEF_NORMAL True False False True radiation_n0_radiobutton 1 2 2 3 True <b>See RP Card Documentation</b> False True GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 9 10 fill True 0 1 1 2 fill True 1 2 1 2 fill fill True 0 1 5 6 fill True 1 2 5 6 fill fill True 0 1 7 8 fill True 1 2 7 8 fill fill True Data Output Control (XNDA) False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 5 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 6 3 False 0 0 True Gain Normalization False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 4 5 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 0 1 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 1 2 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -1000 1000 9.99999974738e-06 10 0 2 3 5 6 2 4 True Initial Theta (deg) False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True Initial Phi (deg) False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 4 1 10000 1 10 0 1 2 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 4 1 10000 1 10 0 0 1 1 2 2 4 True Points in Phi False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Points in Theta False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Increment in Theta False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 5 -1000 1000 9.99999974738e-06 10 0 0 1 5 6 2 4 True Field Point Distance False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 2 3 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -1000 1000 9.99999974738e-06 10 0 2 3 3 4 2 4 True Increment in Phi False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 4 5 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 5 -1000 1000 9.99999974738e-06 10 0 1 2 5 6 2 4 True Radiation Pattern Parameters False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 False False True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Excitation Command (EX Card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 2 3 False 0 0 2 True True Voltage Source True GTK_RELIEF_NORMAL True True False True 0 1 0 1 2 True True Incident Linear Wave True GTK_RELIEF_NORMAL True False False True excitation_i10_radiobutton 1 2 0 1 2 True True Incident RH Wave True GTK_RELIEF_NORMAL True False False True excitation_i10_radiobutton 2 3 0 1 2 True True Incident LH Wave True GTK_RELIEF_NORMAL True False False True excitation_i10_radiobutton 0 1 1 2 2 True True Current Slope Discontinuity True GTK_RELIEF_NORMAL True False False True excitation_i10_radiobutton 2 3 1 2 2 True True Current Source True GTK_RELIEF_NORMAL True False False True excitation_i10_radiobutton 1 2 1 2 True Excitation Type False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True False 0 2 True True Maximum Admittance Matrix Asymmetry True GTK_RELIEF_NORMAL True False False True 0 False False 2 True True Impedance of Source Segment True GTK_RELIEF_NORMAL True False False True 0 False False True Print Control False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 6 3 False 0 0 True Tag Number False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Segment Number False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Voltage - Real Part False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True Voltage - Imaginary Part False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True Eta False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 2 3 fill True Theta False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True Phi False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 4 5 fill True Ratio False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 4 5 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 1 1 10000 1 10 0 0 1 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 1 1 10000 1 10 0 1 2 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 1 2 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 2 3 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 0 1 5 6 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 1 2 5 6 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0 -10000 10000 9.99999974738e-06 10 0 2 3 5 6 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 0 1 3 4 2 4 True Excitation Parameters False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Frequecy Command (FR Card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True False 0 2 True True Additive Stepping True GTK_RELIEF_NORMAL True True False True 0 True False 2 True True Multiplicative Stepping True GTK_RELIEF_NORMAL True False False True frequency_add_radiobutton 0 True False True Frequency Stepping False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 4 2 False 0 0 True No. Frequency Points False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Frequency Step (MHz) False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 11 1 10000 1 10 0 0 1 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.10000000149 -1000 1000 9.99999974738e-06 10 0 1 2 1 2 2 4 True Start Frequency (MHz) False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True End Frequency (MHz) False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 50 9.99999974738e-06 10000 9.99999974738e-06 10 0 0 1 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 100 9.99999974738e-06 10000 9.99999974738e-06 10 0 1 2 3 4 2 4 True Frequency Stepping Parameters False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 False False 4 True Loading Command (LD Card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 3 3 False 0 0 2 True True Series, Lumped True GTK_RELIEF_NORMAL True True False True 0 1 1 2 fill 2 True True Parallel, Distributed True GTK_RELIEF_NORMAL True False False True loading_slrlc_radiobutton 0 1 2 3 fill 2 True True Resistance & Reactance True GTK_RELIEF_NORMAL True False False True loading_slrlc_radiobutton 1 2 2 3 fill 2 True True Parallel, Lumped True GTK_RELIEF_NORMAL True False False True loading_slrlc_radiobutton 1 2 1 2 fill 2 True True Series, Distributed True GTK_RELIEF_NORMAL True False False True loading_slrlc_radiobutton 2 3 1 2 fill 2 True True Wire Conductivity True GTK_RELIEF_NORMAL True False False True loading_slrlc_radiobutton 2 3 2 3 fill 2 True True Short all Loads (Nulls previous Loading Cards) True GTK_RELIEF_NORMAL True False False True loading_slrlc_radiobutton 0 3 0 1 True Loading Type False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 4 3 False 0 0 True Load Tag Number False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True From Segment # False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True To Segment # False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 0 1 fill True Resistance False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True Inductance False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True Capacitance False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 2 3 2 3 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 0 1000000000 9.99999974738e-06 10 0 0 1 3 4 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 1 0 10000 1 10 0 0 1 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 2 0 10000 1 10 0 1 2 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 3 0 10000 1 10 0 2 3 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -1000000 1000000 9.99999974738e-06 10 0 1 2 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 0 1000000000 9.99999974738e-06 10 0 2 3 3 4 2 4 True Loading Parameters False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Network Command (NT Card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 4 2 False 0 0 True Tag Number, Port 2 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 1 1 10000 1 10 0 1 2 3 4 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 1 1 10000 1 10 0 0 1 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 1 1 10000 1 10 0 1 2 1 2 2 4 True Segment Num, Port 1 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Tag Number, Port 1 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Segment Num, Port 2 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 2 1 10000 1 10 0 0 1 3 4 2 4 True Segment Identity False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 6 2 False 0 0 True Element 1,1 Real Part False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Element 1,1 Imag Part False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Element 1,2 Real Part False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True Element 1,2 Imag Part False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 0 1 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 1 2 3 4 2 4 True Element 2,2 Real Part False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True Element 2,2 Imag Part False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 4 5 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 0 1 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 1 2 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 1 2 5 6 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 0 1 5 6 2 4 True Admittance Matrix Elements False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Trans. Line Command (TL Card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 4 2 False 0 0 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 1 1 10000 1 10 0 1 2 3 4 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 1 1 10000 1 10 0 0 1 1 2 2 4 True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 1 1 10000 1 10 0 1 2 1 2 2 4 True Segment Num, End 1 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Tag Number, End 1 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Segment Num, End 2 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True True 0.00999999977648 0 True GTK_UPDATE_ALWAYS False False 2 1 10000 1 10 0 0 1 3 4 2 4 True Tag Number, End 2 False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True Segment Identity False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 6 2 False 0 0 True Characteristic Impedance False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 4 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Length of Tx Line (m) False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 4 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True End 1 Y Real Part (S) False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True End 1 Y Imag Part (S) False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 0 1 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 1 2 3 4 2 4 True End 2 Y Real Part (S) False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 4 5 fill True End 2 Y Imag Part (S) False False GTK_JUSTIFY_LEFT False False 0.10000000149 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 4 5 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 0 1 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 1 2 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 1 2 5 6 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 -10000 10000 9.99999974738e-06 10 0 0 1 5 6 2 4 4 True True Crossed Transmission Line True GTK_RELIEF_NORMAL True False False True label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Ground Parameters (GD Card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True 4 2 False 2 2 True Relative Dielectric Const. False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 0 1 fill True Ground Conductivity S/m False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 0 1 fill True Distance to 2nd Medium False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 1 2 3 fill True Dist. below 1st Medium False False GTK_JUSTIFY_LEFT False False 0 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 1 2 2 3 fill True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 12 0 10000 9.99999974738e-06 10 0 0 1 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 0.005 0 10000 9.99999974738e-06 10 0 1 2 1 2 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 9.99999974738e-06 10000 9.99999974738e-06 10 0 1 2 3 4 2 4 True True 0.00999999977648 5 True GTK_UPDATE_ALWAYS False False 1 9.99999974738e-06 10000 9.99999974738e-06 10 0 0 1 3 4 2 4 True 2nd Medium Parameters False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True gtk-new True GTK_RELIEF_NORMAL True 0 True True 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 True True 4 True Geometry End (GE Card) GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE False True False True False False GDK_WINDOW_TYPE_HINT_NORMAL GDK_GRAVITY_NORTH_WEST True False True False 0 4 True 0 0.5 GTK_SHADOW_ETCHED_IN True 0.5 0.5 1 1 0 0 12 0 True False 0 2 True True No Ground, Free Space condition True GTK_RELIEF_NORMAL True True False True 0 True False 2 True True Ground present, Strucure reflection True GTK_RELIEF_NORMAL True False False True gend_nognd_radiobutton 0 False False 2 True True Ground present, no Structure reflection True GTK_RELIEF_NORMAL True False False True gend_nognd_radiobutton 0 False False True Ground Plane type False False GTK_JUSTIFY_LEFT False False 0.5 0.5 4 4 PANGO_ELLIPSIZE_NONE -1 False 0 label_item 0 True True True True 0 2 True True GTK_RELIEF_NORMAL True True 0.5 0.5 0 0 0 0 0 0 True False 2 True gtk-delete 4 0.5 0.5 0 0 0 False False True Delete Card True False GTK_JUSTIFY_LEFT False False 0.5 0.5 0 0 PANGO_ELLIPSIZE_NONE -1 False 0 0 False False 0 True True 2 True True gtk-apply True GTK_RELIEF_NORMAL True 0 True True 2 True True gtk-ok True GTK_RELIEF_NORMAL True 0 True True 0 False False 5 True False Xnec2c (C) 2007-2010 Neoklis Kyriazis xnec2c is an interactive graphical wrapper around a modified version of nec2c, which is itself a translation to C of the original FORTRAN NEC2 Numerical Electromagnetics Code. xnec2c can display frequency-dependent data (gain, input impedance, vswr etc) in a graphical format. It can also display radiation pattern data in a rotatable wire frame format and near-field (E, H, S vectors) in a grid format. xnec2c has a built-in NEC2 input file editor that makes it easier to create or edit antenna description files and specify NEC2 commands. PLEASE read the documantation in the doc/ sub-directory as xnec2c is not fully compatible with NEC2 input files and it works in different ways! GPL v2 or higher False http://www.qsl.net/5b4az Neoklis Kyriazis Ham Radio Call: 5B4AZ http://www.qsl.net/5b4az Neoklis Kyriazis translator-credits xnec2c-3.4/xnec2c.gladep000066400000000000000000000004211257141547200151070ustar00rootroot00000000000000 Xnec2c xnec2c FALSE

›lÖ²–$’Xþâ+ (P»‘G µèÞÁ”˜¼Ñ›Þ¼È‹ì`¹ärƒ¬bqÄ•)k*™ªZ¯4àdá¿°÷YøøcøñGسÞ{Ï&×]g“‡¬,X±Ö®-[ÇÌ™ö ;vøeòL0±ÄòO‘J*Ç8Æ2–1…)DMy¬a 3˜Á`ÓšÖŒd$s™Ëf6SH!“ˆˆH½ ‰‰™ ¹¹ö11BBj¦Žš*[Kjý Ä(Fq·‘M¶ÛÈ-•I'Ýíy‡¢)Ž8îænÞæí*½ŸšªWj‘/£!y{f!+Ë^¯PrÞ»×}›~4RÙ;~ôsuIÈ@‚)6Ÿ|ÒHc kH"‰4ÒÈ!GmIDD‡ÞFŒ(^Ö¹3L›W_ ×^[ù—ƒ¾ÔQSejÑ‚¼Â+<Îã¼À ^¿ö ¾à-Þb5«ÙÃ:Ò‘çxŽ›¸‰Çy¼Ü}o¾­J½âgɃ§Ñª+Y(ÏÌ™Å;v-&®3hE›Œ'€èMoW—¤k¸Æ-A/¤tÒ]]’RH!›lµ‘±cízf&Üu—±W/øç?íò1c`ñâê«£¦Ê6Ôâiž¦ØÈFþÊ_}J úÑÏíyÜÏýÜÄMDUå÷TSõJ$ññ §OWo²PYá²È*s‘ó·|KRÑ”B G8¢6#""RÚøñöqÊøì3ûsj*<ú¨½¾qüøÊÒ}©£¦Ê6Äb ™Ä$òÉç—ü’B Ï»Îv´ðx`´Ÿý´§=9ä°‹],cÏ󦥹/OMµÑÑÕ[GM•mh DA¼Á4¡ Ïð [ÙzÞu¶¤%oñËY^n™H";âLï¢i¸†køŽïª\¯Ô²ŽaÐ ;hw¦¦M=—_²{¬^' àÛ½¢ˆ"ƒ µ_µ³_“•å¾üðaûXÙ(Œ¾ÖQSeZ1•©ô »ØÅ“NF— WÒÝBgDDDüÞ™30mš+ÆÉãÕ‚ÄC\ÑÔîËFEƱ 8¤×NÛÒEÔŠW‰G1SSÌ/‡‰ˆÆñO?Þû‰|M<Ýѹ¥Zv‡d\ Cú»””M¶Ûu %é^ """¢Bê_òPÞhHÕ™,”§ ¥Zžôp% 1ĸ%ùä“J*«‹¦õ¬×(]"""¢B`ò±±pútõ& •%õ@$‘®„!Ž8"ˆp[¿í®„!™dNá~á·®›%R?9pé¥ðÔSpÛme×Z3ÉB=SÙu 9èJV³Úm”.QQOÿRö.ÎÑÑvîÓzõ‚–-+~Ý’%ðØc 2Yð4oSšVzC2É®„aÛÔ¾DDDD”@ÔcÁÁpå•ÅÉÂUWÙ›²—-ûý÷ö6æ-[BLŒûºz~AsUãX¥×1䓯v&"""¢Â?$Vñ8Á%µlioIÞ§}¼ê*¸ì2{Æ¡$c`×.ؼÙ& _~iogž•U\¦†T™‹¹Øãº0Â*½ŽADDDD”@ø‡øx’gÜâÃË“g7¤K.)›läçÃ7ß|=] IDAT' ›7ÛÇ“'+Þv= ©"D[4 gx… DG:ê:%õ#y(3RL œ8a† /,ûšœœâd!=ÝÎ[¶ØåUQFCªH[Ú2Œa®¤ár.w[”£´¡M¹¯Uò """¢¢þ%NÆÿ|ò$|ýuq7¤ôtؾݞqhä‚ò‚ÉH†3œXbéE/šÐĵ>›lÖ²–$’Xþâ+ (P»Qѽû.<þ8ìÜi¯e‚ fƒˆ%–»ß¼›Žû;º% 9äð9Ÿ“T4mdc™ Ÿu?%õ—³ëPé³t$¤² -~ôsuIÈ@‚)Uê{(lRHi¬a I$‘F9ä¨]‰ˆˆˆ(hDID#H<Ý‹!€zÓÛÕ%é®qZµBÒI'‰$"ÆG°§Ë¦'NWQÑø’ˆ˜˜p8HnÄg²È*s‘ó·|ëê’”B G8bó­n j7""""J ¯˜”’øïI¤ÇumhC®.II$qƒj""""J ¤±hA bˆ!®hêNwe£ˆ"ƒ MDDDD „4žÆÈ¸†þô'°D“É&Ûíº†’”<ˆˆˆˆ(F =\ C 1n B>ù¤’Êê¢i=ë9Ç9MDDDD „4‘Dº†8∠Âmýv¶»†d’9Å)·õºƒˆˆˆˆiÀ*»Žá ] ÃjVs€ šˆˆˆˆ(hh<Ý¡)M+½Ž!™dW°m ¦ˆˆˆˆ(h¬Žq¬ÒëòÉW DDDDD Dcái$$çºÊ®cñV“ºØè;¼ƒ)1y£7½y‘ÙÁrÉå YÅ*âˆ+SÖT2•J(‰$’I&¹ä’I&‰$Bˆßþá.ã2~ÇïXÍj×ËÓ‘Žô ó0ò¡’‘2ƒ¡˜™™›k!$¤fꨩ²µ¤ÖÏ@Œb·q[…÷(O:énÏ;MqÄq7wó6oWéý8pð>ï3‚®eéÌ4¦q5Ws-×zäÔ¤`‚‰!†‘Œä:®£+]]ë (ðø:]-"""RÑÁ ÞF Ò¹3L›W_ ×^ ÆT_5U¶Õꈴà^àq÷éµ_ðñÝèF3šEïó~…u9æ7ü†®t%‹,°€±Œ¥=íµó‹ˆˆˆTÅØ±ö=3†…-`Èû|Ä3¦z먩² 5xš§éD'6²‘¿òWŸ^Û~¼Ê«ìd'yä‘A÷s?QDUù=g<S˜Âg|F6Ù¤’Ê£<ê¶¾6Èp†ó,Ïò ßA¯ò*#I!|É—ÌbH:p'w²„%å¨WÉ’ˆˆˆˆ”>,:Ö›2>û ²³!5}Ô}}uÕQSekQ­uaÈ@&1‰|òù%¿¤Âó®³í<^°Ÿý´§=9ä°‹],cÏ󤑿öÚTRˆ&ºFãÒ\ÇuÜÀ ÄG+Z¹Öà«YÍ2–±‚âvr‘êÔÇ ’æ~,Hª=$:ºz먩² -"ˆ7xƒ&4áža+[ϻΖ´ä-Þ`9ËË-I$`G"ê]4M`×p ßñ[’E–Ûks€p«5MhB?úq}ÑÔ‡>ng ¶±øˆù˜u¬Ó«""""5©=$ËýXÃöXððê­£¦Ê6´b*SéAv±‹'yò¼ë» YÎrzÒ“Ýì.s Ä&61Ÿù|ʧìf7!„З¾ü™?Ó‹^<ÇsÜÄMn¯)Ýݧ*Ý\['؇xâhK[F0‚QŒâgüÌ-)9ÃÖ°Æu–!“LíÈ""""µÍá¨øyu×QSeJ1é<Àäs^uõ¡ËXF|Ë·\˵üÀneúÒ×íy.¹¬b·p »ØE,±Å ‡‰$’pÂ9ÈA×rçA~é3Uñ#?@€ëù.v±‚,g9É$ŸwLDDDD¤Š†ÈHûmþÁâcA×·ûYYÕ[GM•­Eµru3šDR¹÷cðö~£ÅZÖAkXà ñ=ß{ý>œÃ–<»°™Í f°[YçóÒÃÇVE|ʧ<Â#\Îå\Ê¥ü–ß²‚JDDDDêÒæÍEîÇ‚®çééÕ[GM•mh „/<%“™Ìû¼Osš3Ÿù\˵çxùC63…)DMsšJ(È"BŠ«ìB0—¹ aa„1„!ÌaŽÛúóÑ–¶ÄÇó<Ï¿ù·vT±°èXoî\;DjX˜}œ3Ç}=Ø{.”wß_ꨩ²µ¨Vº0yºžÀ™(xs½Á ¼àúùî¢ÉÓ6¢‹¦òáˆkˆV€Å,f"‰#Žu¬s+»ŠU,aÉyÿþÙdkçñG‹ÃĉëÜYµ –,©Þ:jªl-rÆCFFQQQìÚ±­Â¬M^Í„û'³{çvºvëQå——@xJ**ëâT²ü0 c]èÀ^ö²‚Ìfv™»3‡Ê f0ŽqDɰˆEÌbg8ãóïSÚÌ„™Ú9E¤^IˆO°3 ©ßŸg ^|Ž…†ÂŒ0nœ½æàÀX´fÍ‚3%ŽKÞ!ºªuÔdY/9÷K×{Òµ[Œ1¤}žÆàAƒë6hÔ UDDDDt\VÎ7TÕPEDDDD¼ÕD!%"""""¢BDDDDD”@ˆˆˆˆˆˆQÑ„†Bb"dfBn®}LL„ïëèÖÍÞßãÇm;vÀÿÍš¹—kÖ ¦MƒM›àäI((°_~ Ó§—-_ï­±ÄËyCHOscic¾–mìmÌ—²þÜÆºw‡øxض­êïÇ—¸×TÙÆ/µ±ªmOmÌûí©Y½{Ë/ÚÏûÜ\8xÐÞ‹-.®þ´1bŒ1æ»ï¾3€Ùµc[…󼿽`Œ1®ç@½›ÌÊ•cÊÎ+WÚõ•ÕqÙe˜ãÇ˯cÙ2÷:/.¿œs^¼¸zß[cŠWEåŒifLqÙ³gí²I“0áá˜À@L»vö¹1v}u¾·Æ/øðó‡˜ùRVmÌ·²þÚÆ³m&!Ó£GÕÞ§/q¯©²Š—ÚXU¶§6æÛöÔÆì¼q£=–¸ôRLPæâ‹‹?÷ÿýïúÑÆ”@Ôáüá‡öóÍîËo¹Å._º´ò:޳e;tp_Þ¡Cñ·˜ÎeÛ·Ûe¿ú¦m[L@€}|à»ü›oª÷½5¦xùë‡bmÇÌ—²jc¾•õç¼ç{€àKÜkª¬â¥6V•í©ù¶=µ1Ïs»v¶\^^ýkcJ jyÞ¿¿âƒ‡ï¿¯¼ŽœœŠë8p xÙÀ˜Ý»Ë? ¶{7¦ÿê}o)^Îåû÷cÎÜ:…IOÇÌš…iÓ¦ñ´1_ʪùVÖ_ÛXuüãõ%î5UVñR«ÊöÔÆª–@¨•ßýÕÌÁƒõ¯ÕeÑ(/¢n×Î>fe¹/?|Ø>†‡W^Ç_ØÇW_…®]í…—]»Úç%·pì4mZ~=M›Â‰ÕûÞS¼œ"#!0ÂÂìERO<[¶@TTãhc¾”U󭬿¶±ÚŽ{M•U¼ÔÆü©Þ†/µ±òµl o½e^¾¼q´±êÔèÎ@äæÚì10Ð}yÓ¦vyNNåu Tü-fyóéÓÅe—//îqÙe˜à`ÌOjŸ—î.Qï­1Åë‹/0¿ý-¦{wÛý'?ÁŒùê+[öý÷Gó¥¬Ú˜oeýµUÇ7w¾Ä½¦Ê*^jcUÙžÚ˜oÛS+;_x!fË[f×.ÌÔ¿6¦.LuÔ]""Â}yd¤o§¥úô±ß=j/ìݾóôÓe/ÆqŽöRz{vùñãÕÿÞK¼<Í—\bËž<Ù8Ú˜/eÕÆ|/ëm¬:Oý{÷š*«x©O¦ÆÜƪc{µõéc»ªc?û/¼°~¶1uaªe›7ÛÇÁƒÝ—;Ÿ§§{_Ï/~mÚØ1»w·c¬][\®²ñ‚ƒƒ«ÿ½5–xyRP`ŽÆÑÆ|)«6æ{Ylcµ÷š*«x©ùS½ 5^jcÅF²Ÿñ°f ßßxÚ˜º0UÑ{öÍ5dˆ}îËðz}„>bO}ýò—6‹ÏÏÇôêU\îË/‹»Þüô§öôa·nÅ]r6mªÚ{S¼0›7c¦LÁDGcš7Ç„†Ú‹°?ÿ¼lw§†3_ʪùVÖ_Û˜/ßÜyZçKÜkª¬â¥6V•í©ù¶=µ1;OžŒ)(°ËÿñÛ©:þ/© S#º‘ܪU¾ÝtnÌ2eŠ{¹Ñ£1……å—-,ÄÜxcÕÞ›âUñMa¶×P4†6æKYµ1ßÊúk«ì½•Œ‘§˜ù÷š*«x©Ue{jcUÛ^coc¾ÜPÏ_Û˜ˆ:žCCmçÌL;öof¦}ê}6q“”„9²ü²qq˜+0GŽØo8µÏãâªþÞ/Ì€˜×_·}Ösrì¼cæÅm?ÅÆÔÆ|)«6æ}Yncçû××¶PSe{¼Ôƪv€§6æýöÔÆ|o_þÚÆü%p- ##ƒ¨¨(víØVa§µÉ«™pÿdvïÜ@×n=Ô LDDDD¤žpï—>®÷¤k7{«ð´ÏÓ6”M †-?8z´übð`Ï „ÃaçfÍàâ‹aîÜÊ ºä|¿¥gQ!Õl{H#PB¹‰›Ê¬¿‰›%”TRÙúҀùÌçÇÈ#ìäu^g*M œeœÿžÎ@8__ž<òÈ$“YÌ ˜`ý1Å¿÷µ=–¡¡pSÙ]›n²ëRSmY€®vWcþ|8v òò`çNxýu0 òÂYÆyðïé DŠç]¼<ÛÅi–ÝÕöbWûòK›Ýv[Ùu·Ýf×mÞlŸ·n ù üç?pö,äæÚŸ_~úõ«žØ—ìÎtï½ðÅíÞÅ©Cxåû»æåAVüïÿÂå——­ïòËaùr[ÇéÓðÙgpë­e»MUÔª¼uÞ¾çkþsû>ޱ±Û¾~š”ú Ó§Û¿Ë©S¶+ÜgŸÙdl2j Üw_Ù÷9v¬]·i“öa©ŸŒ1Æ|÷Ýw0»vl«pž÷·Œ1ÆõðjîNwO¼ÙÆ6c0ÆØørçPBM"‰&“L“K®É$Ó$’hBñz{¾ÔQÛ+o~ˆ‡ŒÁ˜å,/³î#>2c&1ɵlŒÁ˜Ýì6³™mb‰õX÷>öƒ1èdsƒ1g8cÂ3§9mòÉ7a„Àt¢“1s€nõ”þ[d:ÓÙÌe®1“JêyÅ@³æÚ˜zÈ6äåËË®ûè#»nÒ¤âe6Øe»wcfÏÆÄÆz®{ß>[¶S'ûü‚ ìó3g0aa˜Ó§1ùùög°åŒÁ8à^sgsíkA˜Î1sçÚå©©•ÿž>hË~üqÙu+VØu¿þµ}þÉ'ÅÛ,o®l[Þ”s–yþùòëŒ,Ž_éùÔ)Ì•W×uñŘ£G½{ÏÆ` ½{ß¾¼‡Š¶m æá‡‹Ë¶iƒÙºµâ÷zÇöç <ÿ½î¿_û¯fÍšköt\ïivæ ©i®ãÂÚI ÊûŒ-¯œ‡YÉÊr˯d¥qà¨t[¾ÔQÛó4·£9Ç9sŽs¦í\Ëà /wyoz›ƒt{ÛÙn¦0ÅDáV÷ƒ1ãg3šÑ®÷ ˜Õ¬6cF0Âf,cÁ˜%,©ôï✳È2 M³ßÏíÚaγs»vÅËÃÃË_Þ»7æàA÷¿};fÊLD„{Ý ØõãÆÙç£GÛç+WÚç«WÛç#FØçcÇÚçK–”`[Þœ•…0 òß³E Lv6¦  8¡Ì…ÚegÏbZ·¶ËrrlÝ×\ƒ À„†bzõÂüîw˜/¿ô>¨èÙùsf¦K›6îuüÏÿØõÏ>‹éÒÓ´)¦m[›ä”Nøþþw»lãFLt´}¿ÑÑöyy D~¾w „/ïÁùÚï¿ÇÜtæ'?Á´oyé¥â6â,ë\¶gæ¿°í+$ƒYºÔ–iÚ´¸õêUüÚŽíßëäÉâÄS³fÍšëSQk]˜¶³™Ìä ®¨°ÜXÆ2‚d’ÉP†Ò‚ a™d2‚ŒaL¥Ûò¥ŽêØž'‡9ÌJVH ·s»kùíÜN |Â'æ°kùW|Ewºó0³—½ö”>—3‡9|Ë·Ä㱓óú‡$’ÜÖ;»-9¯¨¨ûRiáˆÎщß;|Ø^·ïjÜ~»]öÉ'¶Œk_ûÊŽ¬ôððwoq÷™9sàÛoíÅÕžº19¯HJr_ïì¶ä¼þ!Åû] ‡Ãv—©Ì©S°x±íJsï½ÅËï½×.û׿l—,€ÿÛ>._n»x-X`»æ¼ÿ>\uUõÆÿÞ{áƒН qºþzûøûßCF†í>tø0üõ¯e»†]{­}|à;2Õ™3öñW¿:¿÷æË{pš8ÑÆéøqøñG˜1Ã.¿ä’â2¿ø…}¼ûn÷Çmw§ääâ.LçÎÁk¯ÙŸKþwÝeÿ^ ÚîZ""êÂäÃÙˆòÖ}ȇÆ`ÌÍÜì¶ün1c–²´Òú}©£:¶WÑ|wƒ1Ÿñ™kY*©Æ`ÌxÆ{|]0Áæ×üÚ¼Ã;æ$'Á˜­lu­ÿ)?5c¶°Å&™dc0¦ý `†2ÔŒù”O `ÒI7c®à ‹L:˜ L0G8b Æüƒ(S×\/fgw‘Ï>+^–šj—ïùuÁÁöÛèwÞ±ßc»¦¸öµŸÚe[¶ØçÉÉöy¿~öùСöù§ŸÚçééöùWxþf< Ó¡fÂÌ‘#vù?þáÝïÙ¯_q÷+‡ÃÎß}g—ý×—»ê*Ì×_—=spî\Åñ¨J¦fÍÊ_îœwg2ÀžQ0Æ~‹ïÖÅ4´ü3åÿ-K—õå=8Ÿ»×Û¤‰çz+;ƒpÁ˜Ü\̉˜æÍí²o¿µ¯ŽÖ~«Y³fuaª–b?ûÁ˜tp[ÞÆ`Ì÷|_iý¾ÔQÛ«hnNs“M¶)¤Ðt¦³éBSH¡É&Û4§¹WuDe Æäã¶ü‡L!…&œpsšÓæ8ÇM0ÍhfÎrÖd“mÚÐÆä“os¸L—,O grŠS&ˆ ílšý~nÞÜvï),´×tébÎÎ.>p«t_‹²;DNŽûòC‡l]ááöš‡ãÇmöàùìY»6mìðáÃöÀÞ›rgrꔽ.›÷éL bcmÒ` &#£ì6)ºàšk0cÆ`^y¥8ù¨ÎÂãgñ~»¾[·Ê·çìêÓ»·ûòèè²ÛÉË+ÿà=.®lY_ÞCE¿OéuÎë*† «¼ÞùómÙûî³]ÕŒÁ|ñ…öYÍš5« SµiG;²È*Ó œðj­£:¶W‘Óœf)Kqà`\ÑäÀÁ|ÀiN»•ÝÂâ‰gÃ'œ@iK[náv²Ó­| )8p0‰I„J )P@.¹¬g=ÍiÎ$&@ëX‡ýÿW¹u¬c [#Œa Óy:ñ{§OÃÒ¥¶;иqvv8lךÓî»[¶@|< áá¶›SÛ¶p‹Ýը龫‘’bëš4ÉŽ¼“’vW#7Ö¯·CÈNšö†tÞÞlmÝ:û~ÂÂìûñÆßþVÜÕfâDûó[o¹o3-ÍvjÙ6n´]r–/·ë"#kço²l™}|ûm;òSp°ý=££áw¿sè“OŠ·Þ½!$Ä>¾þzÙzwï¶ Ð®´je‡ê7ïüÞƒ/þõ/û8¾íÎÔ¶­­{Ð ø¿ÿs/ûâ‹Åݘœ]ÏÊû½DDÔ…©Šg rÉ5c t[Þ”¦å~ ¾uTÇö*›oàWw£­l5cF2Ò« ÍKÎÎ ¦)5ÊÓüh Æ<ÌÃnëã‰7c~àc0æwüΧ¿E"‰Æ`Ìó<¯l]s½˜o¸¡¸»‘s„œ‘#}¿@ØyÁ4¥FyúñDz£ñ&>Þ.ÿáûø»ßùöívbbñhFÞüž­ZÙ3!gÏÚ¹ sÑEÞÿŽ~X;g .¸ ¸{Ue݇|…é‘G¼ï–äË{ðå „7£0•œÓÒìò³gÝ»3iÖ¬Y³Î@TOßü;Ÿ—>Sp¾uTÇö*ó Ÿp„#ô¤'WpG8ÂJV–)w÷0Ÿùlg;G9Jå(«XÅ(F¹n8Wò DÉ÷ê¼€ºôúö´*¿u™oî°_Ýd¤Òl©>ùÄ^ŒÜ³'\q…ýyeÙ]{î±ßoßn/ü-(°«VÙo²-*{ìÙ (¾€ºôúövW«ôÔž¾%éå®vâ¼óŽýÆ;8V¯.¾Üià@xã ûmý¹sÅ÷˜3§øÎÜ5í‡àê«áÙgíEݹ¹Åïãõ×Ýïè‘a/@ÿè#{ÆèÈ{Å;½ð<òˆ½àýìYØ·V¬(?~¾¼_= ýûÃOØ‹½OŸ¶õ¦¥•?çYˆà`{ñté³b"":Q QßÊ­nËoã6Ÿ/¢ö¦ŽêØžfÍš5k®¹ÙÛ{Wøóܵ«½Ž¦¼ ì5kÖ¬Yg ÎÓBönÊCBa as˜ã¶ÀMçS‡/e+ÍÄÐñAX›;OEË8XÌb&2‘8âXÇ:·ò«XÅ–Tº-_ꨎ퉈ˆTäÄ øøcxðAÅBD”@ÔH¢1šÑÌ`ãG$‘à‹XÄ,fy•AúRGul¯*ÉS]&n y»©ƒR9Öú˜k>ñ“ho©§fδ õï½:TüþÁŽü$ [“‚&üäÄOh}¬µk&UÇþð;K=L œg¼q†3L+šªZ§·uøZVüß ´AîVM '[žtK*JÎgBÏ(h"¥$ÄÛ£õ„™ †H)!gBÜ„’s«“­p:$Q!µ—¦ mx×9pðþA8á¬f5s˜£ ˆ(i¸ †û¹Ÿcc4£¹›»La #AYÜÍÝŒ‚"¢B¤aÛÏ~þ›ÿà/ü…ŽtTPDD¼pWñ'þ„Á0‘‰ä ‚"¢B¤q˜Ï|>àZÓš7xC©Da,d!AñWþÊ2–)("J D—y£åçüœû¸O©À‹¼H7º±…-®{눈‘F凸5¿à9žã".RPDDÊ1†1L`g9ËxÆ“CŽ‚"¢B¤qZÌbÞå]ZÒ’7yED¤„ÎtvZ7…)lc›‚"¢B¤q{ˆ‡ø‘‰#ŽyP)@ XÀOø ð¯òª‚"ÒØãÅt¾u”J(‰$’I&¹ä’I&‰$BˆZƒÔ‰,²˜Ä$žåY.æbED˜Á 3˜ýì×µb"J ¼S@AµÖçÀÁû¼Ï4¦Ñ™ÎDg:3i|Àê>"uæ=Þc‹#Œ·xKmQD½¡ å ž Bîâ.ŽpDAQaèË›þÌŸx—wÏ»®’Æ2–Œ “L†2”´`CÈ$“Œ` cÔ"¤Îü†ßpˆC c“™¬€ˆH£ÕšÖ¼ÍÛÀ³<ËÖ(("J ô 4·å©¤M´Z„Ô©ù¿ówB åïüiT&2‘Û¹Sœb<ã9Ç9ED „gò0¸º1y+’H $Œ0zÓ›'x‚-l!Š(W™v´ìE«%æ0á„«EH{„GØÇ>1ˆÿæ¿i4~ÊOy‘;BÝnv+("J *v;·s±í|ÄG^½f›˜ÌdzЃ`‚iMk~ÆÏøš¯éHGžã¹2¯)}m„.XrŒcÜÏý Oñ—s¹‚"" ^A,d!ÍiÎðOþ© ˆ(¨Ü¦ö®¼Þ á З¾¼ÄKlg;¹ärœã¬b·p ±ÄºÊz:Óà|^úÌ„H]YÁ ÞäM‚ VW&iI¤}È ƒ‡xHQQ¹XbéCq¨Z¾up[òìÂf60˜ÁneÏÓIW‹¿ñ°‡=ô£à ˆˆ4X?ãg<Â#ä“ÏxÆs’“ ŠˆˆÊ9GBz‰—È%·ÌzO7†ÛÌf¦0…h¢iNsB e YÄ"RHq•]ÈBæ2—! !Œ0†0Ä5Ú“s½ˆ?8Å)îã> †?òGzÒSA‘§=íùÿÀƒxâYÏzEÄÏúÛèNw®ã:NsÚçÛÔGMå9ÂWb°˜ÅLd"qıŽuneW±Š%,Q‹¿ò)Ÿò*¯òñwþÎhDi8 Ìcè@2É<Ã3Љˆï<Ê£8p0yã˜O¯È@&0a £ ]ØË^V°‚ÙÌæJ|NF3šÌ`ãˆ$’`‹˜Å,¯¯»ðVBB‚Z˜âuÞNäàØkÇès´+cV’“¢˜©Õ|¬HPÌÔÆjD|B¼³‘¹I$-g(@jc¢Â;‹¦Šx)i}Ñä­3œaZÑ$RäåñÁè¸çï÷pͺkøÏOÿáˆC Œˆ4('[êº%¢o |Œ“âU±œàႇôú >˜ñŠ™ÚX͉×ç˜ÚXM5­xýÏTÓq˜© Ó˜ÆÃED „ˆø“3œa$#9Ä!b‰å%^RPD¤NÜÁü‘?R@wp[Ùª ˆ(´}ÜÄMœá “˜Ä¯ùµ‚""µ*–Xæ1~Ëo5\«ˆñwØÀýÜÁð/ð3~¦ ˆH­èJWÞå]‚â9žãU^UPD”@ˆH}°…Ìbðïp9—+("R£Â çc>¦5­YÊRã1ED „ˆÔ' $°„%´¢KYJ8á ŠˆÔˆPBùéJW6°qŒÓp­"J D¤¾1&2‘ l +]Y‚R`D¤Z9pðoПþìc£ÍÎ(0"J D¤>:ÃnåVö±á ç^QPD¤Z%’ÈxÆs‚\ÏõüÀ Šˆ©ÏJ~#x÷ñ(*("R-à¦2•<ò¸™›5\«ˆi(6³™;¹ƒa6³¹‘9/%ï73™É$‘¤ ˆ(‘†ä_ü‹éL'€ÞæmzÒSA‘*éIOÞã=‚b6³y×%"Ò=Ã3,`-iɇ|¨‘™DÄgíiÏG|D+Z±…Lgº‚"¢BDª’#3u¦3KYª‘™DÄk¡„²”¥t¢“ÛM+ED „ˆ4`yä1ŠQìe/À<æáÀ¡ÀˆH…`‹èOv±‹QŒÒp­"J D¤±È"‹¸“œäîàüAA‘ =Ã3ÜÈã?ççd‘¥ ˆ(‘Æd+[¹‹»( €Dù¿PPD¤\“˜Ä¦G·r+»Ø¥ ˆ(‘Æh)K™ÊT8ø'ÿ¤}qs#7ò/¹®¡Òp­"¢B¤‘›ÃÞäMB å> ìp­ÿäŸÀ“<É(("¢BDà!"™d:щwy—PB‘F®øˆhA °€™ÌTPDD „ˆXyäq;·³‹]ô§¿FfiäZЂøˆNt"‰$&2QÃµŠˆq—E£Í N0†1$  ˆ4BðOþIOz²‹]ÜÊ­ä‘§Àˆˆ)k;Û¹Û) €Ì`<ã‘Fæ%^âFn$‹,~ÎÏ9Æ1EDü+0•LÞ %”DÉ$“\rÉ$“D !ä¼ÊŠ46+YÉÃ<Œoðý鯠ˆ4S˜Â$&q†3Œb”†këû/àÀÁû¼ÏF¸–u¦3Ó˜ÆÕ\͵\ëJF|)+ÒX½ÌËô “˜Äû¼O_ú²} ŒHv#7ò Ï`0ÜÏýl`ƒ‚""ùE&‡‡ÉcËFI&CJ Z0„!d’ÉF0†1U*+Ò˜Mf2I$Ñ,g¹Ffi`JŸñÿ€ €éLg!  ñÿâ|8ûiOa ŸñÙd“J*ò¨Ûz_ËŠ4fùäs37³“\É•,b‘Ffif3[A‘ú‘@ìg?ç8Ç)N‘N:³˜EÚxõZçÝsÓHs[žJ*ÑDW©¬Hcw‚\Ïõå(7r#‰$*("""â D$‘Haô¦7Oð[ØBQ•¾¶í; eI‡9 @8áU*+"°‹]ÜÆmä‘ÇT¦rw)("""J êÎ&61™Éô ÁÓšÖüŒŸñ5_Ó‘Ž<Çs^×Uº{EEÝ-|)+ÒØ%‘Äd&0ŸùU-MDüCº("Rˆ¾ôå%^b;ÛÉ%—ãg«¸…[ˆ%¶Ò:<=p>/y¶Á—²"Rìu^WD€®t%…BDêoáI€wg6³€Á v[î|žNz•ÊŠˆˆ4$—s9)¤pñŸÑŠVUýPD¤NˆÍlf Sˆ&šæ4'”P2E,pû–ÄSw çpss™Ë†FCÂ渭÷µ¬ˆˆHCq%W’L2‘Dò)Ÿr×q’“ ŒˆTIÞH.ºh*Ïޏ†W­Èb3‘‰ÄÇ:Ö¹­[Å*–°¤JeEÄ;]èB&™ „ˆŸºŠ«ø„OhK[V°‚›¹™³œU`D¤~&È&0Œa®‹ºö²—¬`6³9ÀJë0F3šÌ`ãˆ$’`‹˜Å,·³¾”­ jaŠWÉ™‡M}Õê+æß3Ÿ£mŽ*^ ©mýÁ³úÝÆ:}߉;ÜI³œfüû²³é¶Mü!àŠ™Ú˜HýM ÖMÞ¨¨oæÎ0­hªŒ/eE¤ØÌ„™nÏ›å6cü‚ñ\´÷"î}ë^æß=ŸÃá‡(?Ñ9³3ã'(7ˆm=¶ñÞÍïQP¨ÀˆHýN ô-”Œ“âUÿböOñ!2üÔpn{ù6F0‚-lQ¼‚x}ŽÕç66‚üžßDó™ÏÄm)ØV ˜©é8LªE…@Dªê4§ÉHV°‚ö´'‰$®â*F¤ÝÀ ,e)¡„òo0áÿÙ»÷¸(Ëüÿã/µT6ÅRs‰LÝ#¨¨`eÚAËûûö-[·í[Ù¶Z»–®e­iÇÍŽ[{Š´¶²ÔtÕ<¤àYÔõæ,±RYIS@áúýqÃÀ Ìàpœ÷ó~Üœû¾æºg®¹æöúÌ}Ý×ÅÝÅ£Šˆ(€‘w–³ÜÂ-|ʧ´¤%Ÿó9½é­‚©#Á‡|HA¼ÌËÜ˽ nK"¢BDj™<ò¸ÛyŸ÷iNsþÍ¿ÀŒH5J$‘yÌ£1y–g™ÀÍ/" D¤ö:Ç9IäŸü“¦4å3>#ŒH5¸‹»ø;'@þÈy”GU("¢BDj¿|òù_þ—7y“Bø”OÆ0ŒHºûx›·iHCã1’Šî€Q!"uAÜ˽¼Â+ć|ÈF¨`DªÀoù-¯ð ¿ãw<ÍÓ*Q!"uÁðð,ÏÒ˜ÆÌc‰$ª`D|h2“yžç¸Ÿû‹ÿ-"¢BDê¬Gy”'y’@ù;ç.îR¡ˆøÀ4¦1ƒä“Ï=Ü뼪B"R?Le*ñ iÈÛ¼Í}ܧB¹3™ÉùÜɼÃ;*Q!"õËÓ<ÍD&ð ¯ð[~«BñR¼ÄK<Â#ä‘Ç(F‘BŠ FD@ˆHýôÏq?÷ð<Ï3™É*ÿ³nÀë¼ÎƒùÌ`Ó˜¦B©@Còï0žñœá ÃÎBª`DD„ˆø‡·y›;¹“|òy‚'˜ÉLŠˆhD )ÜÉœæ4CÊ2–©`DD„ˆø—RÍhòÈãá%^"€ŒH iÌû¼Ï(F‘M6CÂjV«`DD„ˆø§ù‘Œ$—\äA^çuè”$@0Á|Â'ÜÊ­d‘Å`³Žu*Q!"þm! ÎpÎp†ñŒçÞ¡! U0â×.â"°€¸ø d [T0"¢BD`ËÊPNsš;¹“RhD#Œø¥f4c KÌ`Žr”8âØÁŒˆÔ**©i«Y͆°˜ÅŒbi\|„H}f0.·æ0ƒÌ~ö«D¤ÖѩֱŽÁ &‹,nåV>á‚ VÁˆ_À"¢BD¤"[ØÂ@ò?p7°€\ÄE*ñ;d¨DD„ˆˆ'v°ƒ8â8ÊQ3˜%,¡ÍT0RÿÖÁ"¢BDÄ'ö°‡þôç0‡‰%–l²1¥‘º¬-mYÊR„ˆ(€ñ•ýìgTRïŒ`ÛÙÎ`«0DD„ˆˆ/©¸Ô'¡„òoñ!Ò’–|Æg´¦5.‘ÚLøŠHÔ€P ‚:¡=x—w‰ ‚³œåasÔODêèÿÁ""uÐR–Ò–¶*©ÕÒ)L!•T"ˆ`Ûˆ!†WxEÁƒˆ(€©NƒÌv¶3‚* ©•ÚÓžU¬b:ÓiHCžã9zÑ‹ÝìVለ‘ªâªxkZóŸÑ’–|ȇ¼Å[„ªÂ’Z#‘D¶³XbÉ$“! a"É%W…#" DDªÛ÷|Ï0†ñp–³ÜÃ=¤“Nz¨p¤F5§9ï.ÍiÎG|Ä5\Ãr–«pDD„ˆHM2^ábˆaÛˆ ‚TR™ÂÒP$Õ®Ý×íØÎvIä4§ù¿b$#9Á Žˆ(€©-v³›^ôb³hHC¦3U¬¢=íU8R- dÐ烸ëowÑžölbÑDóþ¢Â¾Ön¼ÄKìc¹är”£,cñÄ{œ‡©`)-„f0ƒ 2È%— 2˜Á ‚ Vm©£rÉåaCÈ$“Xb‹ ©JEW¾ú­éÀ fЗ¾ìg¿ GD@T…tÒy¹’+iLcZÓšxâYÆ2þ‡ÿñùñ`>ó™ÌdÚÓžÆ4¦=í™Ìd>áMÞ#RÇ-g9×p ñ‘S_ô&9MT8âs%ï½É¾8›¿þï_yœÇ9Ç9Žˆ(€¨*›ØÄÿñDIšÐ‘ŽÌg>ó¸×ÁAE³yŽa $AýèGSšK,d@£­!RÇà#ɯø§9M"‰Ü÷Ú}´ûº G|¢ôè_)¤ðêo^åpûÃ*QQÕzЃWy•¯øŠ<ò8Ä!Æ3€ŽtôùñŠº3Ld"kYËiN“J*“˜ä´_D꾿ð¢‰f#i~²9wýí.žâ) TáH¥ÅÏv0‚d“Í/ —Ü Ï*" jL+Zx=jÅŽpŽsœâé¤3é´ …Sšît 4§í©¤M´j„H=²Ÿýô¥/kú¯à1+žXÄMh³<ËR–N8©¤Òn¤¢Â5©Íx‡wXÄ"¯žN8J(ÝèÆ¦°ƒNW2Š‚“cszîqŽF˜j„H=sžó¬´‚¿þï_ùš¯éAÒIçîQáˆG:Ó™õ¬g“È'Ÿ©LeÈ C…#" jÒå\ÎZÖÒ‹^à€Ç÷@lf3˜@ºD—p CÂv¶Ó–¶<ÇsežSúÞÝ<-Rÿn˜(¢H!…PBy‹·øiIKޏ@÷s?›ÙL7º_Ñz’'É'_$" jRwº³ ü‚_°‡= d ßó½GϽŽëx™—ÙÍnrÉå$'YÆ2F2€A *NëîJCÑãÒW&D¤~)Ùg=›lF0‚ìðjèhñ—r) YÈŸù3Á;ÝS#"¢¢† g8_ðmhÃJVÒ‡>|Ã7œoѯC%¯.le+}éë”¶èq:éª"~ …¢ˆb k'œ¥,åYž¥ îÕ¹šCè;¾c(CÉ"ËiT/©áb˜Ï|.â"þÎß¹žë9ÉÉrOð¥me+™H4Ñ\ÄE„Bozóï°šÕN€ÙÌ&–XB %–Xf1Ëi¿ˆÔ_ó5ȦO>“˜ÄzÖÓ™Î*às>'Š(>â#†ˆH 5:žá‹¼Xüï; —’<¹7!ºpqå'Їh˜Ë\Æ1ŽxâYç´ËXÆ<æ©Fˆø‘|òyЧXÆ2Þå]ºÑÍlæas\þh!þcC( @!"R›_èMoîæn0€tà0‡Yžá2É,Nk0ÜÂ-Le*cK8ád’É{¼Çt¦û¼±œœ¬¦òR™Õ‘òú ïnXrÑ[£ù3æ¡+â“[>á§ÐŸü³¬Hö‹:v, ^q½ï‰ä'ôÔyLå%RÛoF?r—v}áâ©3œará""R$¯qŸÞü)_]ùà çʯ®dÒ¬I.ÓNKž¦«ãB΄·2Ž˜Í1* ‘º@èW)YN*/•Ym)¯pÂùs;:“_”{Rý|¯ĩ<ÈC<ÄÅ\Ìyλܛ÷®ï¤Îc*/µÃüIˆˆ³L2ÂD=s·±‹]Ìbs1KXBQ¸YDDD„ˆˆÇÊ»'JóFÔ-ÑD³’•|ÄGDÁnvscá²›Ý* ""UkYáƒúÏ×fmhÃ_ø [ØBqç8÷s?QD±„%* ""Õã$'‰'žlä}Þ'’HJ-L0ó8ûØÇ8ÆqŽsÌf6Wr%s˜ÃyΫDD@ˆˆøž»¾ñWpâOäÃÜÁ.vñ:¯N¸ ­†?¯±ŒåK¾äIž$”P>æcºÐ…ILr;Q©ˆˆ(€©R'9ÉøDðoðk~Í~öó Ïp1«ªY/z‘F)¤ÐŽv¤“Î@2‚ìg¿ HDD„ˆHÍË$“{¹—.tá> ˆ ~Ïï9Ä!~Ïï &X…TÅÚÑŽRXÇ:zÑ‹£åî!†V±J$"¢BD¤öÙÇ>F1Šô`9˹˜‹y†gØÏ~~ͯÝÎ3 •J(Oò$_ñcËiN3…)DÁÛ¼M*$""µÛf6“P¸lf3á„ó:¯³‹]ÜÁš[À'ÿi5`ãØÇ>çq ämÞ&’Hžâ)ÎpF…$"¢BD¤nYÎrzЃQŒbûˆ$’÷yŸlÔ Ž86³™¿ðÚІU¬"†îáŽrT$"¢BD¤î2>àºÐ…{¹—L2‰!FsHTB|ÄG¬d%ÑD³ŸýŒ`H:é* ""õÇyÎóoAàšC¢‚ ËÕ²‡=ÜÆmœä$“˜Dºð1«ÀDD@ˆˆÔ_g9ËŸø“樤9ÌáJ®d6³É#O""¢BDÄ?h ïEÅýÜÏqŽ«0DD@ˆˆø§òæpו§>jG;åQ¶³ÝmšÝìV…©E48¹ˆH *šC"†žæi¿¥©-ÉHþÿXbi ß²DDêµEDj’sH¸sWÔÙ÷L0£Å|æ“I&oðýéO.¹Ìe.7s³*ˆH¡+""µÈr–»Ýwƒâ+YÉŠÂ¥6ÏІ b‰$2‚4£ù䳄%¤ÂÇ|ÌiNh¢=""âKYdqEá2ŽqìaOq0±šÕœàD¿Î븎DÍhÚЦxû6B ó˜Ç÷|¯TDD„ˆˆT¥0ÂèF72A ¢?ý¹ºp¹Ÿû) €ílg+XÉJV³ºø×ýªA¿ä—$’è4·Å^ö’R¸ìg¿>D""âkåuåÙZ¸Ìf6Ò“žÅEoz]¸Ld"ç9ÏF6wyJ#r|ö:/åRF3šDéIÏâíG9Ê<æñ.ï²™Íú@ED@ˆˆHmpžó¤.Oò$Aч> bHzЧpyœÇÉ!‡u¬+îò´‘œç¼WÇ %”Œ ‘D≧! È&›ù˜RXÁ òÉ×$"¢BDDj³rŠƒ€¦4¥?ý‹¯PDÅÀÂe:Ó9Íi¾à‹â.OÛØæhø—ºr37“H"·p ÁK. YÈ?ù'‹XÄYÎêCQ!""uÕ)N±¨phIK0 ø Eg:3´p{“¶;Ÿò)°šÕ¼Ë»|ȇå>GDD@ˆˆHv‚|T¸´¡ ƒ — ,wž‰ílç]Þe.sù†oT˜"" DDÄßå(ï.`'ª;ÈA—i»ÑM&""€f¢‘B‡8¤B"""""â;êÂ$""ÅŠç 0ÅDDDœè „ˆˆˆˆˆ(€"""""âÏD!Ì`dK.d0ƒÅ3ú:_ODDDDÄ_ÕèMÔ0Ÿù$P¼­=í™Ìdbˆáz®ÇßÉwáyøâx"""""þ¬F¯@Œa $AýèGSšK,d@£íÓ<|q<5$‘D&2‘µ¬å4§I%•ILrÚï«<|q<5¤;ÝH#Íi{*©DíÓ<|q<5¤­8Æ1§íÇ9@a>ÍÃÇQQÃJMuP‰©O½ÉÃÇQQÍÜýò_ô¸ô•‚ ÍÃÇQQC¶²€¾ôuÚ^ô8tŸæá‹ã‰ˆ­¸8c IDATˆˆˆ(€¨!)¤0›ÙÄK(¡ÄË,f9í0…Ë…äáMZ)«F'’›Ë\Æ1ŽxâYç}ËXÆ<æù4_ODDDDDD 1ná¦2•±Œ%œp2Éä=Þc:Ó=šÚ›<|qÓ¢…ÿÔ1oÒªŽy—¶¶Ö1_üÇëM¹WUZ•—êXeާ:V¹BuÌu÷Wc0GÖ½:V“„_ÞDݪ•ý{ì˜óöãÇíß°°ŠóØ´Éþ}õUˆˆ°7^FDØÇ%ðßÿB£F®óiÔ²³}ûÚü©¼Š„‡C` „†Ú›¤¦L; cGÿ¨cÞ¤Uó.mm­cÕ]îU•Vå¥:V›ò­¯å¥:æZ³fðÎ;öß‹ùGó%¿»‘›k£ÇÀ@çíÙí99çѧãWLWëO?9Ò.ZäèÑ©&(sÕUöqéî¾xmþT^›6a|Ó¹³íÇ~ñŘ„̶m6íüùþQǼI«:æ]ÚÚZÇ|ñË7å^UiU^ªc•9žê˜wÇS+»^~9fÇ›fÿ~Ì¥—Ö½:¦.L5Ô]¢MçíááÞ]–êÞÝÞ|“•eoìݽóôÓeoÆ)í¥ôñÚ´±ÛOžôýkó—òr·þüç6í?úGó&­ê˜÷ikcóå¥OʽªÒª¼TÇ.¤ “?×1_Ï_ëX÷î¶«ª1öÜùåu³Ž© S5ÛºÕþíÛ×y{ÑãôtÏó¹í6hÑÂŽ ܹ³#à‹/é*/8(È÷¯Í_ÊËü|û7 À?ê˜7iUǼO[ëXu—{U¥Uy©ŽÕ¦|ëky©Ž9 nÏñmÚÀʕЧ|óÿÔ1uaòÁ‘_íš+6Ö>öfx½Ï>à ˆ ¶—¾~õ+ÅŸ?‰Šr¤Û²ÅÑõ檫ìåÃÈHG—œÍ›+÷ÚT^˜­[1'b¢£1]„ ±7a¯[W¶»S}.3oÒªŽy—¶¶Ö1o~¹s·Ï›r¯ª´*/Õ±ÊOu̻㩎ÙuÂL~¾Ýþ·¿ÙîH¾øI]˜üh"¹e˼›t/&f™8Ñ9Ý-·` \§-(ÀÜ|så^›Ê«üIaŽ·÷PøCó&­ê˜wikk«èµ•,#weæM¹WUZ•—êXeާ:V¹ãù{ófB½ÚZÇ@Ôðbû;gdر32ìãÏ£á[nÁ¤¦ÚþÓÙÙ˜+07Ýä:m|¾ò¯Må…éÕ óúë¶ÏzNŽ]÷íüô’í§èOuÌ›´ªcž§­ÍuìBÿãõ¶.TUZ//Õ±Ê5ðTÇþ÷¿=/O?wižÞuþÞ¼ß+®ÀdeyöšÁxöº½y ¾þÌùKûï Ü^ãÇë\£Õë%—vî´µï“O =oŸ×ÚÒ]­Ç»ÞþÄÎy®_ï:ÝTG…öíÝçWú5y²vîlHJ2ìÚUþó+ú¦{z¼ÃŒ†Œ Cn®ý;c†!8øÂÒz¸ºk×»[‹â…Ô´Ô¢<ª>€¨¨´?â#Ÿ˜¥,u™n)KM•J{!k!&4c0&•T¯ƒ“¢×”A†¹…[L Z8í‹·ŒÁ˜™Ì4è`ÑÈ´¤¥¹ŸûÁ˜E,r›wš˜XbÁ˜P¡µÊˆÍ›1QQ˜Ì„ ®·?ü°Ý¶o_Ùço܈‰ŽÆcºu³Á¼óN‰ïÄ[vÛÌ™˜0aZ¶´ dc0‹9Ò¾óŽs¾!!öoQ¾å5„›4ÁÄÆÚ4”}­ß|ƒ¹õVÌÅc~ö3ÌË/Ûí»w;ÒmûúkÌm·aZµ²ï-.óé§•{O®Ö¦M1§Ocòó1—]æØ~ùåvÛÙ³˜K.±Ûrrlžýûc6´ee?—-[<ÿüËk ý;#sË-¶Qít^óâýþõ¯ž†Æ`Ο÷¬Þzó|ý™7j„9zÔ¦‹Šr<·m[ûyýø#&4Tç­¸†„ÒÒlíMMõ¾Qê.€Ø¼ÙeóŸ0Áõö‡¶ÛöísŸ“&†ØX›î€£Â;ïØméé†k¯µù]{­}\™ÂÓ`ÀD@€aéR×Ï_ºÔî¯LÚú@ld£¹ŸûMWºš`‚M#™Ë¸Ìü–߃1g8ãqÚ“ãe¬1sˆC&–XJ¨éK_sˆCÆ`ÌÆT*me×F42‹Yl ÆìaO™ÆyARé}qĹ|n&™åÖèù±8m0ÁæYž58`òÈsJwŽs ´VyãØêØÞ£‡sü “—Wöùݺ9çm·gf–øNd–šÿñGGÚ¢Fš»|K¾à`̳ÏÚ`!/Ï9Ïsçʾքçkƒ…¼<çcžs´Q8zÔn»öZç×zíµ• ví2$'ºtñ,€¸r;Öæqè ŽBC }ûÚÇÆÆŒ©\Úú@¸úÅ»íÌïø1³ > °ÀŒÁ§í#i Æ|ʧ•J[™5€ó.ïƒ1G8bÚÓÞ««,¥÷5¡‰ËçžãœÇWiæ0Ç£t ´VUѸ±wÛK?.u…/¤lþÜ9ϱ`“åå[2íœ9žw“1äœgƒeÓ½ÖŠ~Möæ=¹[{ôp\- °ëÁƒvÛàÁŽt×^‹Ù¾½lþçÎa}Û…©I“ ¿Þ|†ÆØ_ðK/(ÈýgSSŸù¥—ÚÀ#;sÑEvÛž=ö¹ÑÑ:Ïh½€5 Àðî»¶f9b»Uæ×yw7v‡»íEçÌñìþsçìãÒWLBB.¼‘_ÕÄ‚6ÎmOFŽ´Û?ý´ri«1€¨Ö›¨KÞ´û5_3›Ùìd'cãqG8Â9ÎqŠS¤“Ît¦Ó‚NiºÓ€4Òœ¶§’ @4Ñ•J[/ð‰$ò#?r#7ò5_»MëjĦÒrÉuùÜøÁÞOÄUnG*r·Ù›¹‹æ4'€.áÝ $Õ&/Ï»í¥]u•ëÇEƒ‡üðƒc_E#=Ï]¾%Ýf¿>Üu4on󹤜¯ONŽóã‚‚²i¾ÿÞþ½öÚòß·7ïÉaÇèØ„AƒàŠ+콌+V8ÒmÙQQö¾Êì=¯¾ 0}ºoëCnî…¿_o>Ãsçì Í¡¡ÎÛcc}Sæ¾üÌ¿ÿæÍƒfÍìgЫ—0`ófHO×¹D.¤ò$&Â?Ú;ÿ¿vß>©Ôɦ²'zOO²E_úÈHç힌(á GŽØ“É©SöË8}:´háÙs»Û¶'iÎmORmÛ“èèÊ¥­F5> SºxÕH'œ@ %”ntc SØÁ:Ò±8M+ZÙºÅ1§çç8a„U*­·¦0… L þØþýûßíÿ-[Ú×Û§|øaåÞSEå0nœ]Á¾‡’ƒ–¤¥Á¯m®7Âüùvd!€ððêùœ«ê3{Övçi×Îó{,ðm&Êé¾SŸáï~çy·$o^CU|æEkZšÝ~ö¬sw&­Z¹.:¾¸!¸¢.MÞnóMÏ^“¯Gaò´›Ò¦M†´£65ib¸øbCB‚aÛ6ûœùó+Î?7צ ,{OŠ1†œœÊ¥­¯]˜Šd‘År–3ŠQt¥k…ϹŽëx™—ÙÍnrÉå$'YÆ2F2€A ªðêAÑã’W¼I[›}Ï÷ÄÃLfò%_’[¸ìe/¯ó:½é]œöaæ5^ã~ —\¶±_òKý"#uƨQöêí‰pæ ,^l»Ÿdd”øN|110s&|ù¥í&S4—Áë¯CoÇW‚C‡ o_øì3;”ø‰6ÿQ£Êûá‡áµ×l×–Ü\ض ~y_Ÿ¬,èÙÓþ€•žn_Cn®½ pë­•{OåÉΆ÷ß·¿xÁòåpø°sšÞ½áÍ7í¯õçÎ9Ž3kÖ…¿_ÏkUô¾ø"üîw°gŠþÛoaÉ¸é¦ { Uñ™—¾ ))6½H½äéIöë¯í—~Ñ"ç/ýÝwÛýçÏWÍë»î:xùe;ÁKn.œ< Ë–ÁHÛeРŠópwõ èqÉ« Þ¤­ïW ŠÖv´3cNsºÒyt Cñ\”º1úvnwJ{w¸½‰Ú“´Zµj­}W5´jõ‡zaG%3Óµ«>S­Zÿÿm:ÔЬ™½axýuûß±£j®@¸[;t°Ï9uÊó›¨own{rÇîo¢ö$m}»±žõü†ßЉNÅ}óûЇ¹Ìœo`.9ãrI[ÙÊD&M4q!„Л޼Ç{¬fuqÚR˜Ílb‰%”Pb‰e³œö{›VDD¤:½öš½7嫯콤~;wª\D2Ä^Èζ÷K|õ•½yëüy˜<¹j޹u+Lœho„ºè";¥|ïÞðžm²zuÉŸè]ψRضœ=Û^> µgÍrÞïmÚjXéY¸¸’M6ðH…yD.®œà“˜Tüx.sÇ8â‰g kœÒ.có˜W©´"""5!;ÛvÕûÍoT"ņµù^½ qc8zÔvczî9ïG8pÕÐ/¹­hä©èh÷#8“&U|¬¹síññ°Æ¹íɲevèµÊ¤­FØK:tˆŽ;²ß®rŸðŪåÜ=~¾Ú @Dd— Ò~Œg”´½¸›»À:ЀÃf Kx†gÈ$Ó)}!Le*cK8ád’É{¼Çt¦s†3•Në‰ääd}©EDDDjЪ €Uqq• œZÌ…íÒ^½ì}@Ûåða{#Õ3Ï@ffÙ<] {S§ÂرvD§ÌL{cút{s_eÓz¨¨½_º]ïNDdŒ1¤­K£oŸ¾Õ@ø"RçÏcIö<–³ëÆPPàüüiÓˆ‹‹³Ã¸*xP!""""õPëÖŽ« ññм¹c_v6,_ Ú9¾û®Âìâ g…^¥’U!""""uDR’HÍÕU€  G{…aèPèÞÝyÒµ]»ì†Å‹í,ÌçÏ«<@ˆˆˆˆH½JÉÉТ$$Àðá0d„…9öŸ9+W:®2dd¨ @ˆˆˆˆˆ_II0n„‡CÆŽíû÷Û`aÑ"Xµ rrTv DDDDį̚'–Ý~ùåv˜ÕÏ?·ÃâÅðå—*/""""âWš6µó2ÄÇÛµsg÷igÎt=S´(€‘úÚz „^½CÏžv[‘Ó§!3"#Ÿ§ù@ˆˆˆˆˆŸèÒÅ0ÄÅAh¨cßùóšj‡Y]¾Ö¯·Û4™›ñáᎀ!>Ú´qÞ¿{·#`Xµ N*›Ç´iö¯»a\E„ˆˆˆˆÔRåÍÇßÇpô¨#`X¾ÜvQòDQ! DDDD¤¥çcðä>†U«î]*G)Ö :Ò‹^¼Ækìe/9äG?ðkXÃ$&D×y¾Ïû˜Ki!„0ƒdA.¹dÁ fL𥩳ÁCRìÝ ÿý¯Ý9) úöµûRSíƒ~ýà’Kìdo/¾èÁCçζ,vícìêNH̘a'ºË͵gÌ€`/ÚÞäá‹ãùXµ\XǺ2Û —XbéCF0Âãü†3œ;¸ƒÓœ&”Ð2û`>óI ¡x[{Ú3™ÉÄÃõ\_tx“VDDD¤Îxê)×C¦ŽäÉ} þÂÓ ) æÏ·³i7ÛÃäÉ×__~ðám¾8^¨–+›ØÄ<À/ø!„ИÆ\Îå<ÌÃÜÀ çÕ”¦Ìaó¸Ë4cC dA?úÑ”¦ÄK$ÀhFW*­ˆˆˆH­Ö©<ü° ~ÿ{÷éž{ÎŽ¬ôÐC°`EÁÔ´iеkùéÆŒ±ùŒ {¥¦iSˆµ`´íFoòðÅñêjу¼Â+ìd'g9Kƒ ÀøÇy=ÍÓ\Æeld#æÏ.Ó$’ÀD&²–µœæ4©¤2‰INû½M+"""R«Á 7ÀË/ÃW_Áž=68<Øî?|¸ìs¦Ms=S´?ëÒÅvõªèJDba»pâDX»ÖÞ+’š “&9ï÷U¾8^¨Ö›¨]uÚÉNÆ0Æ£ç÷¦7÷qç9ϯø¸L×æ´=•T¢‰®TZ‘סƒ † ƒmù"ÇŽÁÒ¥öªÂ²e•¥ù|©»m7’æÜn$Õ¶‰Žöm¾8^] \|t!šhq¨ÜtiÌ›¼Ið'þTîU‹V´²ß!Ž9m?ÎqÀÞQ™´""""ÕßZ äP‡ì¿òJ¸ývûkyc`Ëøì3»nÜ¥~`Õ| ¾Óª•#Psj8Úv#aa¾ÍÃÇ«ëD´ ÝéÎÓ÷ü.ta?ûù#ôêxîW6­ˆˆˆH•jÝÚq•!>ž¿5oîØ—mïqX¸–,ᆱ8?ÍÇàãFm@ù}‡/ŽWWˆ"Yd±œåà9HWºVøœÇ°£üš_“CN¹isœp #Œ£-Þ^t5¡äÕoÒŠˆˆˆTZy“¹5h=zÀСvíÞÝ©‘ø³cǸò«¯H2Å¿zþ¼Ê³&?ngé ³“ë7 ¯;æÛ<|q¼*Р&?ƒ|ò=NÛ„&¬`…ËùJ>ÞÊVúÒ×)¢Çé¤oó&­ˆˆˆH¥ƒ‡ädçûZ´°£èüóŸö*ºu0u*\{-œ= ‹Á}÷ÁWðsæ°l¬\©à¡&mÝZØPtn7?NO÷m¾8^] Ö³žßð:щ ‚%”>ôa.sç˜ÝM çR˜Ílb‰%”Pb‰e³œö{›VDDD¤ÒÁCÉLJÃ?ÀܹðË_Ú_”÷ï‡?ÿn¼Z¶´Ý—^{ÍÙ)µCJa»pöl;œjh¨ý;k–ó~p?!7yx“¶UK¦ž…‹+ÙdóT˜‡»{JNWd.sÇ8â‰g kœÒ/có˜W©´""""^™>¦L)»ýòË!?>ÿÜ^iX¼¾üRåUS\5ôKn+êN6w.Œññ¶+™SÃqÌó ÝèM¾8^Œ1†C‡ѱcGöï+üÛ/V-çîñ8ðÕn""»Tx~ôc<ã‰#Ž6´!<2È`9Ë™Íls¸Ü€ ÜÏÛMúB˜ÊTÆ2–pÂÉ$“÷xéLç g*ÖÉá@Dê¸ä${Kž¦ó™ˆ·N…†òUd${##ÙA~Æ®ÛGk×2øóÏU`U}>ó¤]æÉìÑÅ ÇÛÕlìX{Bf&¼÷ž Ïœ)›§«ž=ÍÃÛ´*jï—n×»Ùc iëÒèÛ§oõ\XS¸xÑxwW¹»ôg8ÃäÂ¥"Þ¤qj{ßµn;«®b_d$™ááű€¦§NqªiS§çÄ­^MܪU*¼Ú›QΜɓíZÙ<=ÍÃÛ´Õ$P5¦†#^).'•—ÊLåU‹$é<¦:¦2+WPíyØ0»^v™sƒoùrX°³h§Ž-3™ÛªädV©Ž©VG)€ñD›6pÓM0|¸í“^rèo¿µó2,\hïkÈ)5ä¼&s""""õ\@tëf†aà &ÆÑ-ÅØ´É À¶m÷£×dn¢BDDD¤*oB7»&±h‘óÄ^" DDDDêiðP2pHN¾°®I" DDDDü$xHJ‚ñãmq!]“D@ˆ ‹mæ IDATˆˆˆÔ3/¼=Tv{x8œ;g'rS×$"""â§Ú´Aƒì:p \q…û´3gºž-ZD@ˆˆˆH=Õ²% `o€8®¾ÚyV|ÿ}ÙíÓ¦iXU"""Rï5m ýûÛ`aÐ ˆŠ‚ ûOŸ†/¾€+`åJ{/CAA™ Ý<ˆ(€‘ú((úôqtIêÑK4crr`Ý:0¬X7ÂùóeóÑ„n" DDD¤îY5`€cä#—-”@èÙÓq…¡woD9ÒÒìÕ…+ì¿=bUº‰(€‘:$)‰UqqößÉÉvmÐÀÎú\0ôï¡¡Žç@zº£KÒêÕ¶›’ˆ(€‘ú<”™‹aôhøÙÏ E ç´{ö8º$­^ 'N¨üD@ˆˆˆˆßxê)xì±²Û;u²rtIZ±Bó1H¥ 'þ+ŒS“H €Ž©õ:u‚o„aÃì0«î¼ø"üö·*/"""âW‚‚ .nºÉ?ÿ¹c_~>> íÚ9?GéŠL 1*ˆjР:Ò‹^¼Ækìe/9äG?ðkXÃ$&DÏó!„Ì ƒ rÉ%ƒ f0ƒ`‚ËäíMZ)¥CøÍo`Ñ"{ŸÂâÅðÀ6x8v Þ}ÆŒ±÷9´oï,(xJjK[îàžçyÖ³žl²ù‚/|wcÊ_=3f@FäæÚ¿3f@pð…¥­AÕrbëÊl +\b‰¥}ÁŸå@ó™O ÅiÛÓžÉL&†®çúâþqÞ¤ì«ýúÙ+ C‡B—.ή-[à³Ïìºq£A©¤iÓˆ‹‹ƒ€V)x¬DEúЛÞô¥/íp¾’•O>ÛÙNQµç…ÀüùàhgÒ¾=Lž 11pýõŽ`Ä›´5¬Z®@lbð¿à„Bcs9—ó0p7ø41Œ!2È ýhJSb‰%ƒ H`4£+•VDDÄoµn wß ÿú?nor~ä‹x  èLgú.½éM$‘eÒícëXGZá²›ÝP6@-m)¹°^'×äU®DÛÎdâDXkÛ™¤¦Â¤I6OL„¹s½OëDW]v²“1ŒñiÝé@iNéRI šèJ¥©WÁCɆUr²‡aÈ;bÒ!æØæŒbuáBX²Äþ**âE{­¨qß”¦ô¤gq°Ð›Þ4§¹SºŸø‰Ml"•T6°õ¬çÇjæÍ9bïßÉÉýûíwàùç!+«âçv·íLҜۙ¤Úv&ÑÑ•KëO„+]èB4ÑâÏòhE+€2í8Ç{Y¬ˆ7iEDDêeð”ãÆÙîG :¶ïßoƒ…E‹`Õ*Û€¹ÛØFWºÒ†NÛs˜TR‹¯0lg;ç©%WµÂÃíßÐP;[z·n¶»^ÿþpð`ùÏmeÛ™+ü·íL§ Ý›´5¬Au, piIKH`3› €Gy´Jò(=aHyˆx“VDD¤Îš>Ýu—¥Ë/·?ÿ~÷;¸új¸òJxðAD(x´£·q›ÛýQDQ@ØÀ ¼À(Fq—Ñžö$’È˼̶Ԏàaóf˜0ÁÞç—\b¯ÌmßmÛÂsÏyÑ(ÿqeÓÖ¹‘EËYÎpƒt¥«Oó8Îq 'Œ0Žâ˜Å²èjBÉ« Þ¤©“Ú´±ó2 nGNrgæL×3E‹¸ ®-µTÔs£?ýÙÌfÎr¶ö¿Áë®s~œ› Ë–ÁÈ‘öêÜ Açqü¸½‚æ<³zÑÕ„’W¼IëD‘|ò«$­l%œpúÒ—ñ¯âí}é @:é•J+""R'ØnÇÛûbb¿bcût·mëüÍÇ >ŽqŒ-lq;ÂæÖÔýÂÈÏw|Ï*²u« úöµ7B74m;“ôôÊ¥õ‡b=ëù+e«È ƒ@¹†k˜Å,Àùæ’ó3T6RÆ0f3›ïøŽml£ÝŠÓ¦R©´"""µVP l†aÃà²ËûΜåËaÁ{?ÃÑ£Î÷A(x J.‡9ìÔž«Ó¶nµ“ ®XûöÙà;*ÊÑuiõjGÚ’s9””’b¿³gÃwßÁ¶m6¸Ÿ5˱¿2iý!€èY¸¸’M6ðˆOó˜Ë\Æ1ŽxâËDºËXÆ<æU*­ˆˆH­R²kR|¼Å¶È·ßÚÑb.´÷5”¾‡aÚ4GƒGÁC½UÞhH¾ ÊË¿N‹Žv?òщvxÕŠÌk(ˆ·Ã;54—Á¼y•K[ÃcŒáСCtìØ‘ýûv•û„/V-çîñ8ðÕn""»Tx~ôc<ã‰#Ž6´!<2È`9Ë™Íl§ èî „7y„ÂT¦2–±„N&™¼Ç{Lg:g8Sé´žHÖ‰XDê¸ä${Kž¦óYíj Âw­[³ïª«ØIfxxqó0ÏÌ$rß>"÷î¥õwßi8!)9Éåöýû ?NÈO!eö¹è ™m29~´øovóìº{>«l»¬W/;ÚÒ€СƒÝvø°Tà™g 3³Ä—ÓͰýÔ©0v¬í¢”™ ï½g48s¦òi/@Q{¿t»ÞˆÈ.cH[—Fß>}«ç ÄšÂųˆ&à‚ó8Ã&.¾L+""âk« €€—33Ÿ äàW°/2’}‘‘üجYñ¾FçÎÑñàA®Ú·+÷í£ééÓ*L ð\ á™áî„û#êe°àSë×ÛÕ£l9áú™30y²]+l”z‘¶&ë—jG-Œxý´œT^*3•W-’¤óXµÕ±¤$ˆ‹³ÄªU¶;‘‡]“Î}þ9{srØ«ï¥ß×±¶´ušÉ¹;ÝiD#·ù`„í†ôÓaØ]Õ"""µ=Ps1¡Ûøñ6€(9jÒ¦M6hX°ÀÞXiŒÊίoDU,ô¥/íhç”&Ÿ|¶³(¢\æñ1« E„ˆˆHò ðÐCe·‡‡Ã¹s°x±ó¨Iâ·Â#ro$—¹Œ à:®ã".rJ“M6ë —4ÒØÀNqª~Œ†$ DDDüR›6vâ©Aƒ`à@¸â ÷ig΄)STf~¨ èLg§îH‘DÂ{Îéö±¯8XH#Ý즀‚2ùèVzQ!""RG´liGo) ®¾ÚyV|ÿ}Ùíš“¡Þ)o(Õ¦4¥'=‹ƒ…Þô¦9ÍÒýÄOëpŒoÚ}ó_<ËzÖsŒc*XQ!""R—å5nlo|8Ð QQР#ÁéÓðÅvRª•+í½ šÐÍmc]éJC:m?ÌaRI-¾Â°íL¹Ë^‘ZðÅœ(€©“‚‚ O4ˆ¿Üy'GÚ¶urr`Ý:0¬X7ÂùóeóÑ„nõVÑ$mîDÅ9α™ÍNÝ‘ŽpD…' DDDj½¤¤òñУ‡£KRïÞ6ˆ¾@Zš½º°b…ýwéÙŸÝ) "¤Î Íè\Rú³™Íœå¬ P@ˆˆˆÔ¹à¡dàœl¯&tëæè’Ô¿?„†:Ò@z:¬XAb›6tøúkf<ö˜ÊRÁB±cc [¸\æã͹" DDDjkð”£FÁ¥—B‹Îi÷ìqtIZ½Nœ R], %—ÃÐPª¢BDD¤Þ˜>Ýõp©E##:äè’´b…æc¨ãÊ ÉWÁByù‹(€©‹Ú´±£% 7Þè>Ý‹/Âo«òò‹Yì³`AD„ˆˆH]`ïe>† ƒ˜» À8rÚ¶u~ކS­W‚ &†·û‹îQP° ¢BDDüUP l†aÃà²ËûΜåËaÁX´ÈvKÒ\ õJ[Ú:ÍäÜî4¢‘Ûô#¡`AD„ˆˆø’]“âã!$ıïÛoaáB»~þyÙáU5CnÈETq°Ð—¾´£Sš|òÙÎv¢ˆr™ÇÇ|¬‚Q!""õ^E]“6m²ÂvÖgSÁH8š‹¡N#Œ^ô¢'=éK_®ã:.â"§4Ùd³®pI# là§4’ˆ©—Ê›ÐÍÛ®IR§5 éìÔ)’È2éö±Ïi&çÝ즀‚²1§FC©;D/zqw1´§= hÀIN²—½|Â'ü™?“Cù³uv£ãÇ Ü@{Ú“E;ÙÉŸøËY^&}!La ‰$Ò†6å()¤0éef|ô&­ˆˆTqðPzB· éš$µNñU€Â9‰¤âÆ}SšÒ“žÅÁBozÓœæNÏÿ‰ŸØÄ&RIeXÏzŽqL+U#$Äõœ˜hÏEGBJŠúìYßçá‹ãÕ—bëÊl +\b‰¥}ÁˆróH'ÝéqëÂ%žxîäNþÁ?œ~a˜Ï|H(ÞÖžöLf21Äp=ןÀ¼I+""Õ<$%Áøñö?Ñ éš$uÂ6¶Ñ•®4¤¡ÓöÃ&•Ôâ+ ÛÙÎyΫÀ¤êÀüùàh#Ò¾=Lžl»L^}ÅçoòðÅñªIƒê8È&6ñð ~A!4¦1—s9ó0€Û)ÞKçñü‘DÒ„&t¤#ó™Àã<î”v cH 2èG?šÒ”XbÉ ƒÍèJ¥‘*òÔS®»,…‡Ãùóðé§6˜hÛzô€?þÒÓ<Ô•vDÉ(F¹ME° ¼À Œb—qíiO"‰¼ÌËla‹‚©>cÆØÆ|FôëM›Bl¬}œ£Gû6_¯šTˈôpzÜ„&4(\þüÎã‡ÏxnåV:ÒÑi_"‰Ld"kY @*©Lbÿâ_$’È\æzVDD|¨S';‘ÛM7A\œût3gºž-Zj¥@éLg¢ —ît'Š(šÑ¬Üçõ§?›Ù¬®ÃR{$Ú6"'ÂZÛF$5&M‚ýËîŸ;×wyøâxõ)€(âª+ÐNv2†1•ʯ­8Á §íÝé@iNÛSI šèJ¥‘ d…›n‚n€ˆǾü|8|Ú9¿©9jùGJ×pMq°p-×Ò•®T&í7|C:éÜÌÍ.óZèÔ.Ým‘4ç6"©¶Ht´oóðÅñêcáJºM4‡8äÕóšÑŒwx€E,rX”¾©ê8Çœ¦ª÷&­ˆˆx©C, :ß}ì,]jïgXº²²4¡[-ÖŒft£ÝéN7ºq-×Ò‰N–jJ ûÙÏV¶’N:[ØÂ6¶ÿ?«û ¥ÎhÕÊq®rj$Ú6"aa¾ÍÃÇ«DÑði-hAwºó4OC ò(ñ‘Çù\Îå,b¿àà@™{ JÏÝãʦwÿ«Ú¾»7ÞC‡B—.%Z–¶lÏ>³ëÆPPj¨MMèV-Ü5â‹þï #¬8H(ê†ôs~^æÿÆóœg';‹ƒ„­leÛø‘+üÿ6¹ðóMÖç,µ]@@ù}‡/ŽWŸˆ"Yd±œåà9HWºzüÜîtçÿ·wïáUUwþÇß'F ‘‹ƒ¤˜ "4p &E é[nÏè(¿2ÓÎÅ:ÚùaÁ$¿Ì ?…Z;íôéož¶ÖiCp¨ÂÂ# ˜€I°\4’‚$` b ²¬œ[rNÎ…“ä|^ûÙÏáìý={VVNÖ÷ìµ×ÚÈFb‰å(G™ÉLÎrÖ=QãqÄC µ8Ç·_Mp½ÚH¬ˆˆxp×]Ϋ ÐßeØÍúz37æM°y3œ9ãûxšÐí¦YÏzRHaCÚìk¤Ñ‘,”µ,ñ‘ÏaØEº­sçÌ@11îóÊØ¯ÔÕ…ö¡8_ON ì®s= ø,²XÍjnçvv°ƒ9Ìá"ÛÄ•RJq¤‘ÆZÖ:¶§‘¸ H¬ˆHøÈl8ëwaFBúÆ7Ìššêþ ÙáÃæ ÃæÍ°{·EIº„¡ e,c½î·ßŸp‰Kä £ReáˆF@’ðRZjôiiæ&fG#Ñ´)+ í1Bq¾ž”@ìe/oð;ÙI5ÕDɃ<ÈJVî70»ÎÏàêžá5^#‚ÞäM¾Ï÷¹Æ5çË'ŸÙÌf«8ÃÊ)'™dÇùòÉ*VD$O2…),f1Ó™N,±\å*ÕT³m¬b'9éLà¼\ðõMHëøh¢YÎr°€8⨡†Õ¬&<h:Öº!LDº£-3g²wÂû",‹aÕÕ$TT0²²’öQA¤Óõ¯ïOlM,qµqŽÇè/£ÛÄ5ÜÞ@Ml µqµŽÇúþõ&/ÌÉöxìÜÝ"=Ï µË¢£aùrX°À|‘RS«WC^ž¹úêh¨z¹È1½öö~ëv½7ñ £±,‹’=%¤MJëœBUD¤ëù¢Oª†§jøpª‡çó;îð;åý÷ydûvZˆùjȇ"YQ»Lí²P'‘*BUØ®RN*/•™Ê«ƒÝy'L›3f˜õþûÝ÷_¸g϶ݞ›ËîœMóÕu,Ï ÄÃ9ûì†äºœüò$TbVý^ªŽ‰Êªƒ)é©úô1 CzºI’’ÌJv—/CQÂŽ憽æfMæÖ zÓ›qŒóºß~‚ÇdÁ¥Û¯ˆˆ ^TLšd’…ôt3Ôj¤ËÇ|c#ìÙãL>øÀó«¹¹-ƒ0i2·PÌ`&µ,™H*©ÜÊ­^ãç0GÉ‚ˆ(‘eg·?#sd¤Iì]’&N4I„]S””˜d¡°ÐüÛïÑ’t3mðX#I"É‘,¤‘ÆP†ºÅ\ç:9HIñï¨ ED „ˆˆ˜<¸&99¦ûQr²³KÒÔ©¦›’]s³™hÈ~…¡¨¾øBeÙÁbˆ!á“î>}7Ó˜ÆC<ÄíÜîSO={Z–Jø€ø‚/4ׂˆ(‘H²³aî\4ÈLèæêèQ“,lß»vÁùó*¿A‰$ºuGJ V»ÇUPáHJ(áGh¦¹ÍñZA."¢BDD“—Ë–µÝn©ªÊÙ%©°jkUf7ÈÛU6úÒ—‡yØ‘,Ld"ýéï÷%_RwO§†žâÕ¢WÙË^ê¨SÁŠˆé ±±0kdeÁcy{ýuxöY•W')§œ1ŒánqÛ~’“Sì¸Âpƒ,{Ê$}Š6¨àDD „ˆˆ„˜ÍfîeÈʂٳaÜ8ç쥖§OÃàÁî¯Ñpª!7”¡Œe¬×ýI$qkìg¿[w¤ÓœVቈé`QQðÈ#&a˜=î¾Û¹¯¡¶mƒ `Ó&Ó-Is1tH²àºxš¤ÍÕT¦²Ÿý|ÅW*@%""ÀµkRFDG;÷}ú)lÜhÖíÛÛ¯šÛ2ŒªMs1tT²`Ÿ¤Í>i[k»5÷¶ˆˆ‘å«kÒ¾}&aذÁÌúlùÂ3Ws1„:Yð4£³†RQ!"ZíMèh×$ñª½ÑB•,´w|Q!"šä¡õ„n7Ò5I¶™Í!KDDD „ˆHç%ÙÙ°x±I n¤k’8ذ1’‘$“ì5Æ~‚’%""]×Ï~?úQÛíqqpílÞ¬®IÿÁ‰$‘DRZ–TRI"‰~ôk÷us˜£dADD „ˆH 3f˜5=†÷ûÊ+žg‹‡(¢xÉÂXÆ2†1DÕ&ö§(£ŒoòMÇz‡wT ""á–@L`Oñé¤3ŒaDÁE.ò Ÿ°žõü‚_Јï~‰$ò=¾Ç\æ’H"àýæ·h¢YÆ2²Xb©¥–|òÉ#¯Í˜ÞÄŠHqç0mš3i¸ÿ~÷ý.ÀÙ³m·kN†6úÑd’I%•d’ËXF1ŠÈVb,,*©¤”RÊ(ã(§œ:êûEDº_]Rm~Âm¾xZ¸Ð|aU[ ùù—_}|lON ö°§Í¶˜–e2“™Ä$æ0ÇçqsدóÙ°±Žud’éØ6Œa,e)ãÇLf:þP+"Ý×ÕÛn37>§§›„!) ""œ—/CQÂŽæ^†ææ°›ÐÍñygkû¹jÿì¶' önH÷ro›/sšhâ‡IB)¥”SÎ%.µûÙ-"ÒãØl°nd:Ûš K—šá¾gÎt&*Äöôbûø=¿g»8Îqšhbƒø.ßå5^ó:‰OkG8·,‡8ä5n>óÉ$“jªy‚'(§œ$’ø “Læ1 Ž‘n$* &M‚3øÍ“Orzð`÷„¡±öì1 Ca!|ø!45µ=Ž&t`=ëI!…! i³¯‘FG²PÖ²|ÄG~]Yé6I@°æÏ7 Au5<ñ„ù‚*) þð³}Þ<((<¶§'ãïö¼½ˆhYþÌŸý:ÎhFû·…,a ïó>Åóϱ–µ,d¡#)$VDn¢öæbˆŒ„ñã]’&N4Ip ˆhn†’su¡°ÐüÛß!V{ø„nþŒ„d¿?á—8ÈAG7¤2Ê8šhRñØ05mM–,÷M[“âbxî9X»Öì·'ÄöôÂÎSW Cb>óCzžTR(¡Äm{1ŤT¬ˆÜÄä¡õ\ fÖg{—¤©S¡OgLs3”•Aa! cc¹ç/aÅ /„}Q;Ò<æQN9Ç8¦n"~NŸ†¯}Í|ñTYi†î~í5s¿œÏ†©ikRâÞ֤ش5II .6\OF3šR¨¢*dÇÈ@Çyvç8à6Q ±"Ò’‡ìl˜; ‚ÜcuvIÚµ Ο !L»…r$¤·xKuQDÂW\œyìÓÇ|y•œ O?m¾¼:qÂGÃÔ´5©sokrδ5‰‰ .6\û r@*©¼ÄKŒc?æÇ¼ÍÛv>oσ‘N’—çy¸TûÈHUUÎ.I……a=ƒFB ’§›’í÷<ìßo¾ Û·Ãñãл7<ô¼úª¹7á§?…oÛφ©­ýçÁÆöôÂîØÆ6Žsœœ` cBzüsœ#Ž8bˆ¡gƒÂ~5ÁõjC ±"Ò bcÍhIYYðØcÞã^ž}¶gþ-óÒˆïÔ‘,Ç‘ðõÐCîϯ\­[áñÇMW¦3üh˜ž3W0bbÜ¿è²_Mp½ÚHl¸%v×¹Þ!Ç-¥”8âH#µ¬ulO# €2Ê‚Š‘`³™KÁYY0{¶¦ÎþM‹e™~§ƒ»¿&LçbÐHH""ôw(àFìuÿ_[Zj’‚´4s#´£±iÚš”•ÛÓˆ½ìå Þ`';©¦šH"yYÉJÀýf×ù‚•O>³™Í*Vq†3”SN2ÉŽóå“T¬ˆ„HT<òˆIfφ»ïvîkh€mÛ`ÃØ´É|&s1 e(cëu¿FBéd¥¥ðÇ?šn²æ‹-{×%0÷Û9±–ç¤"?ßü­[µ Μ1C³&'ÃÊ•ÎýÁÄöôâá–Å“zêyžçý:ާËú®ÛìIG,bd°›Ýnñ[ÙÊÖ8ž+"7ÀµkRF†™iÓîÓO͈7š~¦­‡Wís1Ø“×Å×   ID¤“¥¤xùèüy3¼ª/°h‘ùÛ·Û½­ÉÖ­°fMp±7‘ °,Ë¢ªªŠ#FPYÑþlÏE;·ñôâg8~ìñ ¾çf˜Â³˜éL'–X®r•jªÙÆ6V±Š“œl“xºáë¦ëk¢‰f9ËYÀ∣†V³š<òh ÁíuÄú#'Œ'›qþ¾Â™»î¢â¾û¨HH &.έ[}\M $|ò w9Ó£»Ú÷¯ïOlM,qµqŽÇè/£ÛÄ5ÜÞ@Ml ñ•ñ“›ÓyóQäd›Ï±œ\}ž‰H÷vCí² ÌhKÓ¦Á=÷˜m'O–-ðòËPSãò‡ÏË0_š-_ ˜.J55°zµ,¤¡!øØ ÙÛû­ÛõÞÄ'ŒÆ²,Jö”6)­s®@ìnYüËhlAík󇘖¶,¡Œ w;§M›é;w¶Ù×ɉáéHH "!Kýœs Üzí#Nœà¾Š FVTÐ÷òe% ±5ÔÆÕ:ëûד­Š&"ÒìÝkV¿±í´S`éR³úl˜{â»k*IDAT“DªftÑŒ7 ËIåÕ Ê,;¦O7‰ÄΦ;‘Ÿ]“®mßÎ'|ÒÊË×hHþvCª£Ž­–“_ž„JÌÚúýâå}væ;[ŸcúS™©¼Ô%"r£ÉCë Ý/6 „ë¨Iûö™¤aÃsó—Õóúêofs`É‚K7M%"ÒóýÛ¿Á /´Ý×®ÁæÍî£&uc6lŒd$É${y”G•,ˆˆˆ7£F™‰ÜfÍrt[òè•W<ÏÝ->#I$‘”–%•T’H¢ýÚ}Ýæ(Y%"梢L¢0k<ú(Ä»ŒtýºubèP÷×t£9"›"ÏxG²0–±Œa QDµ‰=Å)Ê(sÌ»ÐÚ;¼£ú"""J D$ ÝsIfφôt÷ ëêà½÷Ìý ï½.t› ÝúÑd’I%•d’yì?cà¹ü„Ÿ¸ÅYXTRé˜í(§œ:êûEDDD „HÿÆG”)¦kÒ7¾£]æq±,8pÞ}׬~ÍÍ ºù )†’If,cÝîå^÷aŸ?ƒæˆfqÈ‘$”RJ9å\â’×sÛzôì"""J DÄ“»îr^eÈÈ€þýûêëaÛ6sóóæÍpæŒïãåæv‰ÿÖzÖ“B CÒf_#Žd¡Œ2Æ-ÇÙAgYö¯ËTDDD”@ˆ„ûdnEDÀøñæ Ã7¾©©î±‡›+ ›7ÃîÝÐÔÔ%ÿö9¼±ßŸp‰Kä £ReáM8ÿ_±ƒcUiDDD”@ˆ„©ìlvÚGEÊÉ1뀙i&sûú×!Æe~‚†Ø¹Ó ³ºe TWwÙdÁׄl®æ1rÊ9Æ1Ý« ""¢BD¼%m&s[´ÈÌÇpË-ÎíÇ›+ ›6™ä¡±±Û% ö9ìs.´öo©>ˆˆˆ(¯~ö3øÑÚn2Ä ³ZXhFLÚ¼>þ¸[& ž&dÓÕ%"âØX˜1ìéé0|¸÷ØW^ñã3Þã=^â%æ2—xâ¹Âö³Ÿ_ók~Àx˜‡éK_àžâ)~ÆÏ(¢¨ÝäADD¤Ç;rÄ N2fŒFé|Ó˜¯®†)S o_˜<Ù<ÏÌ„y~´9F(Îbrb<ãÝž÷¢- ÀŸù³Ïc,d!KXÂû¼@1Å<Çs¬e- YH+a*6fÍ‚¬,xì1ïq¯¿Ï>òÓû3’ýþ„K\â ÝÊ(ãGh¢I?G‘öŒí_ÜBÓvdÉxß´).†çžƒµkÍþ‚‚Ð#çëŽ „§®@‡8Ä|æû|m*©”Pâ¶½˜bRHéðX 6›¹—!+ fÏ6—í} - NŸ†ÁƒÝ_¢áTƒ ió(§œcS—;‘Ž”jÚŽ”¸·)6mGRRB{ŒPœ¯;'“=F“B UTµ7Ž:íÎqÀm«ŽŠ•,* yÄ$ ³gÃÝw;÷54À¶m°alÚdn\ Á\ ¡ é-ÞÒÏPDD¤3 4mGêÜÛŽœ3mGbbB{ŒPœ¯;'ö›00€TRy‰—Ç8~Ìy›·:†·ç+=„kפŒ 3ÂݧŸÂÆfݾ½í𪹹-ÅæWò ‘DDDn2O7Ûn ½×úµÁ+c„â|Ý1°»À¶±ãç'߯9Ç9âˆ#†j©ul·_!p½‚ÐQ±ÒÍùêš´oŸI6l0³>{ÑÀшϵoéü‘rZ’–œœ…ZDDD<5JÏ™RbbL¯Gã±åJ@]]hŠóõ„Âî:×ýŽ-¥”8âH#µ¬ulO# €2Ê:Á÷˜¹S˜Âb3éÄËU®RM5ÛØÆ*Vq’“Ο“—+ÑD³œå,`qÄQC «YMy4ÐÐ)±þP¿ôŽ·eæLöN˜àqß-ÍÍÄ;Æ}Œ¬¨ ïåËí«}bkb‰«såï1õƒ½½ßº]ïM|Âh,Ë¢dO i“Ò:ç Äî–Å¿ŒÆ{ÿ´XÚ²øÒQ±rs|ѧUÇS5|8ÕÇóùwxM+.fFaaH’…Ú¸ZÇc}ÿz²s²õéi¹G¢¡–.5k°Çô÷Æv‚HÕ–.ñªœÚ–×w´i0c†Yï¿ßýE.pÿÙmµ9;rs¦R„ÿÝê¨ã@«åä—'¡³¶~¿xù¹æÜä2•W(eësLuLe¦òR;L”@Hvõ¶ÛÌÏéé&aHJ‚ˆgÀåËPT……°c”—s¤ù:¹.·Ad·Ìç6Í% .]èDDDDD „tEQQ0i̘Áož|’Óƒ»' °gI áá© 6F2’d¾ëH,—Q\åQ% """"J ¤Kko.€ÈH?ÞÙ%iâD“D§€ˆæf()1W ¡¤„ÈÆ&I$…R˜K*©$‘D?ú¹ŸºÕ½Ës˜£dADDDD „téä¡õ\ fŒb{—¤©S¡OgLs³™ø¤°…±±Ä?Í–×:’…±ü_Æ0†(¢Úœî§(£Ì1ïBkïðŽ~&""""J ¤[$ÙÙ0w. ¸Ç= ……ô.ÜCò®z>O2É<öµ žHn«ù@,,*©tLÈv€”SNuŽý""""¢Bº‹¼\ïgÐÑÌ!9’„RJ)§œK\òzúö†ü%ÒÄÆšÑ’²²à±Ç¼†e½~‚_>{+CXØf_#Žd¡Œ2Æ-ÇÙAgYö¯ËT¾""""J ¤[³Ù̽ YY0{6ŒçœŲ|Nv‰Nu—¸ÄA:º!•QÆŽÐD“3'«rQ!ÝVT<òˆIfφ»ïvìêÕpôm×y|ÃmÌÚd#¶s1Ìcå”sŒcºWADDDD „ô8-]“zgÍåjÆT®G÷rìºûS˜½Ñ¬l¿…¨Æ[s,Äò¨Ç¹Þâ-•©ˆˆˆˆé1l6îJ~”¿Êz’K³§R3.Ë_6 Úg†¬ 0¸¼ŽRËLÄö›V²Ù¯.´ž‹ADDDD”@HfoÈçf»_ °T4”¡$GM ÿ#s¸0{e³SswgZ^ÝÛ`ú†/´i?Uµ%Ž„¡½ Ù4’ˆˆˆˆé¦r=ÌçöÇØBÎÎÇά¾lË€†hçþ¸O›IÙxšK¨ßþ6å{ùÍÞ,""""J z&6F2’d’Û$¹Ù🋡66«å"Í‚Áûjè·±ˆÏ7¼IMùj,Ýà,""""J zà*’DIiYRI%‰$úÑŸüä¼Ðö55qqí:Q› ùjÃ[X›6qº¶–Ó*NQÑsDŃ<èHÆ2–1Œ!Š(GÌÇ£à7ÁŸf5²gz/ðr/Bó+/óÕ2MÐ&""""J z„~ô#™dRI%™dÆ2–QŒ"²Õæ«(‹ßN¯á¿g5ðÁ£Åçñw:Ò ®_gèÉ[89ÔýØÙ¹›£äADDDDB'¢3N’L2?ççTPÁ®PK-[ÙJ' (à3>ã W¨ ‚y‘^ôjM4+XA5Õ\á ÕT³‚ô¦÷ ŶÇjY²s²ÉÎÉv<·‹!†L2ùßüoÖ°†cã"ÙÅ.^ã5þ†¿a c8Ä!VÝó'ùÁsçÆ=Ü~¾‘ÿµ9Ž-ÿo’‡º:øãaþ|øÚ×89ÌÖê&ˆ\rs4B’ˆˆˆˆ_!;Ë2«ÇŸÕþê¯èhX±ª«áÊó¸bôî}c± S®@”Qæöü®–%ƒ žäIþ‹ÿòyŒQŒb/{éOǶ‘Œ$—\Æ3ž,²u6Ö±ŽL2±ÃÆR–2ŽqÌdfP±ÁZÏzRHaCÚìk¤‘C2³+Dd÷¨|l$Mßø:Œ~ܽ²8ï¾kÖ?„æf÷ƒå¶LÆ`k•LˆˆˆˆHûî¼sÙl°nd:ÛŸ K—¸q0s¦3 $¶“tʈ}ìãïù{H ½ÁÖ±€Ÿð¿Ž±‚ô§?ëXG DE ¬c³˜Å\æ:bç3ŸL2©¦š)L¡/}™Ìdª©&“Læ1/¨Ø`}“o2„!\â»ÙÍë¼ÎS.üšžÿg=êëáO‚§Ÿ†¸8SI^|öîm›<¸&JDDDDsäˆiGãàiõÇüù&!¨®†)S o_˜<Ù<ÏÌ„yó‚‹íI ÄxÆó+~Å1Žq•«TQÅb0‚~#t~È9Æ1®p…cã‡ü€'x»…,a ïó>—¹L1Å<ÇsnûõWë!Uç1û¸;¸ƒ©ÓyvB¿ÿ?÷òÑþßÒTs~÷;xüqèßßd¿¯¾ 3fÀÀðÝïÂoÀ™3úÅé(£G›\g\‰XØÒ¾\²Þ._†âbxî9÷ýÆv’›võ@pžó~Åûº!•Ô6ÿ.¡Ä-¦˜bRH *6˜ä!'Þ°ÍdˆY/Â׿11΀†ر6n„-[L6)""""]ÛéÓðµ¯Ac#TVš¶Ük¯Á… ¾_›ÚÒn-qoRlÚŸ¤¤Û“ˆ~ôãwü€Mlòë5ûØÇd&ó+~Åó<Ï)N1„!¼Ê«n ‰ë¿ë¨s;Æ9Îæfæ`bMr³á·‹€¸Ïà–[œ;*+M²°iìÜi*žˆˆˆˆtqqæ±OHN6ëÓOÃÔ©pâDû¯ØÒn­sorδ?ݾl$¶§&CÂ&6ñpœã~ßñ/ü …òí–¥µk\k³ÍÖjnÞû¥ëQv¶Ç[N ®Û·›„aóføøcýÒ‰ˆˆˆt&O7Û‚±rÿ~xóMÓ¶;~ÜŒ„ôÐC¦ zRüô§ðíoûw¬ÖçoïýÛÁ":ód©¤òðp”£¤“ÎYÎúõÚJ˜Ä$Ö±ŽÏùœF9ÊQ^æeÓPç”3!órõÀþÜõjC ±A{åÈÈ0—µ”<ˆˆˆˆt_=ÿþïæ¦ë+WàâEغÕÜÏ æ>V_¼]=°?w½ÚHlOK ²È¢ˆ"b‰e;˜Ä$·F¿?J)å;|‡  7½I$‘jª(¢È- 4·×ÛŸ»+Hl»¼~”› /¼ _6‘›)Ø“üuýºó<>µ¥- N÷ö§ãyYYp±=)x†gXÇ:nçvÞäMf2“‹\ôÛzò5Wïò.é¤Ó›Þ bßçû¼Ê«\ç:¿ä—ޏ|òXÅ*&3™>ôa2“YÉJ·ýÆœDhHU‘ž¥´ÔŒˆ”’·ßn&y›8V¯6ûwíriØz™\.¿¥}¹j•’µOó¸r¥ûþ@c;I§Üñ:¯;þýdËâ–úy¿Ác-KkÏñ9èx^@‹XDìf·[ìV¶²†5AÅú›DLŸ>l6v*yé<5ô]·Ù¯,¤¤xùèüyçðªí)(€E‹L÷ÝîíO¶n…5k‚‹í$6À²,‹ªª*FŒAeEûcßíÜÆÓ‹Ÿáø±#Ä'Œöýóð1“³ká:Ctkßâ[ü˜“J*W¹Ê°ŠUGrŠ&šå,g ˆ#ŽjXÍjòÈ£† cý‘£ÄADº¹œló9–“«Ï3éæŸgþ¶Ë|ÍælO &L0£-M›÷Üc¶ÆÛo›ØwÞÁ9«W/óøÎ;fû¼yÎØ¯¾2Û~øC¬˜¬ÈH¬ÍsË2ûCùÞ©¼ºÂ‡_W(³@bUÇ‹íªu °ÆÊÉÁ=:¸÷H¹wT¬ÊKu,˜ó©Žv>Õ1³~ø¡iKŒ‰uÛmXÇ;?÷?þ¸{Ô1%7qݰÁüðçÌqßþøãfûÿüïc|þ¹‰½ë.÷íwÝåüÓ¾íȳíïþëÎ;±n¹Å<þíߚ퇅ö½…SyuÕÅÎ.³@bUÇ‹íÊxo´H¹wT¬ÊKu,˜ó©Žv>Õ1ïëÀ&îêÕîWÇ”@tòzútû‡S§|£±±ýcÔÔ8·Mœˆuü¸çË`Çc=üphß[8•—}ûéÓX×®a}ñVYV^Ö€áSljU ,¶«Ö±Püá ¤Ü;*Vå¥:ÌùTÇ‚K TÇóø«_A|¼¹ñ2>Þέ·B}}hß[8•—]\DFBŸ>æ&©eËà£`Ĉð¨cĪŽÛUëXg—{GŪ¼TǺÒq{jy©ŽyÖ¯üîwæß›6…G ¥°»qåŠÉ##Ý·ßz«ÙÞØèû“&9¿Åô´~ù¥3vÓ&g·ˆQ£°¢¢°î»Ï¬ú'¬ÄDÓýŽ;°23±ÊËMìºuáQljU ,¶«Ö±P|sH¹wT¬ÊKu,˜ó©Žv>Õ±¶ë!X}db*+± ê~uL]˜nRw‰ØX÷íqq]–JM57ß\¸`nì=r륗ÚÞŒcí¥õùbcÍö‹CÿÞÂ¥¼¼­÷Þkb/] :H¬êXà±]±Ž…òÒ¿?åÞQ±*/Õ±éÂÎu,ç ×:–šjºªZ–ùì2¤{Ö1uaêd¥¥æ1-Í}»ýyY™ÿÇùÎw`À3&pb¢# ¨Èçk¼à¨¨Ð¿·p)/o®_76[xÔ±@bUÇíŠu¬³Ë½£bU^ªc]é¸=µ¼TÇœ²²Ìg|l,ìØ“&Á©SáSÇÔ…)CFþå/Ρ¹&O6Ï^ïÝw±ÒÓ±z÷6—¾¾ÿ}“Å75a%%9ãpv½¹ï>sù0!ÁÙ%gÿþàÞ›Ê «´kɬ”¬ÛoÇŠŽ67aïÙÓ¶»SO.³@bUÇ‹íªu,oî¼í ¤Ü;*Vå¥:ÌùTÇ;Ÿê˜YŸyëúu³ý÷¿7Ý‘BñwI]˜Âh"¹­[›t„&fY²Ä=î[ßÂjnöÛÜŒõÍo÷ÞT^íO s‡"êX ±ªcÅvÕ:æë½¹–‘·2 ¤Ü;*Vå¥:ÌùTÇ‚;_¸×±@&ÔëªuL ÄM^££Mçêj3öouµyí6ü­oa›þÓõõX……X³fyŽÍÈÀÚ²ëüyó ç… æyFFðïMå…5aÖ¯mú¬76šµ¢ëç?7ý鎫:ælW®c7ú‡7кÐQ±á^^ªcÁ5ðTÇü?ŸêXàõ««Ö±®’@ØZ6PUUň#¨¬8Ün§¢Ûxzñ3?v€ø„Ñê&""""ÒMØÛû­ÛõÞÄ'˜©ÂKö”6)¡ˆˆˆˆˆøK „ˆˆˆˆˆ(%"""""¢BDDDDDºƒÈ=€¯Q›DDDDD¤çÐñ[PW ~÷Ÿ?Wɉˆˆˆˆ(ðíéÅϨÔDDDDD”@øÇ×Lu"""""ÒséQ!"""""J DDDDDD „ˆˆˆˆˆ(%"""""¢BDDDDD¤]mæˆO­R‘öˆ;ÞeY*i?(-+¥±±Q¥!"""""UUU`tÙADDDDDüòÿùQCÌ›öfIEND®B`‚xnec2c-3.4/doc/images/nec2_edit.png000066400000000000000000002075571257141547200171460ustar00rootroot00000000000000‰PNG  IHDR˜ã¶ÔuËsRGB®ÎébKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEØ% 4çþtEXtCommentCreated with GIMPW IDATxÚìwxUÛ‡ïÙÝ$»I6=B -€ ½ Н¢(MyE¥Š¢QÑWÅˆˆ* JPQ)‚ôÞ Hh!½×ﲤí¦@€ç¾®½’9çÌ™ç<ç™ßœsfVÑ4kQ¥àFAAA¸†Nƒ>T hÉk¾k…‰NAAA( &¥€ÐTrŤ¢(Z~a™” AAŠÄÓìi#4sE¦Ÿ—‡—¦iYYYDDFˆµAA»¨Y½&ªUÅ 7ÐiЇŠ!111/AdT$:E'–AAìâ⥋T¬n³ÍP«F­¼©qEg»$sþÜù`ØÈaåš_AáfáFë¦Ê Û"£" ðÐ ù7潜÷Õ<^ãu»rþâyæÏψgG”K~A( 'Öýȶ³I¸ø4áÉÇ:Rp\ÞÊö¥‹8›¹Ngvo|ÃëœÆÉ“§9ñ ñI©h:'¼üªܬ5wÖõ½.uøzÎ×Ù±À¹ ƒ†ôÂxÍMgîþgž{¦À¶¢ÈŸÀª&sêðBÏ]":>‰ŒL'Þ~Ôª[Ÿw•«= «óÍŒ½ö¾ö¼+Â޶½=ís«µ—pûp£uSyäŸÜõn»ó_ŒŽ*V·å Ìä”ä#˜áÃm¨N—óÉù_Ñ)6ÂôÚ2Êš_JCãæÔ‚¥\‰=Æïгe€íÖ¾µ‹Í@ç\…‡h\)üîÇ•ë¯ÑÀ™ÄF„³3"œØÿ äž`ëVkæÖˆáÑ6þ…îwÄ^ùÓfÆžæ·U[ˆJWmÒd¦§påÂY®\8Ë]MGVˆ=*cl™;{.#ŸYne^{ž%}¯HJë'×~¯; BEq£uSøÅpŠï{înîEæ¿™—_Qrë}ÌŒ¬¬ìüFS‰ýÜpíIÙùQÐ4 UUQUÕ¦’ùóUF~#eeea2šPt ©©©x˜=JÌ/¡óâ¡GÚðݲ]\Þõ+§‚Ÿ¦¡‡s¶˜Iø—_wG my/'}¥¨²{@mµkUÃË슚ÇÑþdwHg¶í¤[£¯Ÿ0¢öýNä]OQÕ¹ } ë§Ï~®xÑj‰fõòÍÄY¬¸×hL§¶M ðÁYg%5)È‹9~4¯ìò¶GeŽ-¥©[Iö.jEØ¡¤º8bƒâÊ’ëƒpS]†rtO®nÊÕ=×ê-{tӵⲤüß}ó]±uóâ˜bó×ì×€ó+–£Ó_—¹Û~_[bý ùhQøèßÎû¶ÈJÚœh!e\k¤ï¾ùŽÁÃçaÜøqÅæ„ÒàZµ=šá·ÃÑl]±‰:CÄ… 6­ÜŠEÓðkö0­ªºæ¥Ÿýùlöº‡ý‡ÿåBD4éYVœÝ½¨Ûø.º´ ¶™jW3cØ¿}/gÎ]"!%½³+þÕksW§Ôòt¶©‹¦¦rbß>þ=NL\2txT§I«vÜY'{º÷éǶÉãäîG«ÿ<ÌîE¨áú†=eæžÓócžwÈv÷Öñ`ãÙDþúó4Oõl\hŸ¶g[~"ÿÙHœÅŠ©JKõiO~ÙjöòÇìåO½&wåmsÔöûÒ´unÚub÷“\ŽŽCÅ ¿êuhsÏÝÔòp*Pnaö¾v_îw€9³æäýoo[•tþEÕ%>G|¸,uÈJ<϶-»9{1ŠLÍ€·_5ÝÕ¶@¥±“šv…ÝÛö~…ä´L FwªÖªGë»ÛRŤ/Ô&áGw³ïHQqIXTÍá>"öŠË\±7xøà¼A9GuӵⲤüŽÜÔ—¿f¿þœ_±PóÄåµyŠÊo³³°aÎÜ“ñ܈"O²¸¡Z¢+tä3¿º–)r¡¢êú(õB¿ãLòYVÿF;vq6Å‚“{=íDaýâÇ_6Û|OOŒáø® Ä)>ôm—=e¬fE²ê»•\É7Õ«¦'sñÌ1.;ÇýƒÑÀœ-<¬j<¿/^ƹ„Ìüò”ØËçØúë9š{¡èQ¿Ì¸ì>¢÷¶éŽ–éh¿ ~¨;»¾ZNÒÙÍI¨G3o—Ë+éOg¿±¢yVJÙÏ‹²‡=–Þž¶ÎeÙïÿäû–Á•°“¬]Aï©î¢·Û%ÕÛÞó*mºÜïŽøpYë¢f\dÙâ߈·Xs¶dÆ?¿‡•XÏ’Ž©f\bÅ÷kˆÎÌwi‰„ý{€ ¡áô>€ÀkÚ'dó26‰*SGÄe®î<|0^ž^%ꦒÄeIù¹),˜_áÒÏ+ ìÓ×f43—¤?þ@§(%ö<©×éÑ+…O…ét:æÍ™Wh/MxɦðkËÐét%>•T\~A(zWîìÎ-ø“˜#¿ó;(zîyì~\õ…ûšÞTnv¥^u?ôÖ4Ní[Çú]ˆ:°}ûì¾~WÒUê¶¿ŸŽMëàåfDËJáâ™C¬Z·—­¿üK£A͸°á7Î%dbp«Á½÷w¢N ?œ•Ø+ç9¶wg‘>¯©ÉüýóÆìÑØêmlÒ9Z¦£ýÊÙ¹t 䇭Ùµz'-†v³YÑSXy_Ìø¢Ð²Æ¾8€ó9BæN³½âøÅ¼8{Øå …¤·§­s14¡çƒí©âm"->‚]üÆÑ+ñüµîØŽ*^&Ò⯰ë_9z%­Øz–d§së7©^Svnûİa]8C©o“gs¨ ÷÷HÝê~¸èeÖL(g™£› Ó>ß}ó]º©$qYR~€‘£FšÆôÅçÏYs¹f5½)T\Ú£Û ¶¥a¨bÔ°¢SlçßuEÃÚ3T‹ôu¡œÉLˆDÕ@Ñ»âJ*)ªJdB&½ Ÿl?°7óFìÜhØþ~ÖïZ€%óržîK t矄î,XFFì>Ðe_œwœIàî'zÑ8oDH_zt­Q¯Ð:XÒ"øãÇÕ„Æe`0V£gïz6}ÃÞ2ÇŽ[Ê ~­{SgïלM8Êú3­éÞÀ£týTWÈwûyIö(U=ìlë\ºö»‡j9Ó­n¾tí{G¿üÔ {A—¯¥øºéìÜVê«›}ßñá²ÖeÏùìcÝÓ·k>V˳¡]õ.bÛžó©…”}mûØ ÌÎÿíEc' ŽBÅ Ì2ꦒĥ=º«¸‘ÏâóÛ>ГŸø”d|={ìQÚL{Ú:—&g›´zS¶h±ZbmÓjZ!ÇR‹­Giâ^Iö.iÓ.k]bsüµ~6,®ž%m+©l«%®@¾æžFË*N`æhqãÇ‘˜'î z&£É.Ý”‘™Qì1ªøW)6ž-bä³Äãç{ '?¹k2«xy—¿®>äsÍg~%œ[É1/ŽÉ‡ùÅe~%\`.¿ˆ…©¹ù?ùð“bó BY8úÛ*¢,*¦ªméÕÜ…^´=4‡ÝW¢øù·cŒèÛ¬@'ýµ>Xp­‰Ÿ“ŽË™*ýÇŽ£–Kñaƒž+Y*Ç’-4/aÔ$>t7?­ú‡Uýf3Le–†Üót«~7]jçï ¬ÞQl?-©ï¶näÉé1øu­Ÿìl—0¶×Žœ“£mËÙL•`ÓUakI;›ã >ù‚6X5+)¸ç+;3î`™lgïùØ“®4>\ÖºøæøkQ6,®ž%m+©ìüí“wA”ëŒP‘3G÷̘>£Ðý¯Lz¥DÝTÒSà“&O*6?@jjj±u,2¿¢ØˆËÜiq·îÝóDfÖÆ%öYØîµâ0wí@~qYÜÓH…)èüâtÒäIe~J #éìFþ:“ˆ¢w§×ãÐçøV§½8>k‰g6°ù\=ºÕ1z÷WÔ)@ǺfVœŒgíòMôìÞŽê~`É"!.š‹áçø÷ØQúÎ~gßÝ àåW^vøCeý®SôhÓ“^%êüi6ýº£Ðru ™VÐøLê{Ë|>ö¤+—µ.ík¹±úL"-ߌGÏNT½Æ†ÅÕ³$;µ«éƚТËv«Ù®Ø²¡"nÐså®Ö¶W7Ù#bKÊ_œHµ÷øù×\¦oøãîÏIãÀS䊢º^²¨¹›íż©¬ù¡4X³¢Y¹*{Ô(¸ûã™®ŽòéLA<Þ=˜oÖþËÁU+i1v0~Nöù`î¾:?BÍó?pþÒa–.8\lÚ ý¨wq!gÂù}éÂéºå¤ûiÃÕr"maæ±-îzs±·ÌÒö«üé]ë2 ]çÁ,¬¼\1[ØÝ:€ÎXAO>ÄÒ×v˜UaÅÛÍ{8zNŽ´u.iGX2ïˆmƒ=zÖËK{O›*,Üv‰sÿüÊìJ.·¡ÉÀ‘”,V}=Ëáó²·MuEø‚#>\%µ}½ž=ðþb)q‡ùaÞa‡êY’ôz¿/"º²uN¾ôèU¿Ø²¡ÜG0ËA7•$N+4?:~_›>G\êr!³6nDÑélÖ`–øL”‚ªùüÅó¥Rîå•_JËáÕˉʲâZ­=´ð+ð›~-¡ýYì¼ÅòÕ‡õØ]vù`î>½KU>?Œ}Ûvp<ä,1ñ)¨èqóô¡Fí îhv×մξô{îmÿ‡£'Ï›Hz|«Ö¢E‡.¥šêt´Ì²¾Ò§z×Tß?›‹ªÃååOkªÖ”§F×äÈî=œ8FdLé™*Î&7|«R¯ÑåþšžâÒ;ò:¡Á}îeËÎÃ\ŽŠ'Kq¢JÍútîþj»]½y ìò+²ûÐ)b’Òл¸âW­ÍÚt`ÝÒùÊíòHG.­ÙILr†ÃçUÖ)rG|¸,#9Nnµ2²?ÖmåTø²4^þ4kß•M?Wl=K²“Á­ƒŸ{‚­·rö‰©™8»š©LÇû›“\g„ëÆÖMeÍ1:ªÜt›hš¦¡iÕb³óÃ÷>tè ¯N~µ\ó ‚ Üh>x÷&M™$Æ¡Xn´nº‘ù N¨V•ØØXü® LÕªŠw‚ äã½wÞ`òÔÉb A„"Ðëô6ÓpíNA¡ðà)‚ ØGLͪ‰UAA»0 y:²Ð̄ı’ ‚ ‚à0žžWEgî?ÉÉÉøzûŠuAA‡Éÿ°xß[;rL,$‚ ‚ ØMýà&6kÕåm³‚ ‚ B¹"SAA)‚ ‚ ˆÀAAD` ‚ ‚ ‚LAAA¦ ‚ ‚ SAAŠÀP^ÕnRìþ’^àž›?7ݵߋÚVšºØ[§Šä厭YÆ U[yëŸûcO£í£K0ù=‘íï9tþɵ¶Õ;ñ ¬M×òú‹pÓ+Ò«»|Ƚzovýõ>.:ûb½ý8êÈ&fÏ_ʶ½G¹“€Eç„5‚ê5à‡yŸpáÐ&~\ñ+[vîçìÅTƒ+A [ÐçéÙóN»Ï¡²ü0…#õ±×žöÄdA„ ˜•A´U‡ÊŸ}¦«Þ?̆÷vòÖ¢öo{o#Á#‡UJÇɶ¥FRÔ9¿;ŠO¾z‹C 5XûvGéU‚]$_\Ã3ß æû¡Ê-¶ì]0…§?\MÍû‡ñá‚ÿÑ´Ž/™‰‘Ù³‹ä¥ôö2öëÉG#^¥~u?Ò£Nóõÿ^à£ñ9œ¸†YOÔ»åí/BQ„ФÒN‘Ÿ9vKÀÚýÇ£W¢÷¿Od–ÕfŸ5+Šiû£Q=¯ö«U‰m¢`ö¯Ãðw¦pvͧң»iìêÄ®Ÿa{BF¹”ò ƒ>Xkƒ¡ü6s<-ëWÁYoÀÝ;ôç“ïËK»eÅlF=уƵpÒë0W fì§Ÿ°qú;Ò8·A á˜GV~Î#Ýî¦Qãætìþ_f®8X Mýà&6S9×þoï4xqä–cUãøêÍÑtlÝŠ ›åí¿²g£ŸîOëæ-nÜŠ{Âì5G ”coºü8›Ûðl wTK,ï쉲Ù¹û=b-*æ#hkv.ö¼í9ö°6-©Ü„£Òò¶ÍìÖž»º}‘÷=-j)õƒ›Ð¤Í³ÛÑɽ9–ôÓö…mYÂ3÷¦ùÍiØ´ Ý{Ž…›ÃÊ¥~éQûxsÌ0înßž†šqW‡î ÿ.k÷ž—ž}0wFTK,㟙_.åýþê·¨šF¯‡a(ÅJ Eç @Vòá2Å“ã|LjÇzÓ¼Ys5kOï§'²-"­@ºý+¾ ÷n4jÜœ¶ÝúóÙÏÇŠ×36Ú[VibŸ "0+„ÈÑ÷µ¯¸âß“µÿìä¯%ï‘´t¬]wÓugý묟h=ô-¶îÝÇ©³/.±G¿á¾§^g_V¯ßÊñý2²EÓ_ÈÄUáyyíMW&d‹Ùï­³½P¾¿€æú›ßÞcèàÀš]Ѩá|u)™äKß–¡æ´KöèN@‡¡Û/39ûÁÉ­©Íö¨}³è>ò][;²róNn]FŽóö³½øl_t™ë÷îcϳxÝ.FL_Èácøû—y ½·릔ž}P­ëë¼Ú.€èƒ³xmÃ¥2—÷mh"Oy”*ÿÎ/&`ôº·LõxzÖIžûhûöïdÞ«9¾s-£ÿûIt£~LâÃ~ãÀö5ô ˆä‹Iù`g¤­èU”Ë#þ‚ ³\ïz¯ýä2oÒ 4McôÌ1Ôõ1aò©ÃK3GÝP#hO¡U/ú|Ûæûšt«Æ³ÇѰŠƒÉ‡Ç&ÏÈ€ï}àpºÂìö&½ŽøÓ3ø7-[HYÒBø¿Óñèô®¼Þ­Z±ùí=v£g[pná bÏ Ãª¡Y3øäP Ç í³ÁŽXŽ”èsÌŸú Œ·­ßË ±h£?K=_&ï ^ú|š¦òíËß•¹~?_NAQü<ÜpÖë1ûÕ¤K¯'˜ñÃïÒ³o†|ù).z~žðgÓÕ2Å–°œü5]ô×cÏ·“úU¶0ëõÆKe:§Wæ¿Aë _ Ÿ@ÊååÒ]íµ7sšfåÇIß]“J_a¶/Éž%Q–Ø'­Ýùü½yƒÍ÷¡ÏŒåÌ©ãÅÞMÆòÈTõ3åm3ùõ¦Ý0#<ìc,°mɥƴkU`_FÂ6‡Ó†ÞX‡Wzñ¿ã±¼ûçE¾ï]‹‹ë?$ݪáÓd<õŒÅ_\ì=¶gƒ0êVz!ðûgÀųmÙ˾™`QwœNDÑÛÀÓî‹S~L¾Y2±…ͶŸ"²ÛºÁ¶NXL(SýúUscñÅdÆõ½Ÿñ&jÕ¥YëN =œ;½]òÒÕkp ¾ž)½½(,Ø+œÜ[ðí›÷òÀä Ÿ¼ŽÓ{y¬’bKm£ž3iÎg¨%öüìúf"O~ô; ã‘Wçò^e²I~ײߡY-Ŧ3ùæô‹++€‰W)7ÉTÖ‘NGbŸôAA¸uc~™fnÁ¹Ø{€›Be2 •;3µåèaª;}±²7]Q<0¹=ÿ{r-‡?]½'°ä³£t~í¾óÚ{l½s C«ºñå¥ýìNLaú‘jöý”qLåñŸ‘œàÉäLÜGÚ}§CŽ¡©\:sˆé_bõ‰íüß±8¦6óqØ¥­ßkK¿Àðþ\þÚqˆ 1‰„ž8H艃lØÅÁMoÚøj~ßʇâƒ#±¢nÿOöíÝ,øíUæ>Sú· ®ëÁÇbY–Ä ½ìʳ}îxžþdŠ¢ç¿Ó~äíw”Ù.N6ñ¤œ_Û¥eUšöw$öI„[;æ—Y`–‡°ì`bÁåVǤ1( {Q}Zô¯v4MÓ®‹!ºñExsCx«©O™Ó…_Ë×pZGÔ¥oÙx¡%ó/¥ wòçõ–~åVG€jñåŒãÌÞü)¡i&?[ŸôC]ülœ›=4 »c½ ÕƒÛòá’¹üÕj ?Oøš©¾š·ÿ±ª®Ì»˜Ìªè4ž¬bÛÖ®Uû—¹~FÿÖLÞš©@VJ,Gw®aÀ¨I‰X¼Y®~+8Žý6×ñÒ·ÓX~÷X>6¥ÔÇëñáÞêõ)¿¼²€)«^¢¤W²n›3Ž!Ó7 è <ùþ2Þì|]ícÓ/brúE@ß|7¾ k&ñª/½®ØXy=ccicŸôAA¸½¸îùŒx·/Š¢ðù˜YœK'-îŸýÒ®¼Á9Ó^Û"Ó*¼žCg=›^ÇÊg_c[H$ªšEÜå³l\µÑt8]‘ `ðá6~hš•WƽŽUÓh;ƒ®ÜêP«ßC옺gó] ©ê†[Õ§håî̲7öг_ÍRÙÊàÚ„)wúö=3Bâó¶ÿäI ŠÂ¬±³M'=>œ™ãæ (z<¤Ìõë>d2Ë6ìár| :WO|½³§Ý«÷“ž}“aò»—ï^lEZÌæR—á<œÅ“z“üï7ô|é3„F’eUI‰`φLÜ3/íæY£sÄ¥3C>\~ÝÅ%`Û/ÆÎAQ¼?8oÿ€ªÙâóÍe{IWUbÃòÖ°Onxl,¯Ø'­M¹¿h½¨Eâ¹ë}ªtžÄòi&^Ÿ½”;,§F#{v&TbÙïÍÈ™¿1¤sk›2+¯FO³qi>œµ‰O‚ ‚ Â͉LAA¡\1ˆ A®25.Â퀌` ‚ ‚ "0AA„ÊËu›"¯×àŽÛÒÀŠ¢˜»]m!írkÚMb…ô ±—,{¨ ˆŸV.ÿ¾®k0o·×–\û›Ì·³-¤]nm»I¬¾!ö*â§•Ç¿eŠ\AA(WD` ‚ ‚ "0AA„ÊK¥}fbJ&qI6Û<Ý\ð2;K« 7”ô¬$Ž_Ú©¨­\I%Ðëš×xˆz­Ñ)òjÙŠÀjÕˆŠO'9= ´\²ÒÊŸzé,1?|ÁÅã^Â-¸±õ·I†ÁH’›7n.ü½Œètеœ9s€ùû&âêìÁ# Çqgµ®â§Yidº¤uŒ*­ÄOoGùëö0þØwO³+œ’FçÆÞ ëÙ" ,Ü8_Gxâ:5y˜´Œ(ÎG†°ñäè”±Ô h#ªb3˜¾ìÉ™ =¶.¤É™ÝvçM2YH¯b¢NÕhé™\üþk‚§M£ÞÀ6©Ý‚Õ÷ ÇÝÆõ»ƒ@?71j9’¥f0oÿË<öÀ3è=ëvÏaåÉOÙú3ª™ëÝž~ºm!Õ"¶Ý1 }†§-&ñÓÛQ`´kÙ€šµ±X5"/G¢K’n¼À¼ð÷¶¸ΉK11:©íW“Ãç׋À¬ Ò2,$g(´k}Á'}©{ÑhW¾twˆ¾§&æ¦õ±üs‰Ø¡dX<Ä 7°MrQü|èж)»ö 9Í"-gÖ†|EÓz­¨éWŸ°”½Œìñë.bý™ n1íöóÓV¨’è±½ Úùõóiêâ§·«ÀÔ4ˆNÌ ËbÅjÕ¤µ„JAjV<) „^¸„‹Þ›S‘{¨ãW›èÄX1N¡@öLFš ýÃ㩞%æI¸ÊÅÐ ÔùOsª¹gpøâ)žÔÓúé‘bÐÔ&6ùÓM¤¤«èи5ã{ýà&ç)wjF&‡±-|¯ýwG“Ö—N]·ŽDFFÐÌû¡ÛÏO5%a'‰ ÂhÒþn<ýÝ8¹5„ý]5Œ&oüª6#°NG\ÝýoK?½M¦†Õªa±–^`ªá´jñ0ɪÞ?n§¶‹Þ¡àPR‡·7]e rz'#¾ÚÀC IDATµéúà@^qnzYràN:É© ¤ddR# 5Ç/lª©§R•ud³ç/eÛÞ£\ŽIÀ¢sÂÇ¿AõðüOo »^7œ áÞ©¾M«ÚÄ åše3‰QaDm=K†í©îÅé3§8âìÇîVмAëeXý53þ¡SHΰàäì‚ÙÓÿ~]¹¨ÒÚ¤,ñíz·ÉµÛÌ!Ѱ%«µð²oÖ6)ì:f·*§å_‹¾Iï.Oo=OBÖj¹¶"4ò±±qtº³_¥ò§ŠŽmŠbÅ9u/AÊ!ÚÝW—j‰è\êóàsƒ°j:,YY$'YØy AõzФÍÓœLvùéÍ~m­hÛWj©Z5T««ÅŠUµ–ªŒKM#Yµbp7`INæ­—™ÿPÛòíDIQçXüî(>ùê-%Ô`íÛE5:€«³fW’Ó®ðÏ™Ôô¯†Å’…“ÁäpY{LáéWSóþa|¸à4­ãKfb$GölgÅ¢bìüêœOö˜ìÚ³UUs¿æìÔH‹¿DFøV‚«è tIälX(›Ï¹s¥Æ3¤¤¤¢*¶̳Ë&2`ÊZz½þúvÄËÅJÌÅ0öîÜÆêK+µMnt|³«M”|s¶µkÓ!_ØÍÜ&7š}Ö¡:¥Ñ¢v7vÇ-"KË¤Ž©=ÿ÷Ë‹<Ûês”Ûêzi‰ÛJß&[èÚ¹žnǰ¤† ¤ïÀÇUEAÑ™QªR§n0‡ö/dåÉT ˆÁàZ¢ŸÊµõf˜ª5ûcÍþh¥¸XòñaÆÌŧ?çÀÇKá¡ñ·q“+˜ýë0üi|²v0g×| "0ÂÍÙ ƒÞ…»x–¸Ä DÆÅãêìãP9ñ!ß0èƒÕ˜ƒ‡òÛÌñrüÛÙ;ô§ÃýŨ׍M»ªSÚµéX`d,#5C¿­#È\8u*„-ˆ&N$ìˆø·@±ï¼€7uÁKŸýæ¶€ †ôjHÃ+µInx|³£Mò’º-O¡Þ2mâ(o¿ý6]ºtáž{î)sYé–~<ò.£ú½Á¹´]Dež¡ƒÏ6YNcßNÔðlxÛ]//^Iƒ ±ÄÅžÅjÉDQ2Ñ@¯.½> g—ãÜqG{BNER7Ðu;—è§rm­Ä31%“_·‡ºïЙhüªÕÌ™V«Æñð8–üyªÐi„îíjâëa»`7#áoæ]JÆäó /´|Ž“>_óÇÅlNx{<]lÒYù9¯ÏZÊ¿—ñ©uG¾Zh½ìMWb3Ø}â ±‰¥Êïcv¡Mã|=K^¸ìäÞ<ûî.ýt}Wö¬âϱóÐi3õT¾“Ã'ð|ï;mÒå¯/yk8oÏ]É©+©Ô½“a¯¼‰Ëÿó&Âã2©Ñ¨-§̃Af›üa[–0möv#]s&èŽV<ùük–'.ÁÞs¾²s2ž^ €Þ`įzm:?8€)/Ä#g '·-CNlãë·§òÝo;ˆJÊâÔ¿‡+¾Ô´ìON¤?Z`éL셣Ą ¸iuþ=qŒ3)>t1Ó žXµ3¶Òfr&ƒ&LgÜãТI#<Š~ZIö¼^~ko|KÚÇûoÁÆ=ljŒOÅÕ»-:taÀOÓ£uÍ o“ªU«¦ÝRmâ(}ô'OždÔ¨QåRÞª3isgWÌnÞœˆý•—úè²\øçðÞ¹om¹øSn¬Xúþó¼7wGÃcð¨Ö€'Ƽŋ}š8œ.?ÿ»§‹.%óÈ¢Mü_Û€«ýúØ;´íó#&¿G8²ý=‡lR½ñ³¬ßôÿÑôT hŒª…bpª‰UƒL‹ŠfMF!SV*&÷Íð°cdꪕè§å}m-o?-.®çŸÞ¯¨©òú¢õ¸¤ þØw…8«1ª™È,w"2ܸ”îŠoµšT ðÆš3‚éå鎇_UNDë9zEáðe­ì;¯òóö Dǧ(ÿÌ÷3±jr:ïØç¢iV¦j“.rÇGô}í+®ø÷dí?;ùkÉ{$-[ <{Ó•–ÐK‰l>OŒj&Úb&2ÓËé®\L5žbä\’ gœ8kàd´žãQ:ŽDÀÁKÙvX½3‚Ããí:VfòÁìÎàÖÔö}ôî{êuöeµañú­ßÿ'#[$0ýåL\^hYwù²`ífþœÿ$—Bö2mD/æ^hÌ’ ÛXÿõ„ÝÊ+O}b“'jß,º|—ÃÖŽ¬Ü¼“ƒ[—Ñ…ã¼ýl/>Û ÀÈWZ°ñ?mò®{g3-'+uíE·fqêÊNVø€wMeÉî× ¹²—„”82²Q­™(ŠBrz"ûϯãÇ]Sùi÷TÖü˜Ë §Š-ûÛÐDž rü©fGÎyÓZ3ÓçÿÄþC9¶=Ó„_M£ÿä¿ ”û묟h=ô-¶îÝW©Äeî(‚jÕòú3º |Öÿ¶‚-'Rؼãé^­hÓ÷-Ì~AdZÔáSð*ñù³Ù£ ÿ®]ÀóƒÿK§6-iÝ¥CƽɊ­¡Ò—dÏëå·öÆ·w{žÅëv1búB;Àß¿Ìcè½uX7}äui“Â>Ü’mâ³gÏæìÙ³üðÃøûûÛ•'!=’þ~œmÇÆ3‹l¦m/$žâ`ÄŸt¿ë Τl%Q¤¥çVü=—M&a4¸—‹?å2êÇ$>üá7l_CŸ€H¾˜4vF–:À3odOIÿýÎ6Û·¾›=¢ÝøyÇG¯õîØÝ!f.]´àæÑ¡>GeòïI—¯ø¡éîDUª“‘ FÜÜ|ìòÓò¾¶V”Ÿ×ó‹ÉÓ!Ç*dæ ÿ%³‰ê5«bôô¾úñðÆèáElªJj†…¬,•˜'³'F³.¹w<}¼0] »ùäûP3¯÷Ï 0 'Bè÷3l\eÞ¤hšÆè™c¨ëcÂäS‡—f¼£´7]iIË´`4š¨V£§7.ž>=¼qñðÂhöÂÅì™÷7÷ü]Ü=0º{`öòƒi%½FA#%úó§¾@ƒ¶ÓóÇ}MºUãÙãhXÅŒÁäÃc“gd¸½÷A¡%¾õÖ@üLª·–·mê[ãg2P«ÃhôŠBZÔÛã¼¼‹¦1úó±Ôó5aòâ¥ÏG¡i*ß¾ü5º¿‰—AOì‰O8‘ózKÚ >8‡ÞàÅ´îÕK]g{IJáø•õ4 nM·V½¸¯Uoï:†öúáaªAMÿö×èÎîÎC­ž¢MÃ{hY¿ ÕýjóçÑ9Å––®P³‹è9ço¿FïÎMñ09a0zÐi@öpøÿWÐ;žB« _ôT>¬9ý:KD\UªX­:ÕªX­:~>^œ<†w@]‚šJË>oS§a;R,8ƒjÕ ]ë0î+~3•Z×ÃY§ iñalû}9¯ïÅèïO9dÏëã·öÇ·Ÿ/§ ( ~n8ëõ˜ýjÒ¥×Ìøá÷ o“üŸüÛ’³nÁ6)žE‹qþüyvïÞÍœ9s˜1c†ÝùÓ-É|º}8÷µëÍ”§¿äxÊF>Û>Œ„ô(44˜BŸ{‡k9ËÅô#41?ÈÉK{ÈJÕh[£G¹ùS.WcwmÆÍ…¦YùqÒw¥NØõ-êš ÄŸú”éÙí¤fFðÎÁhÉ}j•â&HGº¡.çôO±ó„/!Ç/`ÉŒCÑ×¥iû÷q÷éËþ= Ý“”lFÓÕ%¨~»ü´¼¯­å§7*®ßð5˜š™YVÒ3U¬9O‹[sîѬÚÕ5˜ª–ÌT UÓ°æL›+šRèÓ]ɾáï„ ¼ƒ_¡¹›SÎE3&Ö÷⽭̽˜Ì³Õ³ïè–G¦ð¨ßÕ‡4L~=Ûw…Ù›®¬;3Kͳ‡šgkι_]2½?Û:‚E-¾\ûěɷ#K&¶°Ù¶äR cÚµ*d e[¡åvöÈø:½WÞ¶.9Û+ Y3mòü‘mË>þm™± ˜€Þ¥o·÷gì¶Þ^}ž%ë¶ê}Ò­Õ:N¥FŽ0+Mí%Ë’AtÂytÖd2ÒS¯Þ ¤jdee’••uÍÇB–Å‚%+“˜ÄËÅ–]Û¨çLš…ó*õŒŽu}{Ï93áÓßý‚?wæRtYù–SÓ ŽL<ìc¤2’;~ Z­ì ‰âph.:½NC§Ó¡Stj î­FîìΜN°ëYš‹ªe±âf49ÍÕ¨Û@fwˆš™Èé'Ø·c3óf/&<]eãŒwàéïí¶çõð[Gâ[¿jn,¾˜Ì¸¾÷3ÞäAí º4k݉Á£‡s§·K…¶‰’ó«' Y³ÇÛnÕ6)ñ¦pþ|^xá†ÎÙ³gyõÕWqv¶ÿ—éæíŸH«¦hÔ‚ˆŒ ï>•§~cÚ¦~4¯zîž®4©Þž]ñ‹0è\¨åÒ†¶Œflûy%–íˆ?åb»}sb÷•ÀÄR¥Pôž¼ß?ˆÇžfÚŠ0–>U+Ûß%ÞbÅ«îZ¸9•ÊO­èHÓÕà„2†„#_RïÜ..¦µcSŠ -¨µœÔT+ŽªŒ®ÂÏágÈ"Ü.?-ÏkkEùéŠë7\`&§¤u% ¬Zލ´Z54«†——;±) ª&11 XTkÎÓåÙ+ݪ‘ž^pÍâþ—eOÇ|Dýà ìÿ飃<;£s¥ºˆôd¤§ÕJÁ­æ n «fEµdÛÁ¢ª¨ªj&.ÅŒ†9†¦fpéÌ!¦O|‰Õ'¶óÇâ˜ÚìêÃ)¹Ë[·=LugûDOaobÈ¿¦Ð‘×t¯oôƒ¾àèç_ÃÀ÷øòóã x£S™êl/.xã׋#Û]Ðëuèuzô}ÞßÜõÀªª¢ZÔœ¶Èþ4Ô·(¶ìÁu=xãX,‹Ã’x£¡—Cõ²÷œ?0œç’øÏ„OYòDÌFÐ,ÔoؼÐv1Tâ·jX­V,ª•ø¤2cNÑÐ…‡éê&:½/ƒC–½UOjº•#—!Ω^žî¸8»•8 ¡wö aóv4lÞŽ;iÛw.–ÔãÛ³¢ýÖ‘øöÚÒ/0¼?—¿vâBL"¡'zâ 6FqpÓ›Þ&ƒƒÁ€^k·IIlܸ‘°°0FŽÉÎ;ùñÇÊo±d`0éÐiÒÔxN¦¬çÎ:miPµ9¿ïYBÿö£MÛALV(w{?Çú?Ð&ðaªº×)Wªhî;ý¢ç81{<õ1«?Ø@›×z•ÙOcSõDÆÞ‡‡> “–ŠgÌ&2“ÿ% 0‹sgIJ­‡Ÿ‹;)‰»òÓò¼¶V„ŸÞ¨¸~C§È=Ý\¸ûLY1¸©±˜µx<•|ô‰D^çÒ娼'È£cHŒ¾L}¯,ûYi Ñ¬ªB‹@=ÛVÃ7ß"dMMâ›.£wòc×ñ#yë N‡#äøVüô\Üô.É9#~ý²ï°VÇ\ý-Ý´è_ Ô×Þt¥¥^uînä‰Ùñxëñ3$àœL5c*5\Ó¨ížA]Lê{Zhè«r‡¿•fU£gÛª4¬é]¼0Ñ»P=¸-.™‹»^ÇϾ¶Ù?(0ûg°æ†$ThÛ?VÕ€UÑméZõêÓÓAÏq¯§‘´¨ÕÌ?ú«¢Ó0zuet¾†*´ÎŠ‚¢è0œpvvÁÅdÄäꊛ»f³OO<==0›Í¸º¹b4qvqÆ`0d?ak-zÉB‡ W~yeªƒÜÞs^ž À'#îϾð)—~âfDÓ4T‹•”Ô \ÓC¹¿kºv¹—5kS«Ví݇áCG0úù1Œya,O<Þš®ñ(XIOÏBµX±:p³ãÝxÎævÛ³"ýÖÑøfôoÍÔésÙ¼c'leÙ—Ù#G)k¤M®g,j×®ÍÚµk™2e ..Ž?ÙümöìÝÎûÓÀÔ WgÒ·‘ât™¾]‡¤\â\Únw’ž–žãÿðpÃçËÝŸr±‰Ý19±; oòíM—‹³gg&5ö&-f- Îì`ƹDôoÞìP.~jLçŽVÏQÿÎÔ®HP@n)õé;è}F¿0®T~Z^×Öëé§Jÿìö ˜^fg†õlÌÒ£Có}Zû‘¥ª6¯*jVÏ—¡=3ôáF>~žW‡á£HxºŠ_«IølOQgðáõV~¨éáL;Àˆwû¢( Ÿ™ÅÙ¸tÒâÎñÙØ/ Ô×Þt¥ÅÇÃHÏNA…Ú#ïópÑŸG:áïeßP¸Áµ Sîô!1ì{f„\}0hè¬çqÓëXùìkl ‰DU³ˆ»|–«2zàƒåv®Ã?yƒ¢0kì,BcÓIgæ¸9(ŠžÁ±qÑ—Ÿ ξ€ ý €†Ï¾hã¸Zg5oÃ^î¬K-ŸÍš×`\‹·áÜù“º“ºÝüŒhÞ@ÿý´l⌛u7Vµhé<œÅ“z“üï7ô|é3„F’eUI‰`φL\ô/£Ø{ÎkfOk½³r/éªJ䩌r7#V ,jN W3ð÷'2ò ïe˞㨪³ÙŒÁ` 99–>'ˆZTkî›ÁmèÔsïÏúž-{Ž—„Å IQlXø6ÿ™ør)ìYq~ëh|ë>d2Ë6ìár| :WO|½³c¥{õ~Ò&×3–äŽÈêõ¼òÊ+çós«Áä®ËɈÖ1óçWð¤6µm¸œqŒ]ñ‹9šò+éÖš»?ÂòÍ_1¨ùÿpÖ—|=pÔŸr±‰Ýcç ( Þ\ |{Óåç‘wà³Q/a±jø¶œDU'}¹ùiÕj5IS½Ù²ÿ,ǯTûÖZv›ÙÏ!?­˜këõóÓàœ¥YÛ"Ón= d¯*ä£( ªª]W­Øû׆w¶pÿkí Ýßñµnlž–ýdZ•ΓX>íü#Wó`‡¶tð ¦þ3 ä³7ÝÍB·©ÙvX8îÛ«¢§ÑÓl\ú 5MaâѸI+þÓ‹¶„ñà„¯ÊíØþ­ÆðÇÜÉ4µnåÑ»ÛÒ¼S_6Y1uÎ/¼ÔÚÏvd÷¿SpÑ)d&d¢è\øßëÚ µŠ¬³5³sõƒ\ L¤NõdêÔH¡nÍTêÖH£^ÍtêÕLË÷I§^Màº^˜ Q%ßzè{lY:ƒvÊ¿¼üTš7iAËNóÂ[_sÁ©~ÑâÔÎsž¸lïmÎ_ÓFЬi[{éKš›wSú«UËŽ¹ïSÔëõèt:T',:#zƒ½^O\\ÄÄÄ ªV½ Ù7¬…Lsµ©å®?~âÕ†Ó­S'ßÑŒ6÷öç‹¿Òxí³ùl@RÙ³¢üÖÑø6gT'¯žÃãݻѸÑ]ôõ5{ bÁ² Ò&×3–”3ƒšÿj?Çÿý4‘ó—Ciå1'‘45ææG9¶£Õ“fU»TÈõ2—ÙLLx¼;ÍÛ÷dù?ž{w S:V)ßÞt6ƒ-wL¤³§ )ç’xpJ§ ñÓ,ƒIÔÅ¿f¼ýƒöÓŠº¶^/?ýh|oª˜]Ò¹u©~Ö´D­ÔkÎèeîC;ùïÊ­ü·Øi–×9òºÍ¶æÆñË€q6Û^Pð±}{ÓU&Šzý€ïor:äÍB¶w磯º—ª\{·u}‚y]Ÿ°ãް)ÇN-6½u.ÕˆƒÎ 'gOŒ®Urn~ô€:hŠ‚.gÅ™–óÆéôt EÑãl0¡ij‰å4»ÿ}zŸÃ¶¶çœ]¼Z0í« <†ö£Çìj£JT+Õ‚¢dÿ‰»»;îîn(VKöo £ETT1119ïh´¢(JöÃ%–ì›ÕkïS?›m@¶×žé·ŽÆ·:íævK›Ü XRÓ-ÿCm¯FÌÞ6–ÚGx´ý³\Ê÷ á‡Ó¹Æc¸é|ÈÈÈÈTŠ‚N§Ëû{3 f&²mGöû~å#Œ:¥Bü´mƒP¬ªîn;n;iU­8éÐtdX5»¦#C½7ÃÈMY[”ñ&Gs"-ÃLXÈ ÎF|«ÖÁÃË“ØØ²ÔêhJ*IÉiøU "õòAÜ<«áS¥ÎÀÍÍ‹#‡%.Ù™ê5ñððÈ ðÒ.Žá¬SéPÖºD‚Åw+lÞ² “ÉDÍ5PU•}û÷OfF&Ù¿0“œšNJFšb QÓp&UM—>]‰ÛDúF1×D«5gfOÍyÈÊÃuÆr4ê.¾_ó5ÜÒ®QRRRÑé¢C¯×¡ÓéÑé²§‡õú«oÀ¨löž_{Þ¿ŒÑ£ÿòï ?Yþ\¼tç˜x4«FFf&Z`UẠLÕ‰tk=öïØ„‘XL®þ¸¹û–‡89»’’‰‡W É 89›0¹ù”AFj"ñ ±d€§goÌf³´”èõ:jø™èX7‘ÈÄ$ÜuU8rô8ÅÎ>jàï€ÁFöèM3¾f'1¨´ÉMKÞÏsjÖ¼ÿût ¸õ ¬š¬ª¢¢i:ô€–ó¢úìôº2OÙÛ+–J+ª†ýµ“aâ§"0+’îíjÒª¡íÏgùzÑÙÑ9dÄGlQ^˜Ífê4ìD´W ©qd©V<²}&€‹F"€/dýÁ ^P£®ï€ÚxyzÚLOI»8†»›Á êR=° Y¥\.£SL&#žÒ§+q›Hß(Æ^::ƒÁ'.sG5­Öl ØLçN5E~«Û[üTf|=Œøz¥…„Š‹‹ 5jÖ¢FÍZbŒ¨ ¼½½ñööcH›Üöä FÈ~í‘ ~Z)oˆÄ‚ ‚ ‚LAA¡Òr]§ÈÿÞ¼A,.¶v¤¤MAüTfùPÑ¿yy3!¶v¤¤MAüTf9 O\‰-¤]iiA?½=5˜‚ ‚ B¹âÐ悯gŠÅAX!‚ ”ÀúÌX±– +A„ò˜gNk ‚ ±BA(Yƒ)‚ ‚ ˆÀAAD` ‚ ‚ "0AAA¦ ‚ ‚ SAA¸•(÷ŸŠŒ:²‰Ùó—²mïQ.Ç$`Ñ9áã_ z øaÞ§·½Áë7ä'­AA¸u)×̽ ¦ÐuÀ¶[ðá‚åì?²Ÿ½[áÿ^B`fˆX[Aá6 ÜF0ãC¾aЫ1å·™ã1(ÙÛ½éð@:<Ð_¬-‚ ‚pPn#˜¿¿ú-ª¦Ñëãayâ²8¶,á™Ç{ÓüÎæ4lÚ†î=ÇÂÍaÒÕnBýà&ìY2^÷v¦Ñ-éÒs0ßþÊ’O^ãþNíixGKîëûœK*÷üWö¬bôÓýiݼÁ[qï#C˜½æH¡Ç8þÇwŒx¬7Í›5§Q³öô~z"Û"ÒlÒ]›'—ô¨}¼9fw·oOÃF͸«Cw†Ž—µ{Ï‹— ‚ ‚p{ ÌoCx2ȣĴQûfÑ}ä»¶vdåæܺŒ.çíg{ñÙ¾èBóLÜåË‚µ›ùsþ“\ ÙË´½˜{¡1K6lcý×Ovt+¯<õI‘Ç,MþØ£ßpßS¯³/« ‹×oåøþ?Ù"é/dâªðÇxzÖIžûhûöïdÞ«9¾s-£ÿ{µÌüë.O‡³ùþîcϳxÝ.FL_Èácøû—y ½·ë¦/Aáö˜aé*5]ô%¦ÿòB,šÆèÏÇRÏׄÉ;ˆ—>…¦©|ûòw…æyë­ø™ To3,oÛÔ·ÇÏd V‡Ñè…´¨5E³4ùçûšt«Æ³ÇѰŠƒÉ‡Ç&Ïà÷÷>(pŒWæ¿Aë _ Ÿ@ÊååvÙïçË)(Š‚Ÿ‡Îz=f¿štéõ3~ø]¼TA„› »×`þ½yƒÍ÷¡ÏŒåÌ©ãyßkõœI³p>C¥ž±x‘ùSD*}üMyÛL~=i¤F,&ÈÓÙÃ%[ë½ò¶uÉÙ¦èŒXÍšYä1K“ɥƴkU ¼Œ„m¶å?ÁÍj±Ë¾ýª¹±øb2ãúÞÏx“µƒêÒ¬u'ÎÞ.yéê5¸ƒ_ÏÏAáºr­ö+™[p.×`p]Þ8Ëâ°$ÞhèUî'¥/d]gþµžš¦•{~%gÿ–£‡©î\òȬ“Í1‡Îïµ¥_`x.í8Ä…˜DBO$ôÄA6lŒâà¦7mìž¿AA*Ä*º{ IDATG·~м(åÚãÃ!¼ÕëS~yeSV½T¨ Ë屪®Ì»˜Ìªè4ž¬â @Zô¯¸V­Xª2ƒs–l‹L³ÙÞ}Èd–mØÃåøt®žøzgO·»Wï'^*‚ ÂME¹þ’Oë¡ï±¥Õ}Ì^°œ—ŸêÃåØDT3ž>þÔkØ(/«1ü1×—i³–ðèÝ‹ÈÀ™ Æ­˜:g2O·ö«4Æñjô4—VáÃY ™øÄCÄ$gaö ¤yÛÎôðU©Êüh|oFÎü![WŸ,Ÿ3ªóÍáó)G‰ˆOÃÕ+€Ž=1þÍ â¥‚ ‚ ÜT(€¦iÉÉÉ˜Íæ"ÂðïÍZÜ)‚ ‚ Ü”¤ë7AÓ4¢¢£ð(ߟŠAA˜‚ ‚ ‚LAA¡òb¨è\û‚vAA¡âérÏòþ_õóŠR—3nü$pP쨂 9NZYAá:¡iZr&¼2ÕárEɘb¸ž'z³RÔËÑAA*›f)ê@àØµ”eÚp=Oúf|ÅQ~ãÊ+šAA¸4ËFòAAD` ‚ ‚ e'==µüIzzºLAA¡lX,*¿¯û‹óç/òצ­”çã&"0AAn3¬V+6n&22 € .ò÷¶å&2E` ‚ ‚ Üflß±›°°ó6ÛNžü—ý–Kù1± ‚ ÂíEçNíéÓ§žÞö%&Äyùæ˜QG61{þR¶í=Êå˜,:'|ü«T¯?Ìû´Â_?¸ @±ïŒªÌõ¯ì”Õ¾‚ ‚ T‹¼\f!Y7tŠ|ï‚)t0†í–|¸`9ûìgïÖ_ø¿×†˜Réæf¯¿ ‚ BEpÃF0ãC¾aЫ1å·™ã1(ÙÛ½éð@:<пRîf¯¿ ‚ Â-'0õ[TM£×ÇÃòÄYq\Ù9™NO¯@o0âW½6À”â¡Ï. w:6äÄ6¾~{*ßý¶ƒ¨¤,Ný{€#+ÿŸ½û‹âxãþÝ+À!½‹¨¨ˆ[;ö^c¬Ø –hŠØb/1ÖØ»b ±kŠ1VD£Æ^Q»(MiG¿»ùýqp‚ÜÞÑ}?ÏÓ¸·;3ûÎììË–cf­?ˆ§ïãaU®:#ç[C˜±,òê2ôœ±Öuãäao”F8VZ$íºµFo†y­A8pŽ‚¬3 ÆtÇ_ÏãõlÔ¶ñýχO ùÞZ´²‹FvCÙÎÓpèìB$Þ^6Ãý0uð t¼4?Ç:uÙþãÃh3ø˜~3ûOû¡’Y:ýì…ÙS<ñBñ7–÷(—­Ž!ëŸ`óz?lv2Ƶ?bØü“ßß w/ÌV%“¹=ƒ¹¸ï8ø‡I1{×qx6¬ˆ´˜w¸sõެοþM3!„RÀ8Ž+²ºŠíÌW)r@YC!¯õ=Ì@w0“ˆ!22CÓ>ó¯O­T[— †zΟ’KØ>ýc¿v*ZI ±ª€IkÇIûwNÙ c¿Î•¬%X:cÒº±`LŽ]Svç¸Íüùž°‘ˆP¦þÕ²ÙóûÁF"B¹Æã!ä8$Gýžkºl¿sâ6¤(ælœˆ*ö¦I¬ÐwæÀß?ý¬VÇÔsàîl ‘H‚&ý~$¾?Ì+~ÇÞ'‚ã8ؘ•‚PS›²hÞmÖPrI!„ ƘÖ?º*¶+˜å„x–,ÛT9*夥Å=ªÅpæê}¼‹ŽCº\¡úLžò\mý.VFjËG&zØHTË$6],*ôöWÖý­zÝIá‡ø¨mãaf¨ü @h¡ZÖdÝ/M¿Uè²}æ•ó‹ï+cœå'ó9Ö¬ÄÙêÐ.è3nÀЮMádmyr<ž?¾‹ã{7`pÏŸéè'„BJ¸bK0;/!Çá©~k¸ëÿZ X1²ìL•W'ßЪ¾^vÊ«m'>$«–%GÿY$íïë` 8­^·±ƒþ¼m>б`kp\•™ÛóF¶î˜½j+®þ‡Çw.áÐ&_e¿†ÿNG%!„B ¦n,\½°zwHŸî@×I«qçy$Òr$ƆãÆÙ#ðÚUµ®gYÀ£7‘"—#2ä*&Z£U}#÷ÇqX7a=^Ĥ 9æ%V{o*’ö{­Ça½÷z<ÿ˜‚”Ø×X;q38Nˆ¡Ë‡éÍ`¾~J 8:f.GB.OGÌû8|/Æ{vÔ©L׌Ç.G&g[ÞaØL:{ïc!06‡µ¥ò“2½è¨$„BJ¸býK>îÃÂÅzm°Ñï0¦ þï?ÆC.0€¹•-*U©ªZÏ÷Ðf¤L[†S‹FâØ+¹¡ÏÄí87µ?ïºì=¦ãð" fm<ˆŽ÷ÁÊ©*úŽY ÜXèí·­7§¶ZcÑzôh¶©0€sµz˜½y&†¸ÛèÍ`°¨:çÚcéú½ðÐ ¤é0µvDíèé³E§2—MîŽÑkÿÂ0wŸÞ&ß<¶)vîÛŒu?>Dxl2Œ-ìФó@LžëCG%!„RÂqc R©¦¦¦¹þI¿À€³>Ê[«‡C3·1z"cZo«Jzû !„òuÈÌYBƒ¡RåêÙò–ãÇŽÀgêl­_ò1z"ÒÓÓ°×oSžy ‹«cˆŠŽ‚­]ñþ©HB!„òå¡“B!„P‚I!„B(Á$„B!”`B!„B &!„B)fEú=˜ùù›–ú ¤·ŸB!ä‹J0sû“%EIo?!„BÈ—`2Æ(Ú„B!…Lþ0 =ƒI!„B(Á$„B!”`B!„J0 !„B¡“B!„P‚I!„B(Á,`á7~Ç„þ]PÅÉÆ"•‚£sU´ìÜGµÇqà8¡1ÎĦª•‘{ÆBj½âY·¦Ÿ¢nOqÅ¡(Ë+ì: 3–Å9fµi>ÄàÙÁÙ¨QÖ " Hbô/ÖÍÿšÕpÔyÿ¥¯ÏaD熰46€±%vsoyÇDÛ9OS;õm¼} ŠjÜ~í}Kc›Ìl.¯çF=p6½üNßFLR2¢ßaß*”K¹¯¶>S$cܸÓjËO‡dEñ~×&c,Û¦å„íô¹ ÞÆà×ñEr,}ÓgBYE,9xK§íeIAhQ³3Ž=sÃåñáÅeTv k´À“d¿yEç<¢Ÿã–¯>ÁüøpZNÙ “SpÿÐR4©îC‘f6åѺç(ì9ÿTm›©U,ñüÐ \‰OS-K‹¿‚A‡žÃ²ÊTêQR¨¿